问题描述
正在尝试使用GitOps进行操作,他有一个包含Kubernetes清单和不同应用程序仓库的配置仓库。
1. 应用程序仓库的CI构建Docker镜像并推送到镜像仓库。
2. 应用程序仓库的CI使用新构建的镜像标签提交到配置仓库。
3. GitOps CD(如ArgoCD)监听配置仓库,并将其部署(手动/自动)到Kubernetes集群。
用户想知道这样做是否正确。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
是的,这样做是正确的。不过,你可以考虑使用镜像摘要(image digest)而不是镜像标签(image tags)。因为摘要是根据内容生成的,是不可变的,而标签可能会被更新(有意或无意地)。
你可以使用以下多种工具来更新清单:
– 使用 yq:
yq write \
--inplace deployment.yaml \
'spec.template.spec.containers(name==myappname).image' \
gcr.io/my-image-repository/myappname:labelOrDigest
方案2
版本控制通常是微服务管理中的一个痛点。你可以使用我们的工具 Reliza Hub 来帮助解决这个问题。我们在 Medium 上写了一篇文章介绍如何使用 Reliza Hub 构建 Kubernetes CI/CD 流水线,包括 GitHub Actions 和 ArgoCD:https://medium.com/@taleodor/building-kubernetes-cicd-pipeline-with-github-actions-argocd-and-reliza-hub-e7120b9be870。
简而言之,我们在 Reliza Hub 中准备了一个模板引擎,它根据 Reliza Hub 中的元数据和批准矩阵自动解析版本。然后,它为每个实例的 k8s 定义填充特定版本。
如果你选择其他方式,根据我的经验,通常会变成手动操作。因为在大多数情况下,始终将最新版本推送到生产环境甚至是预发布环境都太冒险了。