我想学习如何在不中断和重新创建部署的情况下更新工作人员吊舱中的秘密。
当前,pod通过以下方式将秘密作为环境变量:
env:
- name: SECRET_ACCESS_KEY
valueFrom:
secretKeyRef:
key: secret_access_key
name: secrets
但这只会在他们启动时发生。
因此,如果需要更改秘密,我必须:
secrets.yaml
中的秘密kubectl apply -f secrets.yaml
kubectl delete -f worker-deployment.yaml
kubectl apply -f worker-deployment.yaml
我真的不喜欢第3步和第4步,因为它们会终止正在进行的作业。
有什么更好的工作流程来更新环境变量?
答案 0 :(得分:2)
无法对pod的环境变量进行“热重装”。
尽管如此,您无需再次删除并重新创建部署即可应用新的秘密值。您只需要重新创建基础容器。一些选项是:
kubectl delete pods
重新创建它们terminationGracePeriodSeconds
从30
到31
)。答案 1 :(得分:0)
如前所述,您无法做的事情。但是,Kubernetes提供了另一种方法:将ConfigMaps安装为卷。例如
apiVersion: v1
kind: Pod
metadata:
name: configmap-pod
spec:
containers:
- name: test
image: busybox
volumeMounts:
- name: config-vol
mountPath: /etc/config
volumes:
- name: config-vol
configMap:
name: log-config
items:
- key: log_level
path: log_level
在这种情况下,log-config
ConfigMap
将作为Volume
挂载,您可以从其log_level
条目中以文件“ {{1 }}”在吊舱内。
对配置映射的更改通过卷上文件的更改反映出来,而这些更改又可以由您的应用程序使用您所用语言的适当功能来监视。
答案 2 :(得分:-2)
如果您具有适当的权限,则可以通过K8S的WebUI(仪表板)或fabric8之类的工具来更新机密。
查看Kubernetes modify a secret using the cli以获得其他选项。