【问题标题】:replace configmap contents with some environment variables用一些环境变量替换 configmap 内容
【发布时间】:2019-12-12 10:51:42
【问题描述】:
我正在运行一个使用volumeClaimTemplates 的statefulset。那里一切都很好。
我还有一个 configmap,我想用这个配置文件投影到的每个 pod 的 pod 名称来替换一些条目;例如,如果 configmap 数据是:
ThisHost=<hostname -s>
OtherConfig1=1
OtherConfig1=2
...
那么对于名为 mypod-0 的 statefulset pod,配置文件应该包含 ThisHost=mypod-0 和 ThisHost=mypod-1 for mypod-1。
我该怎么做?
【问题讨论】:
标签:
kubernetes
configmap
kubernetes-statefulset
【解决方案1】:
主机名包含在 Pod 内的环境变量中,默认情况下称为 HOSTNAME。
如果你先修改配置映射本身是可能的:
- 挂载 configmap 并将其设置为
ThisHost=hostname -s(这将在 pod 的文件系统中创建一个包含该文本的文件)
- 在启动时将替换命令传递给 pod(类似于
$ sed 's/hostname/$HOSTNAME/g' -i /path/to/configmapfile)
基本上,您挂载 configmap,然后将其替换为 pod 中可用的环境变量信息。这只是一个替换操作。
看下面的例子:
apiVersion: v1
kind: Pod
metadata:
name: command-demo
labels:
purpose: demonstrate-command
spec:
containers:
- name: command-demo-container
image: debian
command: ["sed"]
args: ["'s/hostname/$HOSTNAME'", "-i", "/path/to/config/map/mount/point"]
restartPolicy: OnFailure
args 的语法可能需要一些调整,但你明白了。
如果有帮助,请告诉我。