如何在kubernetes yaml文件中使用标记,以便系统知道推送了一个新图像

如何在kubernetes yaml文件中使用标记,以便系统知道推送了一个新图像,kubernetes,azure-container-registry,gitops,Kubernetes,Azure Container Registry,Gitops,我正在尝试为我的AKS群集使用Azure DevOps和使用GitOps的CD设置CI。CI完成后,映像将推送到Azure容器注册表。我的问题是我的yaml文件中的图像名称是:latest。当我将映像推送到容器注册表时,Flux CD无法确定映像是否有任何更改,因为映像的名称保持不变。我试图在github中查找该问题,并找到以下链接: 但我不知道如何实施它。有人能帮我吗?来自FluxCD的文档 注意:Flux只适用于不可变的图像标记(:latest不适用) 支持)。每个图像标记必须是唯一的,为此

我正在尝试为我的AKS群集使用Azure DevOps和使用GitOps的CD设置CI。CI完成后,映像将推送到Azure容器注册表。我的问题是我的yaml文件中的图像名称是:latest。当我将映像推送到容器注册表时,Flux CD无法确定映像是否有任何更改,因为映像的名称保持不变。我试图在github中查找该问题,并找到以下链接: 但我不知道如何实施它。有人能帮我吗?

来自FluxCD的文档

注意:Flux只适用于不可变的图像标记(:latest不适用) 支持)。每个图像标记必须是唯一的,为此,您可以使用 Git在标记图像时提交SHA或semver

根据时间戳启用自动化:

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    fluxcd.io/automated: "true"
spec:
  template:
    spec:
      containers:
      - name: app
        image: docker.io/org/my-app:1.0.0
上述配置将使Flux在推送新图像标记时更新应用程序容器,无论是my app:1.0.1还是my app:9e3bdaf

使用扫描电镜版本限制图像更新:

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    fluxcd.io/automated: "true"
    fluxcd.io/tag.app: semver:~1.0
spec:
  template:
    spec:
      containers:
      - name: app
        image: docker.io/org/my-app:1.0.0
当您推送与语义版本表达式匹配的图像标记时,上述配置将使Flux更新图像,例如my app:1.0.1,但不是my app:1.2.0

在azure DevOps管道中标记图像时,应该使用Git commit SHA或semver

来自FluxCD的文档

注意:Flux只适用于不可变的图像标记(:latest不适用) 支持)。每个图像标记必须是唯一的,为此,您可以使用 Git在标记图像时提交SHA或semver

根据时间戳启用自动化:

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    fluxcd.io/automated: "true"
spec:
  template:
    spec:
      containers:
      - name: app
        image: docker.io/org/my-app:1.0.0
上述配置将使Flux在推送新图像标记时更新应用程序容器,无论是my app:1.0.1还是my app:9e3bdaf

使用扫描电镜版本限制图像更新:

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    fluxcd.io/automated: "true"
    fluxcd.io/tag.app: semver:~1.0
spec:
  template:
    spec:
      containers:
      - name: app
        image: docker.io/org/my-app:1.0.0
当您推送与语义版本表达式匹配的图像标记时,上述配置将使Flux更新图像,例如my app:1.0.1,但不是my app:1.2.0

在azure DevOps管道中标记图像时,应该使用Git commit SHA或semver


我们也有类似的问题,我们通过使用唯一的值生成器将校验和添加到部署文件中的注释中来修复它。对我们来说是这样的:

生成头盔模板->部署清单使用唯一校验和->触发部署创建

我们在清单中启用了RollingUpdate,从而消除了应用程序的停机时间。下面是我们的头盔模板配置。 部署.yaml

模板:
元数据:
标签:
应用程序:{{.Values.appName}
注释:
校验和/commonconfig:{{.Values.commonconfig | toJson | sha256sum | trunc63}
校验和/podconfig:{{.Values.podconfig | toJson | sha256sum | trunc63}

我们在掌舵图中有这一点,它将在部署清单中生成唯一的值。这将使部署每次都发生,即使映像的最新标记是相同的。另外,要像往常一样使用imagePullPolicy。

我们遇到了类似的问题,我们通过使用唯一的值生成器将校验和添加到部署文件中的注释来修复它。对我们来说是这样的:

生成头盔模板->部署清单使用唯一校验和->触发部署创建

我们在清单中启用了RollingUpdate,从而消除了应用程序的停机时间。下面是我们的头盔模板配置。 部署.yaml

模板:
元数据:
标签:
应用程序:{{.Values.appName}
注释:
校验和/commonconfig:{{.Values.commonconfig | toJson | sha256sum | trunc63}
校验和/podconfig:{{.Values.podconfig | toJson | sha256sum | trunc63}

我们在掌舵图中有这一点,它将在部署清单中生成唯一的值。这将使部署每次都发生,即使映像的最新标记是相同的。另外,像往常一样使用imagePullPolicy。

我想避免使用helm模板进行简单的服务部署,但如果您能分享详细信息,那就太好了。用配置更新了我的答案。请检查。我想避免使用helm模板进行简单的服务部署,但如果您可以共享详细信息,那就太好了。用配置更新了我的答案。请查收。