GitOps 起源于 Weaveworks 公司在 2017 年发表的一篇博客, GitOps - Operations by Pull Request 。在文中,Alexis 介绍了一种以 Git 为唯一事实来源的部署方式。
在 GitOps 实践中,我们需要将软件设施定义在 Git 仓库中进行管理。其中的软件设施,包括 IaaS、Kubernetes 这样的基础设施,也包括应用本身。每个人都可以通过提交 Pull Request 来修改软件设施,然后通过自动化的程序执行这种修改。
这种方式使得每个人都可以专注于开发新的功能,而不用陷入繁琐的安装、变更、迁移等运维工作。同时,整个过程具有完整的操作记录和权限审批管理。
Argo CD 是以 Kubernetes 为基础设施的 GitOps 持续部署工具。下面是来自 Argo CD 社区的原理图:
理解起来很容易,将运维过程自动化,持续的部署。
对于一般的 Kubernetes 运维场景,上面描述的功能是够用的。但是如果是复杂场景,涉及多云、多平台、多中间件,也是需要考虑的。
在 Argo CD 的处理逻辑中,定义了四个组件:
对于运维人员,需要了解的主要是两点:
这里选择当前发布的最新版本: 1.8.3
kubectl create namespace argocdkubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v1.8.3/manifests/install.yaml
Argo CD 社区还提供了 HA 模式的部署方式,kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v1.8.3/manifests/ha/install.yaml
用于生产环境。
kubectl patch svc argocd-server -p '{"spec": {"type": "NodePort"}}' -n argocd
kubectl -n argocd get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEargocd-dex-server ClusterIP 10.233.34.191 <none> 5556/TCP,5557/TCP,5558/TCP 5m37sargocd-metrics ClusterIP 10.233.54.3 <none> 8082/TCP 5m36sargocd-redis ClusterIP 10.233.18.86 <none> 6379/TCP 5m36sargocd-repo-server ClusterIP 10.233.3.171 <none> 8081/TCP,8084/TCP 5m36sargocd-server NodePort 10.233.61.3 <none> 80:31808/TCP,443:30992/TCP 5m36sargocd-server-metrics ClusterIP 10.233.36.228 <none> 8083/TCP 5m36s
kubectl get pod -n argocd |grep argocd-server
argocd-server-7d597d9bcd-6nzct 1/1 Running 0 22m
这里 admin 的密码就是 Pod 的名字: argocd-server-7d597d9bcd-6nzct 。
使用账户: admin,密码: argocd-server-7d597d9bcd-6nzct 进行登录。
这里以 Linux 为例进行安装:
curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/v1.8.3/argocd-linux-amd64chmod +x /usr/local/bin/argocd
将 HOST_IP
替换为主机的 IP 地址,使用 CLI 登录集群。
argocd login {HOST_IP}:31808 --username admin --password argocd-server-7d597d9bcd-6nzct
'admin' logged in successfullyContext '{HOST_IP}:31808' updated
argocd account update-password --account admin --current-password argocd-server-7d597d9bcd-6nzct --new-password password
Password updatedContext '{HOST_IP}:31808' updated
这样 admin 密码就被修改为 password 了。
可以通过 UI 进行创建应用,但为了能通过复制、粘贴快速体验 Argo CD,这里通过 CLI 工具进行创建。
argocd app create guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-server https://kubernetes.default.svc --dest-namespace default
参数说明:
- repo, 指定 Git 仓库- path, 指定部署文件在 Git 仓库中的相对路径- dest-server, 集群的访问地址- dest-namespace, 部署到哪个命名空间
这里 https://github.com/argoproj/argocd-example-apps/tree/master/guestbook 目录下,是一个 deployment 和一个 service 的 yaml 声明。
等待一会儿,查看详情,可以看到应用的拓扑图。
kubectl get all -n defaultNAME READY STATUS RESTARTS AGEpod/guestbook-ui-65b878495d-wjmxh 1/1 Running 0 60s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/guestbook-ui ClusterIP 10.233.55.230 <none> 80/TCP 61sservice/kubernetes ClusterIP 10.233.0.1 <none> 443/TCP 12d
NAME READY UP-TO-DATE AVAILABLE AGEdeployment.apps/guestbook-ui 1/1 1 1 60s
NAME DESIRED CURRENT READY AGEreplicaset.apps/guestbook-ui-65b878495d 1 1 1 60s
argocd app delete guestbook
不仅应用会在 Argo CD 记录中被删除,相关的负载在 Kubernetes 中也会被删除。
本文主要介绍了 Argo CD 非常基础的功能,并通过创建应用对其功能进行了演示。
实际上,Argo CD 的功能并不止于此,比如修改 Git Repo 之后,可以同步到 Kubernetes 中进行更新;修改镜像之后,自动触发更新。从上面的架构图可以看到,通过 Event Source 和 Trigger 可以实现满足很多自动化部署的需求。
另一方面,在更新 Kubernetes 时,Argo CD 还支持 Kustomize、Helm、Ksonnet、Yaml、Json、自定义扩展的资源描述方式,这在使用上会非常方便。
来源:https://www.chenshaowen.com/blog/argocd-of-devops-tool-chain.html
2022年9月中旬,DevOps 国际峰会 2022 · 北京站,大咖已悉数到场,火热进行中~
近期好文:
“DevOps时代”公众号诚邀广大技术人员投稿
投稿邮箱:jiachen@greatops.net,或添加联系人微信:greatops1118。
点个“在看”,少个“bug”