有没有更简单的方法将序数索引传递给 StatefulSet 环境变量?

Ani*_*wal 4 kubernetes google-kubernetes-engine kubernetes-statefulset

我正在尝试运行 Zookeeper 整体,但在按照此处ZOO_MY_ID找到的官方 ZooKeeper 图像的要求传递唯一 ID 作为环境变量时遇到问题。

我尝试阅读有关此内容并发现类似的溢出问题,但似乎没有一个有效。

模板中公开的 kubernetes statefulsets 索引/序号 有没有办法在 kubernetes statefulset 配置文件中获取 pod 的序号索引?

由于某种原因,我仍然看到所有服务器的 ID 均为默认 1

2019-05-24 01:38:31,648 [myid:1] - INFO  [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:FastLeaderElection@847] - Notification time out: 60000
2019-05-24 01:38:31,649 [myid:1] - INFO  [WorkerSender[myid=1]:QuorumCnxManager@347] - Have smaller server identifier, so dropping the connection: (2, 1)
2019-05-24 01:38:31,649 [myid:1] - INFO  [WorkerReceiver[myid=1]:FastLeaderElection@595] - Notification: 1 (message format version), 1 (n.leader), 0x0 (n.zxid), 0x1 (n.round), LOOKING (n.state), 1 (n.sid), 0x0 (n.peerEpoch) LOOKING (my state)
2019-05-24 01:38:31,649 [myid:1] - INFO  [/0.0.0.0:3888:QuorumCnxManager$Listener@743] - Received connection request /10.24.1.64:37382
2019-05-24 01:38:31,650 [myid:1] - WARN  [RecvWorker:1:QuorumCnxManager$RecvWorker@1025] - Connection broken for id 1, my id = 1, error = 
java.io.EOFException
        at java.io.DataInputStream.readInt(DataInputStream.java:392)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager$RecvWorker.run(QuorumCnxManager.java:1010)
2019-05-24 01:38:31,651 [myid:1] - WARN  [RecvWorker:1:QuorumCnxManager$RecvWorker@1028] - Interrupting SendWorker
Run Code Online (Sandbox Code Playgroud)

运行以下命令显示没有传递 ID,但是我使用此处显示的 hacky 方式:/sf/answers/3366076941/

kubectl exec -it zoo-2 -n kafka-dev printenv | grep "ZOO_"

ZOO_USER=zookeeper
ZOO_CONF_DIR=/conf
ZOO_DATA_DIR=/data
ZOO_DATA_LOG_DIR=/datalog
ZOO_LOG_DIR=/logs
ZOO_PORT=2181
ZOO_TICK_TIME=2000
ZOO_INIT_LIMIT=5
ZOO_SYNC_LIMIT=2
ZOO_AUTOPURGE_PURGEINTERVAL=0
ZOO_AUTOPURGE_SNAPRETAINCOUNT=3
ZOO_MAX_CLIENT_CNXNS=60
Run Code Online (Sandbox Code Playgroud)

Mar*_*ark 6

我不确定它是否已解决:

正如 StatefulSet 概念中提到的,StatefulSet 中的 Pod 具有粘性、唯一的身份。该标识基于 StatefulSet 控制器分配给每个 Pod 的唯一序数索引。

您可以在此处找到示例。

例如,您可以修改您的 statefulSet 规范。通过增加:

   env:
      - name: MY_POD_NAME
        valueFrom:
          fieldRef:
            fieldPath: metadata.name
Run Code Online (Sandbox Code Playgroud)

您可以从中解析索引。

您可以在此处找到有关此特定主题的更多信息和讨论

希望这有帮助。