首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有更少麻烦的方法将一个普通索引传递给StatefulSet环境变量?

是否有更少麻烦的方法将一个普通索引传递给StatefulSet环境变量?
EN

Stack Overflow用户
提问于 2019-05-24 01:40:02
回答 2查看 3.9K关注 0票数 2

我试图运行一个动物园管理员集合,并有一个问题,传递一个唯一的ID,作为环境变量的ZOO_MY_ID,根据官方动物园图片发现这里

我试着阅读了这方面的文章,并发现了类似的溢出问题,但似乎都没有效果。

kubernetes状态集指数/序数在模板中暴露 是否有一种方法可以获得在kubernetes状态集配置文件中的荚的序号索引?

由于某些原因,我仍然看到所有服务器的ID都是1的默认id。

代码语言:javascript
复制
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

运行以下命令将显示没有传递ID,但是我使用的是这里所示的hacky方式:https://stackoverflow.com/a/48086813/5813215

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

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-28 02:25:58

不太确定这有多有用,但在我的例子中,这对ZooKeeper是有效的:

代码语言:javascript
复制
   env:
      - name: POD_ID_OF_STATEFULSET
        valueFrom:
          fieldRef:
            fieldPath: metadata.name
   lifecycle:
      postStart:
         exec:
            command: ["/bin/sh", "-c", "echo ${POD_ID_OF_STATEFULSET##*-} > ${ZOO_DATA_DIR}/myid"]

结果证明,ZOO_MY_ID所做的唯一事情就是将其传递给${ZOO_DATA_DIR}/myid文件。我是“手动”做的,在入口点之前设置文件。

票数 2
EN

Stack Overflow用户

发布于 2019-07-01 08:50:01

我不知道是否解决了这个问题:

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

您可以找到一个示例这里

例如,您可以修改statefulSet规范。加入:

代码语言:javascript
复制
   env:
      - name: MY_POD_NAME
        valueFrom:
          fieldRef:
            fieldPath: metadata.name

您可以从其中解析索引。

有关这个特定主题的更多信息和讨论,您可以找到这里

希望能帮上忙。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56284836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档