我有两个独立的Kubernetes集群,分别用于登台和生产环境。我希望我将向每个集群提交Kubernetes API对象的YAML清单,但是这些对象在两个环境之间的配置略有不同。
作为一个简单但说明性的示例,想象一下在每个集群上运行内部Docker注册表,一个使用S3作为存储后端,一个使用GCS后端。注册表容器可以接受这些配置值作为环境变量或从文件中读取,这两个Kubernetes都表示支持,但是我应该如何为每个环境填充这些值?
基本上我想要的是一种让清单看起来像这样的方法,其中$()
语法是在提交清单时在服务器上发生的变量插值:
---
apiVersion: v1
kind: Pod
metadata:
name: foo
spec:
containers:
- name: foo
image: foo
env:
- name: bar
value: $(etcdctl get /path/to/bar)
我可以编写使用占位符作为值的模板,然后处理模板,从某些外部源中提取实际值,以生成实际提交给集群的最终清单。但是,我想我先问一个这样做的工具已经存在,或者有一些我不知道的Kubernetes祝福方式。这似乎是许多人为了使用Kubernetes而需要做的事情。
我曾经有过的其他想法包括在主机节点上使用etcd,confd和scripts的某些组合,但这开始进入主机配置管理的领域,我想以几乎所有成本避免这种情况。我正在使用CoreOS,主机完全通过coreos-cloudinit进行配置。换句话说,在创建节点时未定义的主机系统上没有任何操作,因此像Ansible这样的传统配置管理工具已经完成。
我知道Kubernetes的秘密系统,但其中一些变量值可能非常大,而且大多数都不是秘密。
答案 0 :(得分:4)
你现在无法真正做到这一点。如果你对模板感兴趣,那么要遵循的问题是 https://github.com/kubernetes/kubernetes/issues/11492
此外,这是目前配置SIG中讨论的主题 https://groups.google.com/forum/#!forum/kubernetes-sig-config
我建议您在其中一个地方注册您对该功能的兴趣。
答案 1 :(得分:2)
这可能对你有用:ktmpl是一个处理Kubernetes清单模板的工具。这是Templates + Parameterization proposal的一个非常简单的客户端实现。
答案 2 :(得分:0)
Ansible正在努力为我们服务。很容易模板化并生成yaml文件,但也有一个直接生成一些资源的模块 http://docs.ansible.com/ansible/kubernetes_module.html