Kubernetes:--映像拉取策略总是不起作用

Kubernetes:--映像拉取策略总是不起作用,kubernetes,dockerhub,Kubernetes,Dockerhub,我有一个Kubernetes部署,它使用image:test:latest(不是真实的图像名称,但它是最新的标记)。 此图像位于docker hub上。我刚刚向dockerhub推出了新版本的test:latest。我原以为我的吊舱会在库伯内特斯重新部署,但什么也没发生 我创建了如下部署: kubectl run sample-app --image=`test:latest` --namespace=sample-app --image-pull-policy Always 为什么推送新映像

我有一个Kubernetes部署,它使用image:
test:latest
(不是真实的图像名称,但它是最新的标记)。 此图像位于docker hub上。我刚刚向dockerhub推出了新版本的
test:latest
。我原以为我的吊舱会在库伯内特斯重新部署,但什么也没发生

我创建了如下部署:

kubectl run sample-app --image=`test:latest` --namespace=sample-app --image-pull-policy Always

为什么推送新映像后没有触发新部署?

Kubernetes正在而不是监视映像的新版本。映像提取策略指定如何获取映像以运行容器
始终
意味着每次启动容器时,它都会尝试提取新版本。要查看更新,您需要删除Pod(而不是部署)-新创建的Pod将运行新映像


没有直接的方法让Kubernetes自动用新图像更新正在运行的容器。这将是连续交付系统的一部分(可能使用带有新sha256sum或图像标签的
kubectl set image
,但不是
latest
)。

如果您使用的是yml文件,则使用

kubectl apply -f myfile.yml


在您的文件中,k8s不会提取新图像。您首先需要删除pod,K8s部署将自动拉取映像。

强制更新的一种方法是在CI脚本中运行此操作(在推送新映像后,并在应用的yaml中将
映像拉取策略设置为
始终
):

kubectl卷展栏重新启动部署/--命名空间=


在Azure Devops中,输入“rollout”作为命令,使用上面的名称空间功能,并在参数字段中输入“restart…”。

好的,我没有在Kubernetes上做很多工作,但在可能的情况下,我在OpenShift上做了很多工作。是的,Kubernetes缺少OpenShift的一些功能。@JanosLenart,如果你有一个带有两个标记的图像:v1(旧标记)和v2(新标记),并且在kubernetes配置文件中,它被设置为pull v1,“映像pull策略:始终”是否强制kubernetes使用v2而不是v1映像?如果您在podtemplate(部署或状态集中)中更改映像名称这将始终触发卷展栏,而不考虑
imagePullPolicy
设置。如果设置
imagePullPolicy:always
,则即使节点已具有同名图像,也会强制节点拖动图像。所谓名称,我指的是完整的图像名称,包括存储库和标记(:v1,:v2)。有关该主题的良好阅读是和
imagePullPolicy: Always