首页 > 解决方案 > 在 Kubernetes 中配置 StatefulSet 的 Pod 的起始索引

问题描述

文档中我们都知道:

对于具有 N 个副本的 StatefulSet,StatefulSet 中的每个 Pod 将被分配一个从 0 到 N-1 的整数序号,该序号在 Set 中是唯一的。

例子:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: zookeeper-np
  labels:
    app: zookeeper-np
spec:
  serviceName: zoo-svc-np
  replicas: 3
  selector:
    matchLabels:
      app: zookeeper-np
  template:
    metadata:
      labels:
        app: zookeeper-np
    spec:
      containers:
      - name: zookeeper-np
        image: zookeeper:3.5.6
        ports:
        - containerPort: 30005
        - containerPort: 30006
        - containerPort: 30007
        env:
        - name: ZOO_MY_ID
          value: "1"

上面的清单将创建三个 pod,如下所示:

NAME                     READY   STATUS    STARTS   AGE
pod/zookeeper-np-0       1/1     Running   0        203s
pod/zookeeper-np-1       1/1     Running   0        137s
pod/zookeeper-np-2       1/1     Running   0        73s

问题:

有没有办法将此起始索引 (0) 配置为从任何其他整数(例如 1、2、3 等)开始?

例如,要从 3 开始上述 pod 索引,以便创建的 pod 如下所示:

NAME                     READY   STATUS    STARTS   AGE
pod/zookeeper-np-3       1/1     Running   0        203s
pod/zookeeper-np-4       1/1     Running   0        137s
pod/zookeeper-np-5       1/1     Running   0        73s

或者如果 statefulset 只有一个副本,它的序数不是零而是其他整数(例如12),所以创建的唯一 pod 将被命名为pod/zookeeper-np-12

标签: kuberneteskubernetes-statefulset

解决方案


不幸的是,这是不可能的,根据源代码0...n 只是副本切片的切片索引。查看最后一个参数newVersionedStatefulSetPod


推荐阅读