在Kubernetes中使用动态值显示

时间:2015-11-26 01:26:51

标签: kubernetes confd

我有两个独立的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的秘密系统,但其中一些变量值可能非常大,而且大多数都不是秘密。

3 个答案:

答案 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的一个非常简单的客户端实现。

https://github.com/InQuicker/ktmpl

答案 2 :(得分:0)

Ansible正在努力为我们服务。很容易模板化并生成yaml文件,但也有一个直接生成一些资源的模块 http://docs.ansible.com/ansible/kubernetes_module.html