Skip to content

Commit 6f21539

Browse files
Promote PidLimits to GA
1 parent 14a1106 commit 6f21539

File tree

5 files changed

+21
-37
lines changed

5 files changed

+21
-37
lines changed

cmd/kubelet/app/server.go

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1248,16 +1248,14 @@ func parseResourceList(m map[string]string) (v1.ResourceList, error) {
12481248
switch v1.ResourceName(k) {
12491249
// CPU, memory, local storage, and PID resources are supported.
12501250
case v1.ResourceCPU, v1.ResourceMemory, v1.ResourceEphemeralStorage, pidlimit.PIDs:
1251-
if v1.ResourceName(k) != pidlimit.PIDs || utilfeature.DefaultFeatureGate.Enabled(features.SupportNodePidsLimit) {
1252-
q, err := resource.ParseQuantity(v)
1253-
if err != nil {
1254-
return nil, err
1255-
}
1256-
if q.Sign() == -1 {
1257-
return nil, fmt.Errorf("resource quantity for %q cannot be negative: %v", k, v)
1258-
}
1259-
rl[v1.ResourceName(k)] = q
1251+
q, err := resource.ParseQuantity(v)
1252+
if err != nil {
1253+
return nil, err
1254+
}
1255+
if q.Sign() == -1 {
1256+
return nil, fmt.Errorf("resource quantity for %q cannot be negative: %v", k, v)
12601257
}
1258+
rl[v1.ResourceName(k)] = q
12611259
default:
12621260
return nil, fmt.Errorf("cannot reserve %q resource", k)
12631261
}

pkg/features/kube_features.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ const (
203203
// owner: @dims, @derekwaynecarr
204204
// alpha: v1.10
205205
// beta: v1.14
206+
// GA: v1.20
206207
//
207208
// Implement support for limiting pids in pods
208209
SupportPodPidsLimit featuregate.Feature = "SupportPodPidsLimit"
@@ -447,8 +448,9 @@ const (
447448
// a volume in a Pod.
448449
ConfigurableFSGroupPolicy featuregate.Feature = "ConfigurableFSGroupPolicy"
449450

450-
// owner: @RobertKrawitz
451+
// owner: @RobertKrawitz, @derekwaynecarr
451452
// beta: v1.15
453+
// GA: v1.20
452454
//
453455
// Implement support for limiting pids in nodes
454456
SupportNodePidsLimit featuregate.Feature = "SupportNodePidsLimit"
@@ -680,8 +682,8 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
680682
BlockVolume: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.20
681683
StorageObjectInUseProtection: {Default: true, PreRelease: featuregate.GA},
682684
SupportIPVSProxyMode: {Default: true, PreRelease: featuregate.GA},
683-
SupportPodPidsLimit: {Default: true, PreRelease: featuregate.Beta},
684-
SupportNodePidsLimit: {Default: true, PreRelease: featuregate.Beta},
685+
SupportPodPidsLimit: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.21
686+
SupportNodePidsLimit: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.21
685687
HyperVContainer: {Default: false, PreRelease: featuregate.Alpha},
686688
TokenRequest: {Default: true, PreRelease: featuregate.Beta},
687689
TokenRequestProjection: {Default: true, PreRelease: featuregate.Beta},

pkg/kubelet/cm/cgroup_manager_linux.go

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ import (
3636

3737
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
3838
"k8s.io/apimachinery/pkg/util/sets"
39-
utilfeature "k8s.io/apiserver/pkg/util/feature"
40-
kubefeatures "k8s.io/kubernetes/pkg/features"
4139
cmutil "k8s.io/kubernetes/pkg/kubelet/cm/util"
4240
"k8s.io/kubernetes/pkg/kubelet/metrics"
4341
)
@@ -275,11 +273,8 @@ func (m *cgroupManagerImpl) Exists(name CgroupName) bool {
275273
// scoped to the set control groups it understands. this is being discussed
276274
// in https://github.com/opencontainers/runc/issues/1440
277275
// once resolved, we can remove this code.
278-
whitelistControllers := sets.NewString("cpu", "cpuacct", "cpuset", "memory", "systemd")
276+
whitelistControllers := sets.NewString("cpu", "cpuacct", "cpuset", "memory", "systemd", "pids")
279277

280-
if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportPodPidsLimit) || utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportNodePidsLimit) {
281-
whitelistControllers.Insert("pids")
282-
}
283278
if _, ok := m.subsystems.MountPoints["hugetlb"]; ok {
284279
whitelistControllers.Insert("hugetlb")
285280
}
@@ -352,13 +347,10 @@ func getSupportedSubsystems() map[subsystem]bool {
352347
supportedSubsystems := map[subsystem]bool{
353348
&cgroupfs.MemoryGroup{}: true,
354349
&cgroupfs.CpuGroup{}: true,
355-
&cgroupfs.PidsGroup{}: false,
350+
&cgroupfs.PidsGroup{}: true,
356351
}
357352
// not all hosts support hugetlb cgroup, and in the absent of hugetlb, we will fail silently by reporting no capacity.
358353
supportedSubsystems[&cgroupfs.HugetlbGroup{}] = false
359-
if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportPodPidsLimit) || utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportNodePidsLimit) {
360-
supportedSubsystems[&cgroupfs.PidsGroup{}] = true
361-
}
362354
return supportedSubsystems
363355
}
364356

@@ -417,10 +409,7 @@ var (
417409
// getSupportedUnifiedControllers returns a set of supported controllers when running on cgroup v2
418410
func getSupportedUnifiedControllers() sets.String {
419411
// This is the set of controllers used by the Kubelet
420-
supportedControllers := sets.NewString("cpu", "cpuset", "memory", "hugetlb")
421-
if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportPodPidsLimit) || utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportNodePidsLimit) {
422-
supportedControllers.Insert("pids")
423-
}
412+
supportedControllers := sets.NewString("cpu", "cpuset", "memory", "hugetlb", "pids")
424413
// Memoize the set of controllers that are present in the root cgroup
425414
availableRootControllersOnce.Do(func() {
426415
var err error
@@ -547,10 +536,8 @@ func (m *cgroupManagerImpl) toResources(resourceConfig *ResourceConfig) *libcont
547536
if resourceConfig.CpuPeriod != nil {
548537
resources.CpuPeriod = *resourceConfig.CpuPeriod
549538
}
550-
if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportPodPidsLimit) || utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportNodePidsLimit) {
551-
if resourceConfig.PidsLimit != nil {
552-
resources.PidsLimit = *resourceConfig.PidsLimit
553-
}
539+
if resourceConfig.PidsLimit != nil {
540+
resources.PidsLimit = *resourceConfig.PidsLimit
554541
}
555542
// if huge pages are enabled, we set them in libcontainer
556543
// for each page size enumerated, set that value
@@ -608,7 +595,7 @@ func (m *cgroupManagerImpl) Update(cgroupConfig *CgroupConfig) error {
608595
updateSystemdCgroupInfo(libcontainerCgroupConfig, cgroupConfig.Name)
609596
}
610597

611-
if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportPodPidsLimit) && cgroupConfig.ResourceParameters != nil && cgroupConfig.ResourceParameters.PidsLimit != nil {
598+
if cgroupConfig.ResourceParameters != nil && cgroupConfig.ResourceParameters.PidsLimit != nil {
612599
libcontainerCgroupConfig.PidsLimit = *cgroupConfig.ResourceParameters.PidsLimit
613600
}
614601

@@ -648,7 +635,7 @@ func (m *cgroupManagerImpl) Create(cgroupConfig *CgroupConfig) error {
648635
}
649636
}
650637

651-
if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportPodPidsLimit) && cgroupConfig.ResourceParameters != nil && cgroupConfig.ResourceParameters.PidsLimit != nil {
638+
if cgroupConfig.ResourceParameters != nil && cgroupConfig.ResourceParameters.PidsLimit != nil {
652639
libcontainerCgroupConfig.PidsLimit = *cgroupConfig.ResourceParameters.PidsLimit
653640
}
654641

pkg/kubelet/cm/pod_container_manager_linux.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,8 @@ import (
2626
v1 "k8s.io/api/core/v1"
2727
"k8s.io/apimachinery/pkg/types"
2828
utilerrors "k8s.io/apimachinery/pkg/util/errors"
29-
utilfeature "k8s.io/apiserver/pkg/util/feature"
3029
"k8s.io/klog/v2"
3130
v1qos "k8s.io/kubernetes/pkg/apis/core/v1/helper/qos"
32-
kubefeatures "k8s.io/kubernetes/pkg/features"
3331
)
3432

3533
const (
@@ -86,7 +84,7 @@ func (m *podContainerManagerImpl) EnsureExists(pod *v1.Pod) error {
8684
Name: podContainerName,
8785
ResourceParameters: ResourceConfigForPod(pod, m.enforceCPULimits, m.cpuCFSQuotaPeriod),
8886
}
89-
if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportPodPidsLimit) && m.podPidsLimit > 0 {
87+
if m.podPidsLimit > 0 {
9088
containerConfig.ResourceParameters.PidsLimit = &m.podPidsLimit
9189
}
9290
if err := m.cgroupManager.Create(containerConfig); err != nil {

test/e2e_node/pids_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,14 +118,13 @@ func runPodPidsLimitTests(f *framework.Framework) {
118118
}
119119

120120
// Serial because the test updates kubelet configuration.
121-
var _ = SIGDescribe("PodPidsLimit [Serial] [Feature:SupportPodPidsLimit][NodeFeature:SupportPodPidsLimit]", func() {
121+
var _ = SIGDescribe("PodPidsLimit [Serial]", func() {
122122
f := framework.NewDefaultFramework("pids-limit-test")
123123
ginkgo.Context("With config updated with pids feature enabled", func() {
124124
tempSetCurrentKubeletConfig(f, func(initialConfig *kubeletconfig.KubeletConfiguration) {
125125
if initialConfig.FeatureGates == nil {
126126
initialConfig.FeatureGates = make(map[string]bool)
127127
}
128-
initialConfig.FeatureGates["SupportPodPidsLimit"] = true
129128
initialConfig.PodPidsLimit = int64(1024)
130129
})
131130
runPodPidsLimitTests(f)

0 commit comments

Comments
 (0)