我需要更新当前通过kubernetes pod运行的docker容器中的证书。包含这些证书的三个pod的标题分别为“app”、“celery”和“celery beat”
当我奔跑kubectl exec -it app -- sh
然后ls
我可以看到旧证书在那里。我的VM文件系统上有新证书,需要将这些证书放入运行的pod中,以便程序再次开始工作。我尝试重新构建用于创建运行容器的Docker映像(使用现有Docker合成文件),但这似乎不起作用。我认为容器中的文件系统最初是使用Docker卷安装的。这大概是在本地完成的,而现在项目是在远程Linux VM上完成的。将新证书放入正在运行的pod而使其他一切保持不变的自然方法是什么?
我可以在中使用kubectl cp
新证书,问题是当重新创建Pod时,它们会恢复为旧证书。
任何帮助都将不胜感激。
1条答案
按热度按时间r1zk6ea11#
检查部署文件中的卷部分,看是否提到了名称更像“certs”的configmap、secret、PV或PVC(通常我们使用这样的名称),如果它存在,并且提及是secret或configmap,您只需要直接更新此资源。如果提及是PV或PVC,您需要通过CLI更新它,例如,我建议你换个秘密。
用于检查部署资源的命令:
kubectl get deploy <DEPLOY NAME> -o yaml
(如果不使用部署,请将其更改为正确的资源种类)。此外,您可以访问您的pod shell并运行
df -hT
,这可能会提示您的驱动器和挂载点。在最坏的情况下,当证书是在容器构建过程中添加的,您可以通过以下方法来解决(这不是最佳实践。最佳实践是构建一个新映像):
您可以使用
kubectl edit deploy <DEPLOY NAME>
编辑资源。要编辑容器图像,请使用docker commit:https://docs.docker.com/engine/reference/commandline/commit/