通常情况下,要修改 Pod 的资源定义,是需要重启 Pod 的。
在Kubernetes 1.27中,有一个 Alpha 状态的InPlacePodVerticalScaling
开关,开启这一特性,
就能在不重启 Pod 的情况下,修改 Pod 的资源定义。
要使用这个功能,需要在kube-apiserver
的featureGates
中显式地设置启用,启用这一特性之后,就可以进行测试了。
测试一下
假设下面的 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。