# NodeConformance for Systemd and Cgroup v2
Kubelet supports the ‘systemd’ cgroup driver. This code needs to be thoroughly tested against incoming changes to make sure no new changes end up breaking existing supported functionality. This driver currently only has test coverage via the SIG Node CRI-O periodic and presubmit test jobs.
Also, the kubelet now also supports the next version of the kernel control groups, cgroup v2. We also need to ensure cgroup v2 support of the kubelet is thoroughly tested against any new changes. We currently only have optional presubmit coverage of this via the SIG Node CRI-O cgroupv2 job.
In the past, we have seen a number of regressions in the existing crio/systemd presubmit and periodic test jobs runc, caught later as failing tests on periodic jobs:
- [runc update caused test failures](https://github.com/kubernetes/kubernetes/issues/102092)
- [systemd driver on SELinux-based system began failing](https://github.com/kubernetes/kubernetes/issues/101311)
- [runc regression blocking pods from starting on systemd driver](https://github.com/kubernetes/kubernetes/issues/102676)
The frequency of changes breaking the crio periodic jobs suggests they will be a good candidate for presubmits.
Furthermore, we do not have any of these jobs currently tracked by the Release Team for CI Signal, and SIG Node has been manually tracking them. We believe that since these features are supported, we should start tracking them on release dashboards in the upcoming release.
## Goals
- Ensure we maintain coverage of the systemd cgroup driver via RT-tracked periodics and presubmits
- Prevent regressions due to this lack of presubmit coverage
- Add coverage of cgroupv2 functionality as release-informing
- Exercise the CRI against at least two runtimes to ensure that we are not writing containerd-specific code
## Non-Goals
* No other test are targeted other than NodeConformance
* Add NodeConformance presubmit tests that use cgroup v2 + systemd cgroup driver to **presubmits-kubernetes-blocking** testgrid tab.
## Proposal
* Add NodeConformance periodic tests ([ci-crio-cgroupv1-node-e2e-conformance]) that use cgroup v1 + systemd cgroup driver to **sig-release-master-blocking** testgrid tab.
* Add NodeConformance presubmit tests ([pull-kubernetes-node-crio-e2e]) that use cgroup v1 + systemd cgroup driver to **presubmits-kubernetes-blocking** testgrid tab.
* Add NodeConformance periodic tests ([ci-crio-cgroupv2-node-e2e-conformance]) that use cgroup v2 + systemd cgroup driver to **sig-release-master-blocking** testgrid tab.
[ci-crio-cgroupv1-node-e2e-conformance]: https://github.com/kubernetes/test-infra/pull/22507
[pull-kubernetes-node-crio-e2e]: https://github.com/kubernetes/test-infra/pull/22740
[ci-crio-cgroupv2-node-e2e-conformance]: https://github.com/kubernetes/test-infra/pull/22754
### Plan
Timelines assume we are not currently in freeze.
1. Add `ci-crio-cgroupv1-node-e2e-conformance` job to release-informing testgrid tab
a. [Pull request][ci-crio-cgroupv1-node-e2e-conformance]
b. In appropriate period of time (1mo?) propose `cgroupsv1-crio` to release-blocking
2. Create `ci-crio-cgroupv2-node-e2e-conformance` periodic CI job
a. [Pull request][ci-crio-cgroupv2-node-e2e-conformance]
b. After an appropriate period, add `cgroupv2-crio` job to release-informing testgrid tab
c. After an appropriate period (1mo?), propose to release-blocking
3. Propose `pull-kubernetes-node-crio-e2e` presubmit job to presubmits through node process
a. Optional, non-reporting, running on every PR, including adding to appropriate testgrid tabs: [Pull request][pull-kubernetes-node-crio-e2e]
b. Then (~2wks?), optional, reporting, running on every PR
c. Then (~2wks?), blocking for every PR
4. `Cgroupv2-crio` job will not be considered for presubmit at this time, as it is not yet beta.