kubernetes部署.如何更改容器环境变量以进行滚动更新? [英] kubernetes Deployment. how to change container environment variables for rolling updates?

查看:237
本文介绍了kubernetes部署.如何更改容器环境变量以进行滚动更新?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下是我在Google上使用Kunbernetes的方式.

Below is how I am using kunbernetes on google.

我有一个节点应用程序,例如 Book-portal .

I have one node application let's say Book-portal.

节点应用正在使用环境变量进行配置.

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

Step1: I created docker file and pushed

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

第2步:使用以下命令进行部署

Step2: deployed with following commands

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

第3步:

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

第4步:通过

kubectl get services book-portal

现在假设我在下一版本中添加了新功能和新配置.

now assume I added new features and new configurations in next release.

因此要推出新版本v2

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

Step1: I created docker file and pushed

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

第二步:编辑部署

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 

但是我不能添加/更改环境变量

But I can not add/change environment 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上的节点应用程序中?
  2. 我应该如何处理环境变量 滚动更新期间有什么变化?
  1. Can anyone guide with what is best practices to pass configurations in node app on kubernetes?
  2. how should I handle environment variable changes during rolling updates?

推荐答案

我认为最好的选择是在k8s中使用configmap,然后更改pod模板以从configmap中获取env变量值,请参见

I think your best bet is to use configmaps in k8s and then change you pod template to get env variable values from the configmap see Consuming ConfigMap in pods

我很抱歉在这里输入了错误的链接.我已更新,但对于TL; DR 您可以执行以下操作.

edit: I appologize I put the wrong link here. I have updated but for the TL;DR you can do the following.

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

然后pod的用法可能如下所示.

and then pod usage can look like this.

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

这篇关于kubernetes部署.如何更改容器环境变量以进行滚动更新?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆