Skip to content

Commit 293a53f

Browse files
authored
Merge pull request kubernetes#94140 from derekwaynecarr/pid-ga
Promote PidLimits to GA
2 parents 0e58014 + 6f21539 commit 293a53f

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
@@ -1252,16 +1252,14 @@ func parseResourceList(m map[string]string) (v1.ResourceList, error) {
12521252
switch v1.ResourceName(k) {
12531253
// CPU, memory, local storage, and PID resources are supported.
12541254
case v1.ResourceCPU, v1.ResourceMemory, v1.ResourceEphemeralStorage, pidlimit.PIDs:
1255-
if v1.ResourceName(k) != pidlimit.PIDs || utilfeature.DefaultFeatureGate.Enabled(features.SupportNodePidsLimit) {
1256-
q, err := resource.ParseQuantity(v)
1257-
if err != nil {
1258-
return nil, err
1259-
}
1260-
if q.Sign() == -1 {
1261-
return nil, fmt.Errorf("resource quantity for %q cannot be negative: %v", k, v)
1262-
}
1263-
rl[v1.ResourceName(k)] = q
1255+
q, err := resource.ParseQuantity(v)
1256+
if err != nil {
1257+
return nil, err
1258+
}
1259+
if q.Sign() == -1 {
1260+
return nil, fmt.Errorf("resource quantity for %q cannot be negative: %v", k, v)
12641261
}
1262+
rl[v1.ResourceName(k)] = q
12651263
default:
12661264
return nil, fmt.Errorf("cannot reserve %q resource", k)
12671265
}

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"
@@ -681,8 +683,8 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
681683
BlockVolume: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.20
682684
StorageObjectInUseProtection: {Default: true, PreRelease: featuregate.GA},
683685
SupportIPVSProxyMode: {Default: true, PreRelease: featuregate.GA},
684-
SupportPodPidsLimit: {Default: true, PreRelease: featuregate.Beta},
685-
SupportNodePidsLimit: {Default: true, PreRelease: featuregate.Beta},
686+
SupportPodPidsLimit: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.21
687+
SupportNodePidsLimit: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.21
686688
HyperVContainer: {Default: false, PreRelease: featuregate.Alpha},
687689
TokenRequest: {Default: true, PreRelease: featuregate.Beta},
688690
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
}
@@ -348,13 +343,10 @@ func getSupportedSubsystems() map[subsystem]bool {
348343
supportedSubsystems := map[subsystem]bool{
349344
&cgroupfs.MemoryGroup{}: true,
350345
&cgroupfs.CpuGroup{}: true,
351-
&cgroupfs.PidsGroup{}: false,
346+
&cgroupfs.PidsGroup{}: true,
352347
}
353348
// not all hosts support hugetlb cgroup, and in the absent of hugetlb, we will fail silently by reporting no capacity.
354349
supportedSubsystems[&cgroupfs.HugetlbGroup{}] = false
355-
if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportPodPidsLimit) || utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportNodePidsLimit) {
356-
supportedSubsystems[&cgroupfs.PidsGroup{}] = true
357-
}
358350
return supportedSubsystems
359351
}
360352

@@ -413,10 +405,7 @@ var (
413405
// getSupportedUnifiedControllers returns a set of supported controllers when running on cgroup v2
414406
func getSupportedUnifiedControllers() sets.String {
415407
// This is the set of controllers used by the Kubelet
416-
supportedControllers := sets.NewString("cpu", "cpuset", "memory", "hugetlb")
417-
if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportPodPidsLimit) || utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportNodePidsLimit) {
418-
supportedControllers.Insert("pids")
419-
}
408+
supportedControllers := sets.NewString("cpu", "cpuset", "memory", "hugetlb", "pids")
420409
// Memoize the set of controllers that are present in the root cgroup
421410
availableRootControllersOnce.Do(func() {
422411
var err error
@@ -540,10 +529,8 @@ func (m *cgroupManagerImpl) toResources(resourceConfig *ResourceConfig) *libcont
540529
if resourceConfig.CpuPeriod != nil {
541530
resources.CpuPeriod = *resourceConfig.CpuPeriod
542531
}
543-
if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportPodPidsLimit) || utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportNodePidsLimit) {
544-
if resourceConfig.PidsLimit != nil {
545-
resources.PidsLimit = *resourceConfig.PidsLimit
546-
}
532+
if resourceConfig.PidsLimit != nil {
533+
resources.PidsLimit = *resourceConfig.PidsLimit
547534
}
548535
// if huge pages are enabled, we set them in libcontainer
549536
// for each page size enumerated, set that value
@@ -601,7 +588,7 @@ func (m *cgroupManagerImpl) Update(cgroupConfig *CgroupConfig) error {
601588
updateSystemdCgroupInfo(libcontainerCgroupConfig, cgroupConfig.Name)
602589
}
603590

604-
if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportPodPidsLimit) && cgroupConfig.ResourceParameters != nil && cgroupConfig.ResourceParameters.PidsLimit != nil {
591+
if cgroupConfig.ResourceParameters != nil && cgroupConfig.ResourceParameters.PidsLimit != nil {
605592
libcontainerCgroupConfig.PidsLimit = *cgroupConfig.ResourceParameters.PidsLimit
606593
}
607594

@@ -637,7 +624,7 @@ func (m *cgroupManagerImpl) Create(cgroupConfig *CgroupConfig) error {
637624
libcontainerCgroupConfig.Path = cgroupConfig.Name.ToCgroupfs()
638625
}
639626

640-
if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SupportPodPidsLimit) && cgroupConfig.ResourceParameters != nil && cgroupConfig.ResourceParameters.PidsLimit != nil {
627+
if cgroupConfig.ResourceParameters != nil && cgroupConfig.ResourceParameters.PidsLimit != nil {
641628
libcontainerCgroupConfig.PidsLimit = *cgroupConfig.ResourceParameters.PidsLimit
642629
}
643630

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)