Kubernetes Statefulsets:同时重启所有 pods(而不是按顺序)

Kubernetes Statefulsets: Restart all pods concurrently (instead of in sequence)

我有一个并发重启状态集中所有 pods 的用例。

kubernetes statefulset是否支持所有pods并发重启?

根据 statefulset 文档,这可以通过将 pod 更新策略设置为并行来完成,如本例所示:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql-db
spec:
  podManagementPolicy: Parallel
  replicas: 3

然而,这在实践中似乎不起作用,正如 EKS 上的状态集 运行 所示:

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: producer
  namespace: ragnarok
spec:
  selector:
    matchLabels:
      app: producer
  replicas: 10
  podManagementPolicy: "Parallel"
  serviceName: producer-service
  template:
    metadata:
      labels:
        app: producer
    spec:
      containers:
      - name: producer
        image: archbungle/load-tester:pulsar-0.0.49
        imagePullPolicy: IfNotPresent

转出重启按顺序发生,就像忽略转出策略设置一样:


(base) welcome@Traianos-MacBook-Pro eks-deploy % kubectl get pods -n ragnarok | egrep producer
producer-0                               1/1     Running             0          3m58s
producer-1                               1/1     Running             0          3m56s
producer-2                               1/1     Running             0          3m53s
producer-3                               1/1     Running             0          3m47s
producer-4                               1/1     Running             0          3m45s
producer-5                               1/1     Running             0          3m43s
producer-6                               1/1     Running             1          3m34s
producer-7                               0/1     ContainerCreating   0          1s
producer-8                               1/1     Running             0          16s
producer-9                               1/1     Running             0          19s

(base) welcome@Traianos-MacBook-Pro eks-deploy % kubectl get pods -n ragnarok | egrep producer
producer-0                               1/1     Running       0          4m2s
producer-1                               1/1     Running       0          4m
producer-2                               1/1     Running       0          3m57s
producer-3                               1/1     Running       0          3m51s
producer-4                               1/1     Running       0          3m49s
producer-5                               1/1     Running       0          3m47s
producer-6                               0/1     Terminating   1          3m38s
producer-7                               1/1     Running       0          5s
producer-8                               1/1     Running       0          20s
producer-9                               1/1     Running       0          23s

(base) welcome@Traianos-MacBook-Pro eks-deploy % kubectl get pods -n ragnarok | egrep producer
producer-0                               1/1     Running       0          4m8s
producer-1                               1/1     Running       0          4m6s
producer-2                               1/1     Running       0          4m3s
producer-3                               1/1     Running       0          3m57s
producer-4                               1/1     Running       0          3m55s
producer-5                               0/1     Terminating   0          3m53s
producer-6                               1/1     Running       0          4s
producer-7                               1/1     Running       0          11s
producer-8                               1/1     Running       0          26s
producer-9                               1/1     Running       0          29s



正如文档所指出的,Parallel pod management 仅在缩放操作中有效。 This option only affects the behavior for scaling operations. Updates are not affected.

或许你可以试试类似 kubectl scale statefulset producer --replicas=0 -n ragnarokkubectl scale statefulset producer --replicas=10 -n ragnarok

根据文档,所有 pods 都应删除并一起创建,方法是使用并行策略缩放它们。

参考:https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#parallel-pod-management