mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-11-03 23:40:03 +00:00 
			
		
		
		
	Merge pull request #56661 from xiangpengzhao/move-kubelet-constants
Automatic merge from submit-queue (batch tested with PRs 56410, 56707, 56661, 54998, 56722). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Move some kubelet constants to a common place **What this PR does / why we need it**: More context, see: https://github.com/kubernetes/kubernetes/issues/56516 **Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: Fixes #56516 [thanks @ixdy for verifying this!] **Special notes for your reviewer**: @ixdy how can I verify #56516 against this locally? /cc @ixdy @mtaufen **Release note**: ```release-note NONE ```
This commit is contained in:
		@@ -12,7 +12,7 @@ go_library(
 | 
				
			|||||||
    importpath = "k8s.io/kubernetes/pkg/kubelet/apis/kubeletconfig/validation",
 | 
					    importpath = "k8s.io/kubernetes/pkg/kubelet/apis/kubeletconfig/validation",
 | 
				
			||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
        "//pkg/kubelet/apis/kubeletconfig:go_default_library",
 | 
					        "//pkg/kubelet/apis/kubeletconfig:go_default_library",
 | 
				
			||||||
        "//pkg/kubelet/cm:go_default_library",
 | 
					        "//pkg/kubelet/types:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/util/errors:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/util/errors:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/util/validation:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/util/validation:go_default_library",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@ import (
 | 
				
			|||||||
	utilerrors "k8s.io/apimachinery/pkg/util/errors"
 | 
						utilerrors "k8s.io/apimachinery/pkg/util/errors"
 | 
				
			||||||
	utilvalidation "k8s.io/apimachinery/pkg/util/validation"
 | 
						utilvalidation "k8s.io/apimachinery/pkg/util/validation"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubelet/apis/kubeletconfig"
 | 
						"k8s.io/kubernetes/pkg/kubelet/apis/kubeletconfig"
 | 
				
			||||||
	containermanager "k8s.io/kubernetes/pkg/kubelet/cm"
 | 
						kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ValidateKubeletConfiguration validates `kc` and returns an error if it is invalid
 | 
					// ValidateKubeletConfiguration validates `kc` and returns an error if it is invalid
 | 
				
			||||||
@@ -91,13 +91,13 @@ func ValidateKubeletConfiguration(kc *kubeletconfig.KubeletConfiguration) error
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	for _, val := range kc.EnforceNodeAllocatable {
 | 
						for _, val := range kc.EnforceNodeAllocatable {
 | 
				
			||||||
		switch val {
 | 
							switch val {
 | 
				
			||||||
		case containermanager.NodeAllocatableEnforcementKey:
 | 
							case kubetypes.NodeAllocatableEnforcementKey:
 | 
				
			||||||
		case containermanager.SystemReservedEnforcementKey:
 | 
							case kubetypes.SystemReservedEnforcementKey:
 | 
				
			||||||
		case containermanager.KubeReservedEnforcementKey:
 | 
							case kubetypes.KubeReservedEnforcementKey:
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
			allErrors = append(allErrors, fmt.Errorf("Invalid option %q specified for EnforceNodeAllocatable (--enforce-node-allocatable) setting. Valid options are %q, %q or %q",
 | 
								allErrors = append(allErrors, fmt.Errorf("Invalid option %q specified for EnforceNodeAllocatable (--enforce-node-allocatable) setting. Valid options are %q, %q or %q",
 | 
				
			||||||
				val, containermanager.NodeAllocatableEnforcementKey, containermanager.SystemReservedEnforcementKey, containermanager.KubeReservedEnforcementKey))
 | 
									val, kubetypes.NodeAllocatableEnforcementKey, kubetypes.SystemReservedEnforcementKey, kubetypes.KubeReservedEnforcementKey))
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return utilerrors.NewAggregate(allErrors)
 | 
						return utilerrors.NewAggregate(allErrors)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,6 +57,7 @@ go_library(
 | 
				
			|||||||
            "//pkg/kubelet/events:go_default_library",
 | 
					            "//pkg/kubelet/events:go_default_library",
 | 
				
			||||||
            "//pkg/kubelet/metrics:go_default_library",
 | 
					            "//pkg/kubelet/metrics:go_default_library",
 | 
				
			||||||
            "//pkg/kubelet/qos:go_default_library",
 | 
					            "//pkg/kubelet/qos:go_default_library",
 | 
				
			||||||
 | 
					            "//pkg/kubelet/types:go_default_library",
 | 
				
			||||||
            "//pkg/util/file:go_default_library",
 | 
					            "//pkg/util/file:go_default_library",
 | 
				
			||||||
            "//pkg/util/oom:go_default_library",
 | 
					            "//pkg/util/oom:go_default_library",
 | 
				
			||||||
            "//pkg/util/procfs:go_default_library",
 | 
					            "//pkg/util/procfs:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -122,13 +122,6 @@ type Status struct {
 | 
				
			|||||||
	SoftRequirements error
 | 
						SoftRequirements error
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					 | 
				
			||||||
	// Uer visible keys for managing node allocatable enforcement on the node.
 | 
					 | 
				
			||||||
	NodeAllocatableEnforcementKey = "pods"
 | 
					 | 
				
			||||||
	SystemReservedEnforcementKey  = "system-reserved"
 | 
					 | 
				
			||||||
	KubeReservedEnforcementKey    = "kube-reserved"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// containerManager for the kubelet is currently an injected dependency.
 | 
					// containerManager for the kubelet is currently an injected dependency.
 | 
				
			||||||
// We need to parse the --qos-reserve-requests option in
 | 
					// We need to parse the --qos-reserve-requests option in
 | 
				
			||||||
// cmd/kubelet/app/server.go and there isn't really a good place to put
 | 
					// cmd/kubelet/app/server.go and there isn't really a good place to put
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,6 +32,7 @@ import (
 | 
				
			|||||||
	kubefeatures "k8s.io/kubernetes/pkg/features"
 | 
						kubefeatures "k8s.io/kubernetes/pkg/features"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubelet/events"
 | 
						"k8s.io/kubernetes/pkg/kubelet/events"
 | 
				
			||||||
	evictionapi "k8s.io/kubernetes/pkg/kubelet/eviction/api"
 | 
						evictionapi "k8s.io/kubernetes/pkg/kubelet/eviction/api"
 | 
				
			||||||
 | 
						kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
@@ -62,7 +63,7 @@ func (cm *containerManagerImpl) enforceNodeAllocatableCgroups() error {
 | 
				
			|||||||
	// default cpu shares on cgroups are low and can cause cpu starvation.
 | 
						// default cpu shares on cgroups are low and can cause cpu starvation.
 | 
				
			||||||
	nodeAllocatable := cm.capacity
 | 
						nodeAllocatable := cm.capacity
 | 
				
			||||||
	// Use Node Allocatable limits instead of capacity if the user requested enforcing node allocatable.
 | 
						// Use Node Allocatable limits instead of capacity if the user requested enforcing node allocatable.
 | 
				
			||||||
	if cm.CgroupsPerQOS && nc.EnforceNodeAllocatable.Has(NodeAllocatableEnforcementKey) {
 | 
						if cm.CgroupsPerQOS && nc.EnforceNodeAllocatable.Has(kubetypes.NodeAllocatableEnforcementKey) {
 | 
				
			||||||
		nodeAllocatable = cm.getNodeAllocatableAbsolute()
 | 
							nodeAllocatable = cm.getNodeAllocatableAbsolute()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -101,7 +102,7 @@ func (cm *containerManagerImpl) enforceNodeAllocatableCgroups() error {
 | 
				
			|||||||
		}()
 | 
							}()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// Now apply kube reserved and system reserved limits if required.
 | 
						// Now apply kube reserved and system reserved limits if required.
 | 
				
			||||||
	if nc.EnforceNodeAllocatable.Has(SystemReservedEnforcementKey) {
 | 
						if nc.EnforceNodeAllocatable.Has(kubetypes.SystemReservedEnforcementKey) {
 | 
				
			||||||
		glog.V(2).Infof("Enforcing System reserved on cgroup %q with limits: %+v", nc.SystemReservedCgroupName, nc.SystemReserved)
 | 
							glog.V(2).Infof("Enforcing System reserved on cgroup %q with limits: %+v", nc.SystemReservedCgroupName, nc.SystemReserved)
 | 
				
			||||||
		if err := enforceExistingCgroup(cm.cgroupManager, nc.SystemReservedCgroupName, nc.SystemReserved); err != nil {
 | 
							if err := enforceExistingCgroup(cm.cgroupManager, nc.SystemReservedCgroupName, nc.SystemReserved); err != nil {
 | 
				
			||||||
			message := fmt.Sprintf("Failed to enforce System Reserved Cgroup Limits on %q: %v", nc.SystemReservedCgroupName, err)
 | 
								message := fmt.Sprintf("Failed to enforce System Reserved Cgroup Limits on %q: %v", nc.SystemReservedCgroupName, err)
 | 
				
			||||||
@@ -110,7 +111,7 @@ func (cm *containerManagerImpl) enforceNodeAllocatableCgroups() error {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		cm.recorder.Eventf(nodeRef, v1.EventTypeNormal, events.SuccessfulNodeAllocatableEnforcement, "Updated limits on system reserved cgroup %v", nc.SystemReservedCgroupName)
 | 
							cm.recorder.Eventf(nodeRef, v1.EventTypeNormal, events.SuccessfulNodeAllocatableEnforcement, "Updated limits on system reserved cgroup %v", nc.SystemReservedCgroupName)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if nc.EnforceNodeAllocatable.Has(KubeReservedEnforcementKey) {
 | 
						if nc.EnforceNodeAllocatable.Has(kubetypes.KubeReservedEnforcementKey) {
 | 
				
			||||||
		glog.V(2).Infof("Enforcing kube reserved on cgroup %q with limits: %+v", nc.KubeReservedCgroupName, nc.KubeReserved)
 | 
							glog.V(2).Infof("Enforcing kube reserved on cgroup %q with limits: %+v", nc.KubeReservedCgroupName, nc.KubeReserved)
 | 
				
			||||||
		if err := enforceExistingCgroup(cm.cgroupManager, nc.KubeReservedCgroupName, nc.KubeReserved); err != nil {
 | 
							if err := enforceExistingCgroup(cm.cgroupManager, nc.KubeReservedCgroupName, nc.KubeReserved); err != nil {
 | 
				
			||||||
			message := fmt.Sprintf("Failed to enforce Kube Reserved Cgroup Limits on %q: %v", nc.KubeReservedCgroupName, err)
 | 
								message := fmt.Sprintf("Failed to enforce Kube Reserved Cgroup Limits on %q: %v", nc.KubeReservedCgroupName, err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,6 @@ go_test(
 | 
				
			|||||||
        "//pkg/apis/core:go_default_library",
 | 
					        "//pkg/apis/core:go_default_library",
 | 
				
			||||||
        "//pkg/features:go_default_library",
 | 
					        "//pkg/features:go_default_library",
 | 
				
			||||||
        "//pkg/kubelet/apis/stats/v1alpha1:go_default_library",
 | 
					        "//pkg/kubelet/apis/stats/v1alpha1:go_default_library",
 | 
				
			||||||
        "//pkg/kubelet/cm:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/kubelet/eviction/api:go_default_library",
 | 
					        "//pkg/kubelet/eviction/api:go_default_library",
 | 
				
			||||||
        "//pkg/kubelet/lifecycle:go_default_library",
 | 
					        "//pkg/kubelet/lifecycle:go_default_library",
 | 
				
			||||||
        "//pkg/kubelet/types:go_default_library",
 | 
					        "//pkg/kubelet/types:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,9 +29,9 @@ import (
 | 
				
			|||||||
	utilfeature "k8s.io/apiserver/pkg/util/feature"
 | 
						utilfeature "k8s.io/apiserver/pkg/util/feature"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/features"
 | 
						"k8s.io/kubernetes/pkg/features"
 | 
				
			||||||
	statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1"
 | 
						statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubelet/cm"
 | 
					 | 
				
			||||||
	evictionapi "k8s.io/kubernetes/pkg/kubelet/eviction/api"
 | 
						evictionapi "k8s.io/kubernetes/pkg/kubelet/eviction/api"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubelet/server/stats"
 | 
						"k8s.io/kubernetes/pkg/kubelet/server/stats"
 | 
				
			||||||
 | 
						kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
 | 
				
			||||||
	schedulerutils "k8s.io/kubernetes/plugin/pkg/scheduler/util"
 | 
						schedulerutils "k8s.io/kubernetes/plugin/pkg/scheduler/util"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -198,7 +198,7 @@ func parseThresholdStatement(signal evictionapi.Signal, val string) (evictionapi
 | 
				
			|||||||
// getAllocatableThreshold returns the thresholds applicable for the allocatable configuration
 | 
					// getAllocatableThreshold returns the thresholds applicable for the allocatable configuration
 | 
				
			||||||
func getAllocatableThreshold(allocatableConfig []string) []evictionapi.Threshold {
 | 
					func getAllocatableThreshold(allocatableConfig []string) []evictionapi.Threshold {
 | 
				
			||||||
	for _, key := range allocatableConfig {
 | 
						for _, key := range allocatableConfig {
 | 
				
			||||||
		if key == cm.NodeAllocatableEnforcementKey {
 | 
							if key == kubetypes.NodeAllocatableEnforcementKey {
 | 
				
			||||||
			return []evictionapi.Threshold{
 | 
								return []evictionapi.Threshold{
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					Signal:   evictionapi.SignalAllocatableMemoryAvailable,
 | 
										Signal:   evictionapi.SignalAllocatableMemoryAvailable,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,8 +30,8 @@ import (
 | 
				
			|||||||
	api "k8s.io/kubernetes/pkg/apis/core"
 | 
						api "k8s.io/kubernetes/pkg/apis/core"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/features"
 | 
						"k8s.io/kubernetes/pkg/features"
 | 
				
			||||||
	statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1"
 | 
						statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubelet/cm"
 | 
					 | 
				
			||||||
	evictionapi "k8s.io/kubernetes/pkg/kubelet/eviction/api"
 | 
						evictionapi "k8s.io/kubernetes/pkg/kubelet/eviction/api"
 | 
				
			||||||
 | 
						kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/quota"
 | 
						"k8s.io/kubernetes/pkg/quota"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -61,7 +61,7 @@ func TestParseThresholdConfig(t *testing.T) {
 | 
				
			|||||||
			expectThresholds:        []evictionapi.Threshold{},
 | 
								expectThresholds:        []evictionapi.Threshold{},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		"all memory eviction values": {
 | 
							"all memory eviction values": {
 | 
				
			||||||
			allocatableConfig:       []string{cm.NodeAllocatableEnforcementKey},
 | 
								allocatableConfig:       []string{kubetypes.NodeAllocatableEnforcementKey},
 | 
				
			||||||
			evictionHard:            map[string]string{"memory.available": "150Mi"},
 | 
								evictionHard:            map[string]string{"memory.available": "150Mi"},
 | 
				
			||||||
			evictionSoft:            map[string]string{"memory.available": "300Mi"},
 | 
								evictionSoft:            map[string]string{"memory.available": "300Mi"},
 | 
				
			||||||
			evictionSoftGracePeriod: map[string]string{"memory.available": "30s"},
 | 
								evictionSoftGracePeriod: map[string]string{"memory.available": "30s"},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,4 +24,9 @@ const (
 | 
				
			|||||||
	DockerContainerRuntime = "docker"
 | 
						DockerContainerRuntime = "docker"
 | 
				
			||||||
	RktContainerRuntime    = "rkt"
 | 
						RktContainerRuntime    = "rkt"
 | 
				
			||||||
	RemoteContainerRuntime = "remote"
 | 
						RemoteContainerRuntime = "remote"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// User visible keys for managing node allocatable enforcement on the node.
 | 
				
			||||||
 | 
						NodeAllocatableEnforcementKey = "pods"
 | 
				
			||||||
 | 
						SystemReservedEnforcementKey  = "system-reserved"
 | 
				
			||||||
 | 
						KubeReservedEnforcementKey    = "kube-reserved"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,8 +28,8 @@ import (
 | 
				
			|||||||
	"k8s.io/kubernetes/pkg/features"
 | 
						"k8s.io/kubernetes/pkg/features"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubelet/apis/kubeletconfig"
 | 
						"k8s.io/kubernetes/pkg/kubelet/apis/kubeletconfig"
 | 
				
			||||||
	stats "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1"
 | 
						stats "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubelet/cm"
 | 
					 | 
				
			||||||
	kubeletmetrics "k8s.io/kubernetes/pkg/kubelet/metrics"
 | 
						kubeletmetrics "k8s.io/kubernetes/pkg/kubelet/metrics"
 | 
				
			||||||
 | 
						kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
 | 
				
			||||||
	"k8s.io/kubernetes/test/e2e/framework"
 | 
						"k8s.io/kubernetes/test/e2e/framework"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	. "github.com/onsi/ginkgo"
 | 
						. "github.com/onsi/ginkgo"
 | 
				
			||||||
@@ -104,7 +104,7 @@ var _ = framework.KubeDescribe("MemoryAllocatableEviction [Slow] [Serial] [Disru
 | 
				
			|||||||
			initialConfig.KubeReserved = map[string]string{
 | 
								initialConfig.KubeReserved = map[string]string{
 | 
				
			||||||
				string(v1.ResourceMemory): kubeReserved.String(),
 | 
									string(v1.ResourceMemory): kubeReserved.String(),
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			initialConfig.EnforceNodeAllocatable = []string{cm.NodeAllocatableEnforcementKey}
 | 
								initialConfig.EnforceNodeAllocatable = []string{kubetypes.NodeAllocatableEnforcementKey}
 | 
				
			||||||
			initialConfig.CgroupsPerQOS = true
 | 
								initialConfig.CgroupsPerQOS = true
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		runEvictionTest(f, pressureTimeout, expectedNodeCondition, logMemoryMetrics, []podEvictSpec{
 | 
							runEvictionTest(f, pressureTimeout, expectedNodeCondition, logMemoryMetrics, []podEvictSpec{
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user