K8s 1.33 原地擴縮容特性
背景
在創建好的pod容器中,進行了資源限制,在之前的版本中,修改資源配置是需要重啓pod才可生效,在1.33版本的kubernetes可以直接調整正在運行的 Pod 的 CPU 和內存配置,而無需重啓pod容器。
需要注意的是,此功能目前為bate版本,並且在集羣中默認開啓。我們可以直接使用該新特性。
操作演示
創建一個資源監控 Pod
[root@k8s-master01 ~]# vim resize.yaml
[root@k8s-master01 ~]# cat resize.yaml
apiVersion: v1
kind: Pod
metadata:
name: resize-demo
spec:
containers:
- name: resource-watcher
image: ubuntu:22.04
command:
- "/bin/bash"
- "-c"
- |
apt-get update && apt-get install -y procps bc
echo "=== Pod Started: $(date) ==="
# Functions to read container resource limits
get_cpu_limit() {
if [ -f /sys/fs/cgroup/cpu.max ]; then
# cgroup v2
local cpu_data=$(cat /sys/fs/cgroup/cpu.max)
local quota=$(echo $cpu_data | awk '{print $1}')
local period=$(echo $cpu_data | awk '{print $2}')
if [ "$quota" = "max" ]; then
echo "unlimited"
else
echo "$(echo "scale=3; $quota / $period" | bc) cores"
fi
else
# cgroup v1
local quota=$(cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us)
local period=$(cat /sys/fs/cgroup/cpu/cpu.cfs_period_us)
if [ "$quota" = "-1" ]; then
echo "unlimited"
else
echo "$(echo "scale=3; $quota / $period" | bc) cores"
fi
fi
}
get_memory_limit() {
if [ -f /sys/fs/cgroup/memory.max ]; then
# cgroup v2
local mem=$(cat /sys/fs/cgroup/memory.max)
if [ "$mem" = "max" ]; then
echo "unlimited"
else
echo "$((mem / 1048576)) MiB"
fi
else
# cgroup v1
local mem=$(cat /sys/fs/cgroup/memory/memory.limit_in_bytes)
echo "$((mem / 1048576)) MiB"
fi
}
# Print resource info every 5 seconds
while true; do
echo "---------- Resource Check: $(date) ----------"
echo "CPU limit: $(get_cpu_limit)"
echo "Memory limit: $(get_memory_limit)"
echo "Available memory: $(free -h | grep Mem | awk '{print $7}')"
sleep 5
done
resizePolicy:
- resourceName: cpu
restartPolicy: NotRequired
- resourceName: memory
restartPolicy: NotRequired
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "128Mi"
cpu: "100m"
[root@k8s-master01 ~]#
[root@k8s-master01 ~]# kubectl apply -f resize.yaml
pod/resize-demo created
[root@k8s-master01 ~]#
查看 Pod 的初始狀態
[root@k8s-master01 ~]# kubectl describe pod resize-demo | grep -A5 Limits:
Limits:
cpu: 100m
memory: 128Mi
Requests:
cpu: 100m
memory: 128Mi
無縫調整 CPU
# 執行調整動作
kubectl patch pod resize-demo --subresource resize --patch \
'{"spec":{"containers":[{"name":"resource-watcher", "resources":{"requests":{"cpu":"200m"}, "limits":{"cpu":"200m"}}}]}}'
# 檢查調整狀態
[root@k8s-master01 ~]# kubectl get pod resize-demo -o yaml | grep resources -A8
spec:
containers:
--
resources:
limits:
cpu: 200m
memory: 128Mi
requests:
cpu: 200m
memory: 128Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
--
resources:
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 100m
memory: 128Mi
restartCount: 0
started: true
[root@k8s-master01 ~]#
查看現在的資源使用情況
[root@k8s-master01 ~]# kubectl describe pod resize-demo | grep -A8 Limits:
Limits:
cpu: 200m
memory: 128Mi
Requests:
cpu: 200m
memory: 128Mi
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-h7cpt (ro)
查看容器日誌
查看日誌資源是否發生了變化,在操作之前一直在追蹤日誌
[root@k8s-master01 ~]# kubectl logs -f resize-demo
---------- Resource Check: Fri Jun 6 11:59:51 UTC 2025 ----------
CPU limit: .100 cores
Memory limit: 128 MiB
Available memory: 1.9Gi
---------- Resource Check: Fri Jun 6 11:59:56 UTC 2025 ----------
CPU limit: .200 cores
Memory limit: 128 MiB
Available memory: 1.9Gi
---------- Resource Check: Fri Jun 6 12:00:01 UTC 2025 ----------
CPU limit: .200 cores
Memory limit: 128 MiB
Available memory: 1.9Gi
調整內存
# 執行調整動作
kubectl patch pod resize-demo --subresource resize --patch \
'{"spec":{"containers":[{"name":"resource-watcher", "resources":{"requests":{"memory":"256Mi"}, "limits":{"memory":"256Mi"}}}]}}'
# 檢查調整狀態
[root@k8s-master01 ~]# kubectl describe pod resize-demo | grep -A8 Limits:
Limits:
cpu: 200m
memory: 256Mi
Requests:
cpu: 200m
memory: 256Mi
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-h7cpt (ro)
[root@k8s-master01 ~]#
查看容器日誌
---------- Resource Check: Fri Jun 6 12:07:20 UTC 2025 ----------
CPU limit: .200 cores
Memory limit: 128 MiB
Available memory: 1.9Gi
---------- Resource Check: Fri Jun 6 12:07:25 UTC 2025 ----------
CPU limit: .200 cores
Memory limit: 256 MiB
Available memory: 1.9Gi
---------- Resource Check: Fri Jun 6 12:07:30 UTC 2025 ----------
CPU limit: .200 cores
Memory limit: 256 MiB
Available memory: 1.9Gi
關於
https://www.oiox.cn/
https://www.oiox.cn/index.php/start-page.html
CSDN、GitHub、知乎、開源中國、思否、掘金、簡書、華為雲、阿里雲、騰訊雲、嗶哩嗶哩、今日頭條、新浪微博、個人博客
全網可搜《小陳運維》
文章主要發佈於微信公眾號:《Linux運維交流社區》