更新kubernetes机密文件';t更新正在运行的容器环境变量

更新kubernetes机密文件';t更新正在运行的容器环境变量,kubernetes,kubectl,Kubernetes,Kubectl,当前,在更新kubernetes机密文件时,为了应用更改,我需要运行kubectl apply-f my secrets.yaml。如果有一个运行的容器,它仍然会使用旧的秘密。为了在正在运行的容器上应用新的秘密,我目前运行命令kubectl replace-f my pod.yaml。 我想知道这是更新正在运行的容器机密的最好方法,还是我遗漏了什么 谢谢。根据设计,库伯内特斯不会向跑步舱推送秘密更新。如果你想更新Pod的秘密值,你必须销毁并重新创建Pod。你可以阅读更多关于它的信息。说: 装载的

当前,在更新kubernetes机密文件时,为了应用更改,我需要运行
kubectl apply-f my secrets.yaml
。如果有一个运行的容器,它仍然会使用旧的秘密。为了在正在运行的容器上应用新的秘密,我目前运行命令
kubectl replace-f my pod.yaml
。 我想知道这是更新正在运行的容器机密的最好方法,还是我遗漏了什么


谢谢。

根据设计,库伯内特斯不会向跑步舱推送秘密更新。如果你想更新Pod的秘密值,你必须销毁并重新创建Pod。你可以阅读更多关于它的信息。

说:

装载的机密将自动更新 当卷中已经使用的秘密被更新时,投影的密钥最终也会被更新。更新时间取决于kubelet同步周期


装载的机密将被更新。问题是什么时候。在这种情况下,机密的内容被更新并不意味着应用程序会自动使用它。应用程序的任务是监视此场景中的文件更改,以便采取相应的行动。考虑到这一点,您目前需要做更多的工作。我现在想到的一个方法是运行一个与Kubernetes API对话的应用程序,以启动新的应用程序。这样,理论上你就可以达到你想要更新秘密的目的。不知何故,这并不优雅,但这是我目前唯一的想法。我还需要亲自检查更多关于库伯内特斯的概念。所以请容忍我

假设我们正在运行pod mypod[在pod规范中作为mysecret安装秘密]

我们可以删除现有的秘密

kubectl delete secret mysecret
使用更新的文件重新创建相同的机密

kubectl create secret mysecret <updated file/s>
检查mypod内部的秘密,它将被更新。

以防任何人(如我)想要强制使用这些秘密的滚动更新Pod。因此,技巧是更新容器内的一个Env变量,然后k8s将自动滚动更新整个POD

kubectl patch deployment mydeployment -p '{"spec":{"template":{"spec":{"containers":[{"name":"mycontainer","env":[{"name":"RESTART_","value":"'$(date +%s)'"}]}]}}}}'

对于k8s的版本>v1.15:
kubectl卷展栏重新启动部署$deploymentname
:这将
以增量方式重新启动POD,而不会导致停机

在上,在“挂载的秘密会自动更新”这一点上,它是这样说的——至少我是这样理解的。或者这是另一种情况?对于机密不自动更新的情况,这个答案是正确的。监视机密的另一种方法是使用
inotify
,并查看它装载的目录。机密文档还注意到,“使用机密作为子路径卷装载的容器将不会接收机密更新”-这就是我所做的难住了一会儿。
kubectl patch deployment mydeployment -p '{"spec":{"template":{"spec":{"containers":[{"name":"mycontainer","env":[{"name":"RESTART_","value":"'$(date +%s)'"}]}]}}}}'