mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	Enable kernel memcg notification via additional flag
This commit is contained in:
		@@ -249,6 +249,7 @@ func (s *KubeletServer) AddFlags(fs *pflag.FlagSet) {
 | 
			
		||||
	fs.DurationVar(&s.EvictionPressureTransitionPeriod.Duration, "eviction-pressure-transition-period", s.EvictionPressureTransitionPeriod.Duration, "Duration for which the kubelet has to wait before transitioning out of an eviction pressure condition.")
 | 
			
		||||
	fs.Int32Var(&s.EvictionMaxPodGracePeriod, "eviction-max-pod-grace-period", s.EvictionMaxPodGracePeriod, "Maximum allowed grace period (in seconds) to use when terminating pods in response to a soft eviction threshold being met.  If negative, defer to pod specified value.")
 | 
			
		||||
	fs.StringVar(&s.EvictionMinimumReclaim, "eviction-minimum-reclaim", s.EvictionMinimumReclaim, "A set of minimum reclaims (e.g. imagefs.available=2Gi) that describes the minimum amount of resource the kubelet will reclaim when performing a pod eviction if that resource is under pressure.")
 | 
			
		||||
	fs.BoolVar(&s.ExperimentalKernelMemcgNotification, "experimental-kernel-memcg-notification", s.ExperimentalKernelMemcgNotification, "If enabled, the kubelet will integrate with the kernel memcg notification to determine if memory eviction thresholds are crossed rather than polling.")
 | 
			
		||||
	fs.Int32Var(&s.PodsPerCore, "pods-per-core", s.PodsPerCore, "Number of Pods per core that can run on this Kubelet. The total number of Pods on this Kubelet cannot exceed max-pods, so max-pods will be used if this calculation results in a larger number of Pods allowed on the Kubelet. A value of 0 disables this limit.")
 | 
			
		||||
	fs.BoolVar(&s.ProtectKernelDefaults, "protect-kernel-defaults", s.ProtectKernelDefaults, "Default kubelet behaviour for kernel tuning. If set, kubelet errors if any of kernel tunables is different than kubelet defaults.")
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -202,6 +202,7 @@ experimental-nvidia-gpus
 | 
			
		||||
experimental-prefix
 | 
			
		||||
experimental-cri
 | 
			
		||||
experimental-check-node-capabilities-before-mount
 | 
			
		||||
experimental-kernel-memcg-notification
 | 
			
		||||
external-etcd-cafile
 | 
			
		||||
external-etcd-certfile
 | 
			
		||||
external-etcd-endpoints
 | 
			
		||||
 
 | 
			
		||||
@@ -430,6 +430,9 @@ type KubeletConfiguration struct {
 | 
			
		||||
	// Comma-delimited list of minimum reclaims (e.g. imagefs.available=2Gi) that describes the minimum amount of resource the kubelet will reclaim when performing a pod eviction if that resource is under pressure.
 | 
			
		||||
	// +optional
 | 
			
		||||
	EvictionMinimumReclaim string `json:"evictionMinimumReclaim,omitempty"`
 | 
			
		||||
	// If enabled, the kubelet will integrate with the kernel memcg notification to determine if memory eviction thresholds are crossed rather than polling.
 | 
			
		||||
	// +optional
 | 
			
		||||
	ExperimentalKernelMemcgNotification bool `json:"experimentalKernelMemcgNotification"`
 | 
			
		||||
	// Maximum number of pods per core. Cannot exceed MaxPods
 | 
			
		||||
	PodsPerCore int32 `json:"podsPerCore"`
 | 
			
		||||
	// enableControllerAttachDetach enables the Attach/Detach controller to
 | 
			
		||||
 
 | 
			
		||||
@@ -374,6 +374,9 @@ func SetDefaults_KubeletConfiguration(obj *KubeletConfiguration) {
 | 
			
		||||
	if obj.EvictionPressureTransitionPeriod == zeroDuration {
 | 
			
		||||
		obj.EvictionPressureTransitionPeriod = metav1.Duration{Duration: 5 * time.Minute}
 | 
			
		||||
	}
 | 
			
		||||
	if obj.ExperimentalKernelMemcgNotification == nil {
 | 
			
		||||
		obj.ExperimentalKernelMemcgNotification = boolVar(false)
 | 
			
		||||
	}
 | 
			
		||||
	if obj.SystemReserved == nil {
 | 
			
		||||
		obj.SystemReserved = make(map[string]string)
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -472,6 +472,8 @@ type KubeletConfiguration struct {
 | 
			
		||||
	EvictionMaxPodGracePeriod int32 `json:"evictionMaxPodGracePeriod"`
 | 
			
		||||
	// Comma-delimited list of minimum reclaims (e.g. imagefs.available=2Gi) that describes the minimum amount of resource the kubelet will reclaim when performing a pod eviction if that resource is under pressure.
 | 
			
		||||
	EvictionMinimumReclaim string `json:"evictionMinimumReclaim"`
 | 
			
		||||
	// If enabled, the kubelet will integrate with the kernel memcg notification to determine if memory eviction thresholds are crossed rather than polling.
 | 
			
		||||
	ExperimentalKernelMemcgNotification *bool `json:"experimentalKernelMemcgNotification"`
 | 
			
		||||
	// Maximum number of pods per core. Cannot exceed MaxPods
 | 
			
		||||
	PodsPerCore int32 `json:"podsPerCore"`
 | 
			
		||||
	// enableControllerAttachDetach enables the Attach/Detach controller to
 | 
			
		||||
 
 | 
			
		||||
@@ -204,7 +204,8 @@ func (m *managerImpl) synchronize(diskInfoProvider DiskInfoProvider, podFunc Act
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// attempt to create a threshold notifier to improve eviction response time
 | 
			
		||||
	if !m.notifiersInitialized {
 | 
			
		||||
	if m.config.KernelMemcgNotification && !m.notifiersInitialized {
 | 
			
		||||
		glog.Infof("eviction manager attempting to integrate with kernel memcg notification api")
 | 
			
		||||
		m.notifiersInitialized = true
 | 
			
		||||
		// start soft memory notification
 | 
			
		||||
		err = startMemoryThresholdNotifier(m.config.Thresholds, observations, false, func(desc string) {
 | 
			
		||||
 
 | 
			
		||||
@@ -69,6 +69,8 @@ type Config struct {
 | 
			
		||||
	MaxPodGracePeriodSeconds int64
 | 
			
		||||
	// Thresholds define the set of conditions monitored to trigger eviction.
 | 
			
		||||
	Thresholds []Threshold
 | 
			
		||||
	// KernelMemcgNotification if true will integrate with the kernel memcg notification to determine if memory thresholds are crossed.
 | 
			
		||||
	KernelMemcgNotification bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ThresholdValue is a value holder that abstracts literal versus percentage based quantity
 | 
			
		||||
 
 | 
			
		||||
@@ -354,6 +354,7 @@ func NewMainKubelet(kubeCfg *componentconfig.KubeletConfiguration, kubeDeps *Kub
 | 
			
		||||
		PressureTransitionPeriod: kubeCfg.EvictionPressureTransitionPeriod.Duration,
 | 
			
		||||
		MaxPodGracePeriodSeconds: int64(kubeCfg.EvictionMaxPodGracePeriod),
 | 
			
		||||
		Thresholds:               thresholds,
 | 
			
		||||
		KernelMemcgNotification:  kubeCfg.ExperimentalKernelMemcgNotification,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	reservation, err := ParseReservation(kubeCfg.KubeReserved, kubeCfg.SystemReserved)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user