0

我不想减少 StatefulSet 控制的 pod 数量,并且我认为减少 pod 是生产环境中的危险操作。

所以...,有什么办法吗?谢谢~

4

2 回答 2

1

我不确定这是否是您正在寻找的,但您可以扩展 StatefulSet

使用 kubectl 扩展 StatefulSet

首先,找到要扩展的 StatefulSet。

kubectl get statefulsets <stateful-set-name>

更改 StatefulSet 的副本数:

kubectl scale statefulsets <stateful-set-name> --replicas=<new-replicas>

为了向您展示一个示例,我部署了一个 2 pod StatefulSet,名为web

$ 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 中没有任何停机时间。

于 2019-10-23T11:58:38.333 回答
0

我认为减少吊舱是生产环境中的危险操作。

我同意你的看法。

正如 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 章(新章)中描述了这个过程。

于 2019-10-23T15:25:07.917 回答