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

时间:2018-09-18 15:15:02

标签: kubernetes

我正在尝试将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添加到控制器的模板配置中以从主机名创建环境变量,但无法弄清楚如何使运行的脚本可以使用该环境变量。

是否缺少变量,或者该功能不存在?如果没有,那么在不编辑容器内部脚本的情况下,是否有人对如何使它起作用有任何想法?

1 个答案:

答案 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