我正在运行一个有三个容器的吊舱。需要在不进行滚动升级的情况下更新其中一个容器的映像。
如何在不触摸/重新启动其他两个容器的情况下更新容器映像?
答案 0 :(得分:1)
如果您问自己这个问题,也许您应该重新考虑一些事情。
如其他评论/答案所述,一旦创建的广告连播,无论其内部是什么,都是一个单元。
如果您需要缩放Pod的某个部分而不是其余部分,或者仅对一部分进行更新并且不想重新启动其余部分(例如缓存系统),则应该查看容器从您的部署中创建另一个独立的服务器。
答案 1 :(得分:0)
我认为您不能,因为吊舱是原子单元,包含所有容器。
答案 2 :(得分:0)
您必须删除并重新创建整个Pod。如果您查看Kubernetes PodSpec的API定义,则containers
和initContainers
字段都包含短语无法更新。创建后,Pod是不可变的,各种高级对象通过创建和销毁Pod来工作。
在标准实践中,我习惯于:
始终使用更高级别的对象来管理您的容器,大多数情况下是“部署”;不要直接在Pods中交易。您可以可以更改部署规范中嵌入的Pod规范,部署控制器将创建与新规范匹配的新Pod,然后拆除旧Pod(即零停机滚动升级)。
如果可能,仅将一个容器放入Pod中。您提到了initContainer
,所以这对您来说可能不是100%可能的,但是您可以实现“不重新启动B而更新A”的唯一方法是使它们位于不同的Pod(以及不同的部署)中。
不要担心重新启动。如果节点发生故障,或者您需要像显示的那样更新容器映像,或者在某些其他情况下,Pod可能会停止并删除,并在其位置启动新的Pod。这是完全正常的,如果您的部署中有多个副本,则相当透明。您的应用程序可能需要做一些工作才能在这种环境下满意(而不是仅在内存或本地磁盘中保持状态)。