根据环境调整Kubernetes配置

时间:2017-12-05 13:56:30

标签: kubernetes kubectl minikube

我想在kubernetes模板文件中描述我的服务。是否可以参数化数字或replicas等值,以便我可以在部署时设置它。

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

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

2 个答案:

答案 0 :(得分:1)

头盔

Helm正在成为模板化kubernetes部署的标准。舵图是由包含golang变量占位符的yaml文件组成的目录

---
kind: Deployment
metadata:
  name: foo
spec:
  replicas: {{ .Values.replicaCount }}

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

replicaCount: 1

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

helm install foo --set replicaCount=42

头盔也可以指向外部答案文件

helm install foo -f ./dev.yaml
helm install foo -f ./prod.yaml

dev.yaml

---
replicaCount: 1

prod.yaml

---
replicaCount: 42

Helm这样的简单解决方案相比,envbsubst的另一个优势是Helm支持插件。一个强大的插件是helm-secrets插件,可让您使用pgp密钥加密敏感数据。 https://github.com/futuresimple/helm-secrets

如果使用helm + helm-secrets,则您的设置可能如下所示,其中代码位于一个存储库中,而数据位于另一个存储库中。

带有头盔图的git repo

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

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

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

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

helm secrets upgrade foo --install -f ./values/foo/$environment/values.yaml -f ./values/foo/$environment/secrets.yaml

envsubst

如其他答案所述,envsubst是一种非常强大而简单的方式来制作自己的模板。 kiminehart

中的示例
apiVersion: extensions/v1beta1
kind: Deployment
# ...
    architecture: ${GOOS}
GOOS=amd64 envsubst < mytemplate.tmpl > mydeployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
# ...
    architecture: amd64

Kubectl

有一个feature request允许kubectl行使舵的某些相同功能并允许变量替换。有background document强烈建议永远不要添加该功能,而应由Helmenvsubst之类的外部工具来管理模板。


(编辑)

Kustomize

Kustomize是由Google开发的与头盔非常相似的新项目。基本上,您有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

它比头盔更简单并且开销更少,但是没有用于管理机密的插件。您可以将kustomizesopsenvsubst结合使用来管理机密。

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

答案 1 :(得分:0)

我希望有人会给我一个更好的答案,但在此期间,您可以通过envsubst提供配置(请参阅gettextthis for mac)。

示例config,text.yaml:

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: test
spec:
  replicas: ${NUM_REPLICAS}
  ...

然后运行:

$ NUM_REPLICAS=2 envsubst < test.yaml | kubectl apply -f -
deployment "test" configured

最后的破折号是必需的。当然,这并不能解决数量问题,但它有点帮助。您可以编写脚本/生成文件来自动化环境。