kubernetes部署.如何更改容器环境变量以进行滚动更新? [英] kubernetes Deployment. how to change container environment variables for rolling updates?
问题描述
以下是我在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
- 任何人都可以指导通过最佳实践的最佳做法 在kubernetes上的节点应用程序中?
- 我应该如何处理环境变量 滚动更新期间有什么变化?
- Can anyone guide with what is best practices to pass configurations in node app on kubernetes?
- 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屋!