在 Kubernetes 中配置 StatefulSet 的 Pod 的起始索引

Posted

技术标签:

【中文标题】在 Kubernetes 中配置 StatefulSet 的 Pod 的起始索引【英文标题】:Configure starting index of StatefulSet's pods in Kubernetes 【发布时间】:2020-04-05 19:10:54 【问题描述】:

众所周知,documentation:

对于具有 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只有一个replica,它的序数不是0而是其他整数(例如12),这样创建的唯一pod就会被命名为pod/zookeeper-np-12?

【问题讨论】:

【参考方案1】:

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

【讨论】:

在只有一个副本的情况下,有什么办法可以配置pod名称吗?我正在寻找这个,因为部署 incubator/kafka Helm 图表会从 pod 名称的最后一个字母配置 brokerID。见here。有没有办法以某种方式更改 pod 名称的最后一位以手动配置代理 ID? StatefulSets 最后会有一个数字。无论如何,这就是他们的工作方式。我认为最好在Kafka图表上提出问题并提供解决方案。 我明白了。说得通。我将编辑问题并在创建后添加问题的链接。

以上是关于在 Kubernetes 中配置 StatefulSet 的 Pod 的起始索引的主要内容,如果未能解决你的问题,请参考以下文章

kubernetes | k8s持久化存储概述

Flink之Stateful Operators

keras lstm 区别 stateless 和 stateful

在 React 测试库中测试依赖于 Stateful Context Providers 链的 React 组件

如何在 Rails 6 中进行 Stateful Bootstrap 4 Tab Navigation

Flutter - Stateful(有状态) 和 stateless(无状态) widgets