每次尝试将某些代码提交给github时,我都尝试使用Azure Kubernetes Service上的最新图像内容更新我的部署。我在构建管道中取得了一个阶段,可以在完美运行的docker hub上构建和推送映像。但是,在我的发布管道中,该映像被用作工件,并被部署到Azure Kubernetes服务,但是问题是AKS上的映像未根据最新代码在Docker Hub上推送的映像进行更新。
现在,每次发生某些提交时,我都必须通过Command手动更新AKS上的映像
kubectl设置映像部署/ demo-microservice demo-microservice = customerandcontact:contact
我的Yaml文件
任何人都可以告诉我yaml文件中的错误/更改是否自动更新AKS上的图像。
答案 0 :(得分:0)
当您使用相同标签在容器注册表中使用新映像时,对于Kubernetes而言没有任何意义。如果您运行kubectl apply -f ...
并且图像名称和标记保持不变,则它不会执行任何操作,因为没有配置更改。有两种选择:
在每个构建中提供一个新标签,并将:contact
更改为yaml中的新标签,然后运行kubectl apply
仅对于开发环境(不要在Stage或Prod中使用)保留相同的标记(通常使用标记:latest
),并且在将新映像部署到注册表运行{{1}之后}。由于您已将图片提取策略设置为始终,因此这将导致Kubernetes从注册表中提取新图片并重新部署Pod。
第二种方法是仅用于测试的解决方法。
答案 1 :(得分:0)
当您使用特定的图像标签指定图像时,Kubernetes将默认将容器的imagePullPolicy
设置为IfNotPresent
,这意味着该图像将不会再次被拉出,而先前拉出的图像将被部署。 >
仅当标签不存在(实际上与Always
相同,或者标签明确设置为latest
时,Kubernetes才会将策略更改为latest
。
检查特定容器上部署模板上的实际imagePull策略是什么。
kubectl get pod demo-microservice -o yaml | grep imagePullPolicy -A 1
尝试修补部署
kubectl patch deployment demo-microservice -p
'{"spec": { "template" :
{ "spec" : { "containers" :
[{"name" : "demo-microservice",
"image" : "repo/image:tag",
"imagePullPolicy": "Always" }]}}}}'
确保将有关容器的imagePullPolicy
设置为Always
。