K8s 1.33 原地扩缩容特性
背景
在创建好的pod容器中,进行了资源限制,在之前的版本中,修改资源配置是需要重启pod才可生效,在1.33版本的kubernetes可以直接调整正在运行的 Pod 的 CPU 和内存配置,而无需重启pod容器。
需要注意的是,此功能目前为bate版本,并且在集群中默认开启。我们可以直接使用该新特性。
操作演示
创建一个资源监控 Pod
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| [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 的初始状态
1 2 3 4 5 6 7
| [root@k8s-master01 ~]# kubectl describe pod resize-demo | grep -A5 Limits: Limits: cpu: 100m memory: 128Mi Requests: cpu: 100m memory: 128Mi
|
无缝调整 CPU
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| # 执行调整动作 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 ~]#
|
查看现在的资源使用情况
1 2 3 4 5 6 7 8 9 10 11
| [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)
|
查看容器日志
查看日志资源是否发生了变化,在操作之前一直在追踪日志
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| [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
|
调整内存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 执行调整动作 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 ~]#
|
查看容器日志
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| ---------- 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运维交流社区》