假设 imagePullPolicy:IfNotPresent 并且无法拉取图像,Kubernetes 是否会将 pod 重新调度到_确实_具有映像的节点?



我想知道使用imagePullPolicy: ifNotPresent是否会为我们的私有注册表的暂时丢失提供任何弹性。

背景

我有一个多主节点、多工作线程裸机集群,我的所有 Pod 都使用从本地私有注册表中提取的映像,在集群外部的单个节点上运行。因此,群集比注册表本身具有更高的容错能力。

如果我将工作负载设置为imagePullPolicy: Always,并且注册表失败,会发生什么情况?我将无法(例如(扩展/缩减我的 pod,因为我无法从注册表中提取映像。

如果我使用imagePullPolicy: IfNotPresent,那么只要映像已经存在于节点上,即使没有注册表,我也可以愉快地向上/向下扩展。

问题

问题是,如果一个 pod 因为无法拉取映像而无法启动,Kubernetes 是否会尝试在不同的节点(可能缓存了映像(上重新调度该 pod,或者一旦它被调度(并失败(到一个节点,它会一直留在那里直到删除/清空?

干杯! D

没错!如果关闭注册表并imagePullPolicy: Always,则任何新 Pod 都无法创建超时。

不,它不会重新安排吊舱。它将保留在状态ImagePullBackOff中,直到注册表出现。

你可以欺骗它重新调度 pod(虽然不是基于注册表的可用性(,但很可能调度程序会决定在同一节点上调度它,除非资源方面发生了变化。

AFAIK Kube 调度程序不处理图像存在于一个节点上而另一个节点上不存在的情况。

您可以编写自己的调度程序来处理此方案 参考:https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/


您还可以使用像 https://github.com/uber/kraken 这样的工具,它是一个 P2P docker 注册表,即如果映像存在于其中一个节点上,它也可以由其他节点拉取。这也会使您的注册表具有容错能力。

最新更新