我已经添加了 github 操作来为每个最新提交构建一个 docker 镜像并将其推送到 azure 中的容器注册表。
我们已经创建了 yaml 文件,用于将 docker 镜像部署到 Azure 上的 kubernetes。并将 flux 部署到 中,以便在 yaml 文件发生任何更改时自动同步。
如何设置通量当有新构建时从容器注册表获取最新的图像?
答案1
这描述了一种解决方案,您将 yaml 文件保存在与保存项目代码的存储库分开的 GitHub 存储库中。因此,这两个存储库是:
- 项目 GitHub 仓库
- 基础设施 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
这些相关链接还应为您提供正确构建工作流程所需的信息: