mirror of https://github.com/k3s-io/k3s
![]() Automatic merge from submit-queue (batch tested with PRs 52442, 52247, 46542, 52363, 51781) Make CPU manager release CPUs when Pod enters completed phase. **What this PR does / why we need it**: When CPU manager is enabled, this PR releases allocated CPUs when container is not running and is non-restartable. **Which issue this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close that issue when PR gets merged)*: fixes #52351 **Special notes for your reviewer**: This bug is only reproduced for pods with `restartPolicy` = `Never` or `OnFailure`. The following output is from a 4 CPU node. This bug can be reproduced as long >= half the cores are requested. pod1.yaml: ``` apiVersion: v1 kind: Pod metadata: name: test-pod1 spec: containers: - image: ubuntu command: ["/bin/bash"] args: ["-c", "sleep 5"] name: test-container1 resources: requests: cpu: 2 memory: 100Mi limits: cpu: 2 memory: 100Mi restartPolicy: "Never" ``` pod2.yaml: ``` apiVersion: v1 kind: Pod metadata: name: test-pod2 spec: containers: - image: ubuntu command: ["/bin/bash"] args: ["-c", "sleep 5"] name: test-container1 resources: requests: cpu: 2 memory: 100Mi limits: cpu: 2 memory: 100Mi restartPolicy: "Never" ``` Run a local Kubernetes cluster with CPU manager enabled. ```sh KUBELET_FLAGS='--feature-gates=CPUManager=true --cpu-manager-policy=static --cpu-manager-reconcile-period=1s --kube-reserved=cpu=500m' ./hack/local-up-cluster.sh ``` _Before:_ Create `test-pod1` using pod1.yaml. ``` ./cluster/kubectl.sh create -f pod1.yaml ``` Wait for the pod to complete and wait another 90 seconds (give enough time for GC to kick-in). Create `test-pod2` using pod2.yaml. ``` ./cluster/kubectl.sh create -f pod2.yaml ``` Get all pods in the cluster. ``` ./cluster/kubectl.sh get pods -a NAME READY STATUS RESTARTS AGE test-pod1 0/1 Completed 0 1m test-pod2 0/1 not enough cpus available to satisfy request 0 9s ``` _After:_ Create `test-pod1` using pod1.yaml. ``` ./cluster/kubectl.sh create -f pod1.yaml ``` Wait for the pod to complete and wait another 90 seconds (give enough time for GC to kick-in). Create `test-pod2` using pod2.yaml. ``` ./cluster/kubectl.sh create -f pod2.yaml ``` Get all pods in the cluster. ``` ./cluster/kubectl.sh get pods -a NAME READY STATUS RESTARTS AGE test-pod1 0/1 Completed 0 1m test-pod2 0/1 Completed 0 9s ``` |
||
---|---|---|
.. | ||
BUILD | ||
doc.go | ||
fake_kuberuntime_manager.go | ||
helpers.go | ||
helpers_test.go | ||
instrumented_services.go | ||
instrumented_services_test.go | ||
kuberuntime_container.go | ||
kuberuntime_container_test.go | ||
kuberuntime_gc.go | ||
kuberuntime_gc_test.go | ||
kuberuntime_image.go | ||
kuberuntime_image_test.go | ||
kuberuntime_logs.go | ||
kuberuntime_logs_test.go | ||
kuberuntime_manager.go | ||
kuberuntime_manager_test.go | ||
kuberuntime_sandbox.go | ||
kuberuntime_sandbox_test.go | ||
labels.go | ||
labels_test.go | ||
legacy.go | ||
legacy_test.go | ||
security_context.go | ||
security_context_test.go |