运行时动态调整 Pod 的 CPU 及 Memory 资源

可在不重启 Pod 或其容器的情况下,动态调整分配给运行中 Pod 容器的 CPU 和 Memory 资源,原地更新底层 c-group 分配,从而使 pod 资源定义可变,适用于垂直动态扩展 pod 工作负载

特性状态: Kubernetes v1.27+ [alpha] 开始被支持

环境介绍

  • 系统环境:Anolis OS release 8.8
  • 内核版本:Linux Kernel 5.10.134-13.an8.x86_64
  • Kubernetes 版本:v1.28.3

启用特性门控

1、启用 k8s 控制平面组件特性门控 InPlacePodVerticalScaling
编辑如下路径 /etc/kubernetes/manifests/{kube-apiserver.yaml, kube-controller-manager.yaml, kube-scheduler.yaml} 配置文件,在各自容器启动命令行参数添加配置项 - --feature-gates=InPlacePodVerticalScaling=true 以启用 Pod 垂直弹性伸缩的特性门控。编辑该配置后无需重启控制平面组件,该特性门控会自动生效

spec:
  containers:
  - command:
    - kube-apiserver
    - --feature-gates=InPlacePodVerticalScaling=true
    - --advertise-address=192.168.31.31
    ...

2、启用 kubelet 组件特性门控 InPlacePodVerticalScaling

# 配置文件路径 /var/lib/kubelet/config.yaml
apiVersion: kubelet.config.k8s.io/v1beta1
featureGates:
  InPlacePodVerticalScaling: true
...

# 同理还需修改 configmap 形式的 kubelet 配置,修改方式同上
kubectl -n kube-system edit configmaps kubelet-config

3、启用 kubeproxy 组件特性门控 InPlacePodVerticalScaling

# kubectl -n kube-system edit configmaps kube-proxy 
apiVersion: kubeproxy.config.k8s.io/v1alpha1
  featureGates:
    InPlacePodVerticalScaling: true
...

创建 Pod

1、通过在容器 spec 中指定 resizePolicy,针对 CPU 和 Memory 调整设置以下重启策略:

  • NotRequired 在运行时调整容器资源
  • RestartContainer 调整容器资源后需重启生效

2、以 Nginx 镜像为例,通过命令 kubectl create -f nginx.yml 创建该 pod 资源

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: default
spec:
  containers:
    - name: nginx
      image: nginx:1.25.3
      resizePolicy:
        - resourceName: cpu
          restartPolicy: NotRequired
        - resourceName: memory
          restartPolicy: NotRequired
      resources:
        limits:
          memory: "200Mi"
          cpu: "700m"
        requests:
          memory: "200Mi"
          cpu: "700m"

动态更新 Pod 资源

对 Pod 中的 Container 执行 patch 命令,实现对容器资源 CPU 和 Memory 的动态调整

1、降低 CPU 资源,由 0.7 cpu 降低至 0.6 cpu

kubectl patch pod nginx --patch '{"spec":{"containers":[{"name":"nginx", "resources":{"requests":{"cpu":"600m"}, "limits":{"cpu":"600m"}}}]}}'

2、提高 Memory 容量,由 200Mi 增加至 500Mi

kubectl patch pod nginx --patch '{ "spec" :{ "containers" :[{ "name" : "nginx" , "resources" :{"requests":{"memory":"500Mi"}, "limits" :{ "memory" : "500Mi" }}}]} }'

备注:当部分组件特性门控 InPlacePodVerticalScaling 未启用时,执行如上 pod 资源动态变更,会提示如下错误

The Pod “nginx” is invalid: spec: Forbidden: pod updates may not change fields other than spec.containers[*].image,spec.initContainers[*].image,spec.activeDeadlineSeconds,spec.tolerations (only additions to existing tolerations),spec.terminationGracePeriodSeconds (allow it to be set to 1 if it was previously negative)

参考

特性门控

调整分配给容器的 CPU 和内存资源

码字不易,若觉得本文对你有用,欢迎点赞 👍、分享 🚀 ,相关技术热点时时看🔥🔥🔥​​​…

相关推荐

  1. 运行动态调整 Pod CPU Memory 资源

    2024-07-16 12:36:03       27 阅读
  2. K8S 调试运行中报错 Pod

    2024-07-16 12:36:03       27 阅读
  3. 笔记:运行动态更改Ioc服务实现

    2024-07-16 12:36:03       23 阅读
  4. 怎么判断k8smaster是否支持调度运行pod服务

    2024-07-16 12:36:03       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 12:36:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 12:36:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 12:36:03       58 阅读
  4. Python语言-面向对象

    2024-07-16 12:36:03       69 阅读

热门阅读

  1. Python面经

    2024-07-16 12:36:03       24 阅读
  2. Etcd-v3.4.27集群部署

    2024-07-16 12:36:03       22 阅读
  3. 大语言模型的原理

    2024-07-16 12:36:03       24 阅读
  4. Android 底部导航栏实现

    2024-07-16 12:36:03       17 阅读
  5. Spark核心技术架构

    2024-07-16 12:36:03       20 阅读
  6. actual combat 33 —— Vue实战遇到的问题

    2024-07-16 12:36:03       22 阅读
  7. MATLAB切片

    2024-07-16 12:36:03       18 阅读
  8. Codeforces Round 958 (Div. 2)[部分题解ABC]

    2024-07-16 12:36:03       26 阅读
  9. 大根堆的实现和堆排序

    2024-07-16 12:36:03       20 阅读