我需要更新当前通过kubernetes pod运行的docker容器中的证书。包含这些证书的三个豆荚分别名为"app"、"celery"one_answers"celery beat">
运行
kubectl exec -it app -- sh
然后是ls
我可以看到旧的证书在那里。我的VM文件系统上有新的证书,需要将这些证书放入正在运行的pod中,以便程序重新开始工作。我尝试重建用于创建运行容器的docker映像(使用现有的docker组合文件),但这似乎不起作用。我认为容器中的文件系统最初是使用docker卷装载的。这可能是在本地完成的,而现在项目是在远程Linux VM上完成的。什么是自然的方式,让新的证书进入运行舱,让其他一切保持不变?
我可以kubectl cp
新的证书,问题是,当pod得到重新创建,他们恢复到旧的证书。
任何帮助都将非常感激。
检查您的部署文件,在卷部分,如果有一些提到configmap, secret, PV或PVC的名称更可能是"certs"(通常我们使用这样的名称),如果它存在,并且提到的是secret或configmap,您只需要直接更新此资源。如果提到的是PV或PVC,你需要通过CLI来更新它,我建议你改成secret。
检查您的部署资源:kubectl get deploy <DEPLOY NAME> -o yaml
(如果您不使用部署,请更改为正确的资源类型)。
同样,您可以访问您的pod shell并运行df -hT
,这可能会提示您的驱动器和挂载点。
在最坏的情况下,当在容器构建期间添加cert时,您可以通过(这不是最佳实践)来解决它。最佳实践是构建一个新映像):
- 编辑容器图像,删除证书,用新标签推送(不要覆盖旧标签)
- 用新的证书创建一个secret
- 在相同的路径中使用相同的名称挂载这个秘密。
- 修改部署中的镜像版本。
您可以使用kubectl edit deploy <DEPLOY NAME>
来编辑您的资源。
编辑容器镜像,使用docker commit: https://docs.docker.com/engine/reference/commandline/commit/