嘿,我有一个更广泛的问题,当我在kubernetes中更新机密时,除非在ugprades / rechedules或只是重新部署它们,否则它们不会在pod中实现;我看到了有关它的其他stackoverflow帖子,但是没有一个解决方案适合我Update kubernetes secrets doesn't update running container env vars
所以Pod上的python脚本的应用程序内解决方案可以自动更新其秘密https://medium.com/analytics-vidhya/updating-secrets-from-a-kubernetes-pod-f3c7df51770d,但似乎很遥远,我想出了在部署清单中添加注释的解决方案-希望它可以重新-每次掌舵图表将新的时间戳记添加到计划的pod中-确实放置了时间戳,但没有重新计划-任何想法如何强制这种行为?
apiVersion: apps/v1
kind: Deployment
metadata:
name: xxx
namespace: xxx
labels: xxx
annotations:
lastUpdate: {{ now }}
我也不希望将此补丁命令添加到ci / cd部署中,因为它具有任意性,而且-感觉不像是正确的解决方案
kubectl patch deployment mydeployment -p '{"spec":{"template":{"spec":{"containers":[{"name":"mycontainer","env":[{"name":"RESTART_","value":"'$(date +%s)'"}]}]}}}}'
没有其他人找到更好的解决方案来针对已更改的机密重新部署Pod吗?
答案 0 :(得分:4)
更改秘密时,Kubernetes本身不会自动进行部署的滚动更新。因此,需要一个控制器来自动为您执行此操作。看一下Reloader,它是一个控制器,它监视ConfigMap和/或Secret中是否发生了某些更改;然后对相关的DeploymentConfig,Deployment,Daemonset和Statefulset进行滚动升级。
将reloader.stakater.com/auto
注释添加到名为xxx
的部署中,并有一个名为xxx-configmap
的ConfigMap或名为xxx-secret
的Secret。
这将自动发现通过环境变量或通过卷挂载使用xxx-configmap或xxx-secret的部署/守护程序/状态集。并且xxx-configmap
或xxx-secret
更新时,它将在相关的Pod上执行滚动升级
apiVersion: apps/v1
kind: Deployment
metadata:
name: xxx
namespace: xxx
labels: xxx
annotations:
reloader.stakater.com/auto: "true"