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/index.php/start-page.html
CSDN、GitHub、知乎、开源中国、思否、掘金、简书、华为云、阿里云、腾讯云、哔哩哔哩、今日头条、新浪微博、个人博客
全网可搜《小陈运维》
文章主要发布于微信公众号:《Linux运维交流社区》
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。