我有一个部署,通过配置映射为其设置pod的env变量。
envFrom:
- configMapRef:
name: map
我的配置图将如下所示
apiVersion: v1
data:
HI: HELLO
PASSWORD: PWD
USERNAME: USER
kind: ConfigMap
metadata:
name: map
所有吊舱都从地图设置了这些环境变量。现在,如果我更改配置映射文件并应用-kubectl apply -f map.yaml
,则会得到map is configured
的确认。但是,它不会使用更新的环境变量触发新的Pod创建。
有趣的是这个作品
kubectl set env deploy/mydeploy PASSWORD=NEWPWD
但不是这个
kubectl set env deploy/mydeploy --from=cm/map
但是我正在寻找通过配置映射通过更新的env变量创建新Pod的方法!
答案 0 :(得分:0)
有趣的是这个作品
kubectl set env deploy / mydeploy PASSWORD = NEWPWD
但不是这个
kubectl set env deploy / mydeploy --from = cm / map
这是预期的行为。您的pod清单未在第二个命令中更改(使用cm
时),这就是Kubernetes不重新创建它的原因。
有几种解决方法。基本上,您可以做的是每次ConfigMap更改时人为更改Pod清单,例如使用ConfigMap内容的sha256sum向Pod添加注释。这实际上是Helm建议您执行的操作。如果您使用头盔,则可以按照以下步骤操作:
kind: Deployment
spec:
template:
metadata:
annotations:
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
[...]
只需确保将注释添加到Pod(模板)对象,而不是Deployment本身。
答案 1 :(得分:0)
简单的答案是“否”。
如果您不使用头盔并寻找黑客,则在更新configMap之后,只需使用一个虚拟env变量-继续更新该值只是为了触发滚动更新。
kubectl set env deploy/mydeploy DUMMY_ENV_FOR_ROLLING_UPDATE=dummyval