【发布时间】:2019-10-23 23:25:07
【问题描述】:
我不想减少 StatefulSet 控制的 pod 数量,我认为减少 pod 在生产环境中是危险的操作。
所以...,有什么办法吗?谢谢~
【问题讨论】:
我不想减少 StatefulSet 控制的 pod 数量,我认为减少 pod 在生产环境中是危险的操作。
所以...,有什么办法吗?谢谢~
【问题讨论】:
我不确定这是否是您要查找的内容,但您可以scale a StatefulSet
使用 kubectl 扩展 StatefulSets
首先,找到您要扩展的 StatefulSet。
kubectl get statefulsets <stateful-set-name>更改 StatefulSet 的副本数:
kubectl scale statefulsets <stateful-set-name> --replicas=<new-replicas>
举个例子,我部署了一个名为 web 的 2 pod StatefulSet:
$ kubectl get statefulsets.apps web
NAME READY AGE
web 2/2 60s
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
web-0 1/1 Running 0 63s
web-1 1/1 Running 0 44s
$ kubectl describe statefulsets.apps web
Name: web
Namespace: default
CreationTimestamp: Wed, 23 Oct 2019 13:46:33 +0200
Selector: app=nginx
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"apps/v1","kind":"StatefulSet","metadata":{"annotations":{},"name":"web","namespace":"default"},"spec":{"replicas":2,"select...
Replicas: 824643442664 desired | 2 total
Update Strategy: RollingUpdate
Partition: 824643442984
Pods Status: 2 Running / 0 Waiting / 0 Succeeded / 0 Failed
...
现在,如果我们将此 StatefulSet 扩展到 5 个副本:
$ kubectl scale statefulset web --replicas=5
statefulset.apps/web scaled
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
web-0 1/1 Running 0 3m41s
web-1 1/1 Running 0 3m22s
web-2 1/1 Running 0 59s
web-3 1/1 Running 0 40s
web-4 1/1 Running 0 27s
$ kubectl get statefulsets.apps web
NAME READY AGE
web 5/5 3m56s
您已经在工作的 pod 没有任何停机时间。
【讨论】:
我认为减少 pod 在生产环境中是一种危险的操作。
我同意你的看法。
正如 Crou 所写,可以使用 kubectl scale statefulsets <stateful-set-name> 执行此操作,但这是一个命令式操作,不建议在生产中执行命令式操作环境。
在生产环境中最好使用声明式操作,例如在文本文件中拥有副本数量(例如 stateful-set-name.yaml)并使用 kubectl apply -f <stateful-set-name>.yaml 部署它们,通过这种工作方式,很容易将 yaml 文件存储在 Git因此您可以完全控制所有更改,并且可以恢复/回滚到以前的配置。当您将声明性文件存储在 Git 存储库中时,您可以使用 CICD 解决方案,例如Jenkins 或ArgoCD 1) 验证操作(例如不允许减少)和 2) 在将更改应用到生产环境之前先部署到测试环境并查看它是否有效。
我推荐这本书(新版)Kubernetes Up&Running 2nd ed,它在第 18 章(新章)中描述了这个过程。
【讨论】: