10

我有两个独立的 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 和脚本的某种组合,但这开始进入主机配置管理领域,我想不惜一切代价避免。我正在使用 CoreOS,主机完全通过 coreos-cloudinit 进行配置。换句话说,没有在创建节点时未定义的主机系统上进行任何操作,因此像 Ansible 这样的传统配置管理工具已经不复存在。

我知道 Kubernetes 的秘密系统,但其中一些变量值可能非常大,而且大多数都不是秘密。

4

3 回答 3

4

你现在真的不能这样做。如果您对模板感兴趣,请关注 https://github.com/kubernetes/kubernetes/issues/11492

另外,这是当前配置 SIG https://groups.google.com/forum/#!forum/kubernetes-sig-config中讨论的主题

我建议您在其中一个地方注册您对该功能的兴趣。

于 2015-11-26T05:56:41.133 回答
2

这可能对你有用:ktmpl 是一个用于处理 Kubernetes 清单模板的工具。这是模板+参数化提案的一个非常简单的客户端实现。

https://github.com/InQuicker/ktmpl

于 2016-02-26T03:19:42.090 回答
0

Ansible 非常适合我们。很容易模板和生成 yaml 文件,但还有一个模块可以直接生成一些资源 http://docs.ansible.com/ansible/kubernetes_module.html

于 2017-03-09T02:19:50.423 回答