如何设置 flux 来为每个构建部署最新的图像标签?

如何设置 flux 来为每个构建部署最新的图像标签?

我已经添加了 github 操作来为每个最新提交构建一个 docker 镜像并将其推送到 azure 中的容器注册表。

我们已经创建了 yaml 文件,用于将 docker 镜像部署到 Azure 上的 kubernetes。并将 flux 部署到 中,以便在 yaml 文件发生任何更改时自动同步。

如何设置通量当有新构建时从容器注册表获取最新的图像?

答案1

这描述了一种解决方案,您将 yaml 文件保存在与保存项目代码的存储库分开的 GitHub 存储库中。因此,这两个存储库是:

  1. 项目 GitHub 仓库
  2. 基础设施 GitHub 存储库 (IaC)

我的假设是,Flux 随后指向基础设施存储库,这样当在那里进行更改时,Flux 会使集群与存储库中现在声明的所需更改保持一致。(我们使用 ArgoCD)。当您对项目存储库进行更改时,GitHub Action 会构建新映像(带有新标签)并推送到您的 Azure 容器注册表。

然后你的问题是如何让 CI/CD 工具(即 Flux)了解新的图像标签,以便它可以提取新的图像。

建议考虑使用 Kustomize 来管理基础设施仓库中标签的更新,以便 CI/CD 工具自动检测仓库中的更改并使用新镜像相应地更新集群。

这将需要以下内容:

将 Kustomization.yaml 文件添加到您的基础设施存储库,其中包含 a) 描述项目基础设施的 yaml 清单和 b) 要替换的图像标签。

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- resource1.yaml
- resource2.yaml
- ...

images:
- name: image-name in your deployment manifest
  newTag: to-be-replaced

然后,在 Project Repo 中的 GitHub Action 工作流中,使用 action/checkout@v2 操作拉取远程 Infrastructure 仓库。然后添加 imranismail/setup-kustomize@v1 操作并使用它来替换图像选项卡。然后将更改推送回 Infrastructure 仓库。以下示例,请根据您的情况进行修改:

build steps here

deploy:
  needs: build
  runs-on: ubuntu-latest

  steps:
  - name: Checkout remote repo
    uses: actions/checkout@v2
    with:
      repository: {your github repo}
      token: ${{ secrets.INFRA_REPO_TOKEN }}
      path: infra-repo

  - name: Setup Kustomize
    uses: imranismail/setup-kustomize@v1
    with:
      kustomize-version: "3.6.1"

  - name: Switch out image tag
    run: |
      cd infra-repo/{repo name}
      kustomize edit set image {image name}:{tag}

  - name: Commit and push
    run: |
      cd infra-repo/{repo name}
      git config --local user.email [email protected]
      git config --local user.name github-actions
      git commit -am "updates image tag"
      git push

这些相关链接还应为您提供正确构建工作流程所需的信息:

相关内容