如何通过Azure管道使用相同的图像标签在Azure Kubernetes服务上更新部署图像?

时间:2019-11-01 06:09:53

标签: azure docker kubernetes continuous-deployment azure-kubernetes

每次尝试将某些代码提交给github时,我都尝试使用Azure Kubernetes Service上的最新图像内容更新我的部署。我在构建管道中取得了一个阶段,可以在完美运行的docker hub上构建和推送映像。但是,在我的发布管道中,该映像被用作工件,并被部署到Azure Kubernetes服务,但是问题是AKS上的映像未根据最新代码在Docker Hub上推送的映像进行更新。

现在,每次发生某些提交时,我都必须通过Command手动更新AKS上的映像

kubectl设置映像部署/ demo-microservice demo-microservice = customerandcontact:contact

我的Yaml文件

enter image description here

任何人都可以告诉我yaml文件中的错误/更改是否自动更新AKS上的图像。

2 个答案:

答案 0 :(得分:0)

当您使用相同标签在容器注册表中使用新映像时,对于Kubernetes而言没有任何意义。如果您运行kubectl apply -f ...并且图像名称和标记保持不变,则它不会执行任何操作,因为没有配置更改。有两种选择:

  1. 在每个构建中提供一个新标签,并将:contact更改为yaml中的新标签,然后运行kubectl apply

  2. 仅对于开发环境(不要在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