deployment - Kubernetes 部署。如何更改容器环境变量以进行滚动更新?

标签 deployment docker kubernetes google-kubernetes-engine

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

我有一个节点应用程序,比如说 Book-portal

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

Step1:我创建了docker文件并推送了

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

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

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

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

所以要推出新版本 v2

Step1:我创建了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 

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

          - 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. 我应该如何处理环境变量 滚动更新期间的变化?

最佳答案

我认为最好的办法是在 k8s 中使用 configmaps,然后更改 pod 模板以从 configmap 获取环境变量值,请参阅 Consuming ConfigMap in pods

编辑:我很抱歉我在这里放错了链接。我已经更新了,但对于 TL;DR 您可以执行以下操作。

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

然后 pod 使用情况可以如下所示。

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

关于deployment - Kubernetes 部署。如何更改容器环境变量以进行滚动更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38261107/

相关文章:

ruby-on-rails - 使用rails webpacker时我们应该将manifest.json文件提交到git repo吗?

kubernetes - 节点级指标在Prometheus中不可用(随Istio 1.6一起安装)

kubernetes - 如何从 OpenShift 中的 pod 内部获取命名空间?

routing - 将IP范围转发到在Vagrant/VirtualBox中运行的Kubernetes节点

deployment - Azure CD 问题 : Failed to fetch App Service 'myAppServiceName' publishing credentials

deployment - WAR 不会从自动部署中重新部署到 Glassfish 中

javascript - 在网站上嵌入表单

如果我包含 --net=<macvlan> 和 --ip=<ip> docker run -p 不会公开端口

docker - 无法使用docker-compose运行vue-无法找到package.json

Docker-Compose 在不同端口中运行一个镜像的多个实例