kubernetes部署。 如何更改滚动更新的容器环境variables?

以下是我在谷歌上使用kunbernetes的方式。

我有一个节点应用程序让我们说图书门户

节点应用程序使用环境variables进行configuration

第一步:我创build了docker文件并推送

gcr.io/<project-id>/book-portal:v1 

第二步:部署以下命令

 kubectl run book-portal --image=gcr.io/<project-id>/book-portal:v1 --port=5555 --env ENV_VAR_KEY1=value1 --env ENV_VAR_KEY2=value2 --env ENV_VAR_KEY3=value3 

第三步:

 kubectl expose deployment book-portal --type="LoadBalancer" 

第四步:获取公共IP

 kubectl get services book-portal 

现在假设我在下一个版本中添加了新function和新configuration。

所以推出新版本v2

第一步:我创build了docker文件并推送

 gcr.io/<project-id>/book-portal:v2 

第2步:编辑部署

 kubectl edit deployment book-portal ---------------yaml--------------- ... spec: replicas: 1 selector: matchLabels: run: book-portal strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 1 type: RollingUpdate template: metadata: creationTimestamp: null labels: run: book-portal spec: containers: - env: - name: ENV_VAR_KEY1 value: value1 - name: ENV_VAR_KEY2 value: value2 - name: ENV_VAR_KEY3 value: value3 image: gcr.io/<project-id>/book-portal:v1 imagePullPolicy: IfNotPresent name: book-portal ... ---------------------------------- 

我成功地能够改变

 image:gcr.io/<project-id>/book-portal:v1 

 image:gcr.io/<project-id>/book-portal:v2 

但我不能添加/更改环境variables

  - env: - name: ENV_VAR_KEY1 value: value1 - name: ENV_VAR_KEY2 value: value2 - name: ENV_VAR_KEY3 value: value3 - name: ENV_VAR_KEY4 value: value4 
  1. 任何人都可以指导什么是在kubernetes节点应用程序中传递configuration的最佳做法?
  2. 我应该如何处理滚动更新期间的环境variables更改?

我认为你最好的select是使用k8s中的configmaps,然后改变你的pod模板以从configmap中获得envvariables值。参见在pod中使用ConfigMap

编辑:我appologize我把错误的链接在这里。 我已经更新,但为TL; DR你可以做到以下几点。

 apiVersion: v1 kind: ConfigMap metadata: name: special-config namespace: default data: special.how: very special.type: charm 

然后吊舱使用可以看起来像这样。

 apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "env" ] env: - name: SPECIAL_LEVEL_KEY valueFrom: configMapKeyRef: name: special-config key: special.how - name: SPECIAL_TYPE_KEY valueFrom: configMapKeyRef: name: special-config key: special.type restartPolicy: Never