根据环境调整 Kubernetes 配置

Dan*_*elM 5 kubernetes kubectl minikube

我想在 kubernetes 模板文件中描述我的服务。是否可以参数化诸如 number 或 之类的值replicas,以便我可以在部署时进行设置。

这里的目标是能够在 minikube(我只需要一个副本)中本地运行我的服务,并使它们尽可能接近那些在 staging/live 中运行的服务。

我希望能够更改副本的数量,使用本地安装的卷并进行其他小的更改,而不必编写不可避免地彼此不同的单独模板文件。

spu*_*der 8

Helm 正在成为模板化 kubernetes 部署的标准。helm chart 是一个包含 yaml 文件的目录,其中包含 golang 变量占位符

---
kind: Deployment
metadata:
  name: foo
spec:
  replicas: {{ .Values.replicaCount }}
Run Code Online (Sandbox Code Playgroud)

您在“values.yaml”文件中定义“value”的默认值

replicaCount: 1
Run Code Online (Sandbox Code Playgroud)

您可以选择使用--set命令行覆盖该值

helm install foo --set replicaCount=42
Run Code Online (Sandbox Code Playgroud)

Helm 还可以指向外部应答文件

helm install foo -f ./dev.yaml
helm install foo -f ./prod.yaml
Run Code Online (Sandbox Code Playgroud)

开发文件

---
replicaCount: 1
Run Code Online (Sandbox Code Playgroud)

产品.yaml

---
replicaCount: 42
Run Code Online (Sandbox Code Playgroud)

Helm与更简单的解决方案相比的另一个优点envbsubstHelm支持插件。一个强大的插件是helm-secrets允许您使用 pgp 密钥加密敏感数据的插件。https://github.com/futuresimple/helm-secrets

如果使用helm+helm-secrets您的设置可能如下所示,其中您的代码在一个 repo 中,而您的数据在另一个 repo 中。

带有舵图的 git repo

stable
  |__mysql
     |__Values.yaml
     |__Charts
  |__apache
     |__Values.yaml
     |__Charts
incubator
  |__mysql
     |__Values.yaml
     |__Charts
  |__apache
     |__Values.yaml
     |__Charts

Run Code Online (Sandbox Code Playgroud)

然后在另一个包含环境特定数据的 git repo 中

values
|__ mysql
    |__dev
       |__values.yaml
       |__secrets.yaml
    |__prod
       |__values.yaml
       |__secrets.yaml

Run Code Online (Sandbox Code Playgroud)

然后,您有一个引用值和机密文件的包装器脚本

helm secrets upgrade foo --install -f ./values/foo/$environment/values.yaml -f ./values/foo/$environment/secrets.yaml
Run Code Online (Sandbox Code Playgroud)

环境替代品

正如其他答案中提到的,envsubst是一种非常强大而简单的方法来制作自己的模板。kiminehart的例子

apiVersion: extensions/v1beta1
kind: Deployment
# ...
    architecture: ${GOOS}
Run Code Online (Sandbox Code Playgroud)
GOOS=amd64 envsubst < mytemplate.tmpl > mydeployment.yaml
Run Code Online (Sandbox Code Playgroud)
apiVersion: extensions/v1beta1
kind: Deployment
# ...
    architecture: amd64
Run Code Online (Sandbox Code Playgroud)

库克特尔

有一个功能请求允许kubectl执行与 helm 相同的一些功能并允许变量替换。有一个背景文件,强烈暗示,该功能将永远不会被添加,而是达到像外部工具Helmenvsubst管理模板。


(编辑)

自定义

Kustomize是 google 开发的一个新项目,与 helm 非常相似。基本上你有 2 个文件夹baseoverlays. 然后运行kustomize build someapp/overlays/production,它将为该环境生成 yaml。

   someapp/
   ??? base/
   ?   ??? kustomization.yaml
   ?   ??? deployment.yaml
   ?   ??? configMap.yaml
   ?   ??? service.yaml
   ??? overlays/
      ??? production/
      ?   ??? kustomization.yaml
      ?   ??? replica_count.yaml
      ??? staging/
          ??? kustomization.yaml
          ??? cpu_count.yaml
Run Code Online (Sandbox Code Playgroud)

它比 helm 更简单,开销更少,但没有用于管理机密的插件。您可以结合kustomize使用小恩小惠envsubst管理秘密。

https://kubernetes.io/blog/2018/05/29/introducing-kustomize-template-free-configuration-customization-for-kubernetes/