我不想减少StatefulSet所控制的Pod的数量,我认为减少Pod在生产环境中是一项危险的操作。
那么...,有什么办法吗?谢谢〜
答案 0 :(得分:1)
我不确定这是否是您要找的东西,但是您可以scale a StatefulSet
使用kubectl缩放StatefulSets
首先,找到要缩放的StatefulSet。
kubectl get statefulsets <stateful-set-name>
更改StatefulSet的副本数量:
kubectl scale statefulsets <stateful-set-name> --replicas=<new-replicas>
为您展示一个示例,我已经部署了一个名为web
的2盒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
您已经在工作的吊舱中没有任何停机时间。
答案 1 :(得分: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)首先将其部署到测试环境并查看其是否有效,然后再将更改应用于生产环境
我建议在第18章(新章)中介绍此过程的书(新版)Kubernetes Up&Running 2nd ed。