【问题小解决】无需重启,基于Prometheus对Pod进行垂直扩缩容

通常情况下,要修改 Pod 的资源定义,是需要重启 Pod 的。 在Kubernetes 1.27中,有一个 Alpha 状态的InPlacePodVerticalScaling开关,开启这一特性, 就能在不重启 Pod 的情况下,修改 Pod 的资源定义。

要使用这个功能,需要在kube-apiserverfeatureGates中显式地设置启用,启用这一特性之后,就可以进行测试了。

测试一下

假设下面的 Pod 定义:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
apiVersion: v1
kind: Pod
metadata:
  name: stress
spec:
  containers:
  - name: stress
    image: myimages/stress-ng:latest
    resizePolicy:
    - resourceName: cpu
      restartPolicy: NotRequired
    - resourceName: memory
      restartPolicy: RestartContainer    
    command: ["sleep", "3600"]
    resources:
      limits:
        cpu: 200m
        memory: 200M
      requests:
        cpu: 200m
        memory: 200M

可以看到,spec 中加入了resizePolicy字段,用来指定对 CPU 和内存的扩缩容策略。内容很直白:

  • CPU 的扩缩容策略是NotRequired,即不重启 Pod;
  • 内存的扩缩容策略是RestartContainer,即重启 Pod。
Read more...