我正在尝试将ReplicationController的随机生成的pod ID扩展名(即multiverse-{replicaID}
)注入到容器的环境变量中。我可以手动获取主机名并从中提取主机名,但是由于兼容性原因,我不必将特殊情况添加到容器内运行的脚本中。
如果吊舱名为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
添加到控制器的模板配置中以从主机名创建环境变量,但无法弄清楚如何使运行的脚本可以使用该环境变量。
是否缺少变量,或者该功能不存在?如果没有,那么在不编辑容器内部脚本的情况下,是否有人对如何使它起作用有任何想法?
答案 0 :(得分:0)
answer提供了一个Anton 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: {}
使用以下命令创建广告连播:
kubectl create -f init.yaml
检查Pod初始化是否已完成并正在运行:
kubectl get pod init-test
检查日志以查看此示例配置的结果:
$ kubectl logs init-test
init-test