10000 CPU and Memory manager event when using pod level resources · kubernetes/kubernetes@b111ff0 · GitHub
[go: up one dir, main page]

Skip to content

Commit b111ff0

Browse files
committed
CPU and Memory manager event when using pod level resources
1 parent efd2a0d commit b111ff0

File tree

4 files changed

+49
-1
lines changed

4 files changed

+49
-1
lines changed

pkg/kubelet/cm/cpumanager/policy_static.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222

2323
v1 "k8s.io/api/core/v1"
2424
utilfeature "k8s.io/apiserver/pkg/util/feature"
25+
resourcehelper "k8s.io/component-helpers/resource"
2526
"k8s.io/klog/v2"
2627
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
2728
v1qos "k8s.io/kubernetes/pkg/apis/core/v1/helper/qos"
@@ -463,6 +464,14 @@ func (p *staticPolicy) allocateCPUs(s state.State, numCPUs int, numaAffinity bit
463464

464465
func (p *staticPolicy) guaranteedCPUs(pod *v1.Pod, container *v1.Container) int {
465466
qos := v1qos.GetPodQOS(pod)
467+
468+
// The CPU managerstatic policy does not support pod-level resources.
469+
if utilfeature.DefaultFeatureGate.Enabled(features.PodLevelResources) && resourcehelper.IsPodLevelResourcesSet(pod) {
470+
klog.V(5).InfoS("CPU Manager allocation skipped, pod is using pod-level resources which are not supported by the static CPU manager policy", "pod", klog.KObj(pod), "containerName", container.Name)
471+
472+
return 0
473+
}
474+
466475
if qos != v1.PodQOSGuaranteed {
467476
klog.V(5).InfoS("Exclusive CPU allocation skipped, pod QoS is not guaranteed", "pod", klog.KObj(pod), "containerName", container.Name, "qos", qos)
468477
return 0

pkg/kubelet/cm/memorymanager/policy_static.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
v1 "k8s.io/api/core/v1"
2626
"k8s.io/apimachinery/pkg/api/resource"
2727
utilfeature "k8s.io/apiserver/pkg/util/feature"
28+
resourcehelper "k8s.io/component-helpers/resource"
2829
"k8s.io/klog/v2"
2930
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
3031
corehelper "k8s.io/kubernetes/pkg/apis/core/v1/helper"
@@ -102,6 +103,13 @@ func (p *staticPolicy) Allocate(s state.State, pod *v1.Pod, container *v1.Contai
102103
return nil
103104
}
104105

106+
// The Memory manager static policy does not support pod-level resources.
107+
if utilfeature.DefaultFeatureGate.Enabled(features.PodLevelResources) && resourcehelper.IsPodLevelResourcesSet(pod) {
108+
klog.V(5).InfoS("Memory manager allocation skipped, pod is using pod-level resources which are not supported by the static memory manager policy", "pod", klog.KObj(pod), "containerName", container.Name)
109+
110+
return nil
111+
}
112+
105113
podUID := string(pod.UID)
106114
klog.InfoS("Allocate", "pod", klog.KObj(pod), "containerName", container.Name)
107115
// container belongs in an exclusively allocated pool
@@ -393,7 +401,15 @@ func getPodRequestedResources(pod *v1.Pod) (map[v1.ResourceName]uint64, error) {
393401
}
394402

395403
func (p *staticPolicy) GetPodTopologyHints(s state.State, pod *v1.Pod) map[string][]topologymanager.TopologyHint {
396-
if v1qos.GetPodQOS(pod) != v1.PodQOSGuaranteed {
404+
qos := v1qos.GetPodQOS(pod)
405+
if qos != v1.PodQOSGuaranteed {
406+
return nil
407+
}
408+
409+
// The Memory manager static policy does not support pod-level resources.
410+
if utilfeature.DefaultFeatureGate.Enabled(features.PodLevelResources) && resourcehelper.IsPodLevelResourcesSet(pod) {
411+
klog.V(5).InfoS("Memory manager allocation skipped, pod is using pod-level resources which are not supported by the static memory manager policy", "pod", klog.KObj(pod))
412+
397413
return nil
398414
}
399415

pkg/kubelet/events/event.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@ const (
8080
FailedPrepareDynamicResources = "FailedPrepareDynamicResources"
8181
PossibleMemoryBackedVolumesOnDisk = "PossibleMemoryBackedVolumesOnDisk"
8282
CgroupV1 = "CgroupV1"
83+
// CPUManagerPodLevelResourceAllocation is the event reason when CPU alignment is skipped for a pod with pod-level resources
84+
CPUManagerPodLevelResourceAllocation = "CPUManagerPodLevelResourceAllocation"
85+
// MemoryManagerPodLevelResourceAllocation is the event reason when Memory alignment is skipped for a pod with pod-level resources
86+
MemoryManagerPodLevelResourceAllocation = "MemoryManagerPodLevelResourceAllocation"
8387
)
8488

8589
// Image manager event reason list

pkg/kubelet/kubelet.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ import (
6969
cloudprovider "k8s.io/cloud-provider"
7070
"k8s.io/component-base/zpages/flagz"
7171
"k8s.io/component-helpers/apimachinery/lease"
72+
resourcehelper "k8s.io/component-helpers/resource"
7273
internalapi "k8s.io/cri-api/pkg/apis"
7374
runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1"
7475
remote "k8s.io/cri-client/pkg"
@@ -85,6 +86,7 @@ import (
8586
kubeletcertificate "k8s.io/kubernetes/pkg/kubelet/certificate"
8687
"k8s.io/kubernetes/pkg/kubelet/clustertrustbundle"
8788
"k8s.io/kubernetes/pkg/kubelet/cm"
89+
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager"
8890
"k8s.io/kubernetes/pkg/kubelet/cm/topologymanager"
8991
"k8s.io/kubernetes/pkg/kubelet/config"
9092
"k8s.io/kubernetes/pkg/kubelet/configmap"
@@ -1898,6 +1900,23 @@ func (kl *Kubelet) SyncPod(ctx context.Context, updateType kubetypes.SyncPodType
18981900
}
18991901
}
19001902

1903+
// If pod-level resources are set, CPU and Memory managers alignment is skipped,
1904+
// an event is surfaced to inform the user when skipped in the corresponding pod.
1905+
if updateType == kubetypes.SyncPodCreate &&
1906+
utilfeature.DefaultFeatureGate.Enabled(features.PodLevelResources) &&
1907+
resourcehelper.IsPodLevelResourcesSet(pod) &&
1908+
v1qos.GetPodQOS(pod) == v1.PodQOSGuaranteed {
1909+
1910+
if kl.containerManager.GetNodeConfig().CPUManagerPolicy == string(cpumanager.PolicyStatic) {
1911+
kl.recorder.Eventf(pod, v1.EventTypeWarning, events.CPUManagerPodLevelResourceAllocation, "Pod has pod-level resources, CPU Manager alignment is skipped")
1912+
}
1913+
1914+
if utilfeature.DefaultFeatureGate.Enabled(features.MemoryManager) &&
1915+
kl.containerManager.GetNodeConfig().MemoryManagerPolicy == string("Static") {
1916+
kl.recorder.Eventf(pod, v1.EventTypeWarning, events.MemoryManagerPodLevelResourceAllocation, "Pod has pod-level resources, Memory manager alignment is skipped")
1917+
}
1918+
}
1919+
19011920
// Generate final API pod status with pod and status manager status
19021921
apiPodStatus := kl.generateAPIPodStatus(pod, podStatus, false)
19031922
// The pod IP may be changed in generateAPIPodStatus if the pod is using host network. (See #24576)

0 commit comments

Comments
 (0)
0