在现在的云原生世界里面 GitOps 不断的被提及,这种持续交付的模式越来越受到了大家的青睐,我们前面也有文章详细讲解了 GitOps 的相关概念,在网上也可以找到很多关于它的资源,但是关于 GitOps 相关的工作流实践的示例却并不多见,我们这里就将详细介绍一个使用示例,希望对大家实践 GitOps 有所帮助。
介绍
上图是当前示例中的 GitOps 工作流程。GitLab 和 Argo CD 是两个主要的核心组件:
Argo CD 是一个声明式、GitOps 持续交付的 Kubernetes 工具,它的配置和使用分非常简单,并且自带一个简单易用的 Dashboard 页面,更重要的是 Argo CD 支持 kustomzie、helm、ksonnet 等多种工具。应用程序可以通过 Argo CD 提供的 CRD 资源对象进行配置,可以在指定的目标环境中自动部署所需的应用程序。关于 Argo CD 更多的信息可以查看官方文档了解更多。
GitLab CI 是 GitLab 的持续集成和持续交付的工具,也是非常流行的 CI/CD 工具,相比 Jenkins 更加轻量级,更重要的是和 GitLab 天然集成在一起的,所以非常方便。
Argo CD 安装
当前前提条件是有一个可用的 Kubernetes 集群,通过 kubectl 可以正常访问集群,为了访问 Argo CD 的 Dashboard 页面,我们可以通过 Ingress 来暴露服务,为此需要在 Kubernetes 中安装一个 Ingress Controller,我这里已经提前安装了 ingress-nginx,接下来我们将 Helm3 来安装 Argo CD,关于 Helm 以及 ingress-nginx 的使用我们前面的文章中已经多次提到,这里就不再详细介绍他们的使用了。
首先创建一个 argocd 的命名空间:
$ kubectl create ns argocd
然后添加 argocd 的 chart 仓库地址:
$ helm repo add argo https://argoproj.github.io/argo-helm
接下来我们就可以使用 Helm 安装 Argo CD 了:
$ helm install argocd -n argocd argo/argo-cd --values values.yaml
其中 values.yaml 文件如下所示,用来定制安装的 Argo CD:
server: ingress: enabled: true annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/force-ssl-redirect: "true" nginx.ingress.kubernetes.io/ssl-passthrough: "true" nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" hosts: - argocd.k8s.local
执行上面的安装命令后,Argo CD 就会被安装在 argocd 命名空间之下,可以在本地 /etc/hosts 中添加一个映射,将 argocd.k8s.local 映射到 ingress-nginx 所在的节点即可:
$ helm ls -n argocdNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSIONargocd argocd 2 2020-07-10 15:26:38.259258 +0800 CST deployed argo-cd-2.5.0 1.6.1$ kubectl get pods -n argocdNAME READY STATUS RESTARTS AGE