【发布时间】:2021-04-17 06:30:06
【问题描述】:
我想知道如何将 ConfigMap 添加到由 StatefulSet 生成的特定 pod。
我查看了规范,但不知道如何确保 pod 仅安装具有特定标签的 ConfigMap。 我已经准备好一个容器形式的解决方法。但是我仍然想知道这是否可以开箱即用。
【问题讨论】:
我想知道如何将 ConfigMap 添加到由 StatefulSet 生成的特定 pod。
我查看了规范,但不知道如何确保 pod 仅安装具有特定标签的 ConfigMap。 我已经准备好一个容器形式的解决方法。但是我仍然想知道这是否可以开箱即用。
【问题讨论】:
您不能像特殊 pod 一样威胁同一 StatefulSet 中的 pod。仅仅是因为您只能指定一个对整个集合有效的PodSpec。
你可以做的,但它仍然是一个 hack,就是在每个 pod 中挂载所有版本的配置文件,并运行一个入口点脚本,该脚本使用基于 pod 名称的不同配置文件。我没有例子可以展示,但应该很容易
【讨论】:
https://github.com/spoditor/spoditor 提供了一个基于 Mutating Webhook 的更优雅的解决方案来解决这个确切的问题。
本质上,它使用PodSpec 模板上的自定义注释,例如:
annotations:
spoditor.io/mount-volume: |
{
"volumes": [
{
"name": "my-volume",
"secret": {
"secretName": "my-secret"
}
}
],
"containers": [
{
"name": "nginx",
"volumeMounts": [
{
"name": "my-volume",
"mountPath": "/etc/secrets/my-volume"
}
]
}
]
}
现在,StatefulSet 的每个 Pod 中的 nginx 容器将尝试以 my-secret-{pod ordinal} 的模式挂载自己的专用密钥。
您只需确保 my-secret-0、my-secret-1 等存在于 StatefulSet 的同一命名空间中。
项目文档中有更高级的注解用法。
【讨论】: