gpt4 book ai didi

kubernetes - 环境变量中的 Replication Controller 副本 ID?

转载 作者:行者123 更新时间:2023-12-05 06:30:24 25 4
gpt4 key购买 nike

我正在尝试将 ReplicationController 随机生成的 pod ID 扩展(即 multiverse-{replicaID})注入(inject)到容器的环境变量中。我可以手动获取主机名并从那里提取它,但由于兼容性原因,我更愿意不必将特殊情况添加到容器内运行的脚本中。

如果 pod 名为 multiverse-nffj1,则 INSTANCE_ID 应等于 nffj1。我已经搜索了文档,但一无所获。

apiVersion: v1
kind: ReplicationController
metadata:
name: multiverse
spec:
replicas: 3
template:
spec:
containers:
- env:
- name: INSTANCE_ID
value: $(replicaID)

我已经尝试将 command 添加到 Controller 的模板配置中以从主机名创建环境变量,但无法弄清楚如何使该环境变量可用于正在运行的脚本。

是否有我遗漏的变量,或者此功能不存在?如果没有,是否有人对如何在不编辑容器内部脚本的情况下使其工作有任何想法?

最佳答案

有一个answerAnton Kostenko 提供关于将数据库凭据插入容器环境变量,但它也可以应用于您的案例。这都是关于 InitContainer 规范的内容。

您可以使用 InitContainer从容器的主机名中获取哈希并将其放入您挂载到容器的共享卷上的文件中。

本例InitContainer将Pod名称放入INSTANCE_ID环境变量中,但您可以根据需要修改:

使用以下内容创建 init.yaml 文件:

apiVersion: v1
kind: Pod
metadata:
name: init-test
spec:
containers:
- name: init-test
image: ubuntu
args: [bash, -c, 'source /data/config && echo $INSTANCE_ID && while true ; do sleep 1000; done ']
volumeMounts:
- name: config-data
mountPath: /data
initContainers:
- name: init-init
image: busybox
command: ["sh","-c","echo -n INSTANCE_ID=$(hostname) > /data/config"]
volumeMounts:
- name: config-data
mountPath: /data
volumes:
- name: config-data
emptyDir: {}

使用以下命令创建 pod:

kubectl create -f init.yaml

检查 Pod 初始化是否完成并正在运行:

kubectl get pod init-test

检查日志以查看此示例配置的结果:

$ kubectl logs init-test
init-test

关于kubernetes - 环境变量中的 Replication Controller 副本 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52389771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com