前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >云原生下的CI/CD:Argo CD 详解,手把手教你入门

云原生下的CI/CD:Argo CD 详解,手把手教你入门

作者头像
DevOps时代
发布2022-06-16 12:42:56
7.6K1
发布2022-06-16 12:42:56
举报

1.Argo CD 能解决什么问题

1.1 从 GitOps 说起

GitOps 起源于 Weaveworks 公司在 2017 年发表的一篇博客, GitOps - Operations by Pull Request 。在文中,Alexis 介绍了一种以 Git 为唯一事实来源的部署方式。

在 GitOps 实践中,我们需要将软件设施定义在 Git 仓库中进行管理。其中的软件设施,包括 IaaS、Kubernetes 这样的基础设施,也包括应用本身。每个人都可以通过提交 Pull Request 来修改软件设施,然后通过自动化的程序执行这种修改。

这种方式使得每个人都可以专注于开发新的功能,而不用陷入繁琐的安装、变更、迁移等运维工作。同时,整个过程具有完整的操作记录和权限审批管理。

1.2 Argo CD 能落地 GitOps

Argo CD 是以 Kubernetes 为基础设施的 GitOps 持续部署工具。下面是来自 Argo CD 社区的原理图:

  1. Argo CD 从 Git Repo 拉取应用的配置,部署在 Kubernetes 集群中。
  2. 当有人新增功能时,提交一个 Pull Requests 到 Git Repo 修改应用的部署配置,等待合并。
  3. 在 Pull Requests 合并之后,通过 Webhook 触发 Argo CD 执行更新操作。
  4. 应用得到更新,发送通知

理解起来很容易,将运维过程自动化,持续的部署。

1.3 强大而易扩展的 Argo CD

对于一般的 Kubernetes 运维场景,上面描述的功能是够用的。但是如果是复杂场景,涉及多云、多平台、多中间件,也是需要考虑的。

在 Argo CD 的处理逻辑中,定义了四个组件:

  • Event Source,接入各种事件消息
  • Sensor,将消息转换为触发的动作
  • Eventbus,消息订阅路由系统
  • Trigger,触发外部的实际动作

对于运维人员,需要了解的主要是两点:

  • Argo CD 可以处理什么事件? AMQP、AWS SNS、AWS SQS、Cron Schedules、GCP PubSub、GitHub、GitLab、HDFS、File Based Events、Kafka、Minio、NATS、MQTT、K8s Resources、Slack、NetApp StorageGrid、Webhooks、Stripe、NSQ、Emitter、Redis、Azure Events Hub
  • Argo CD 可以处理执行哪些动作? Argo Workflows、Standard K8s Objects、HTTP Requests、AWS Lambda、NATS Messages、Kafka Messages、Slack Notifications、Argo Rollouts CR、Custom / Build Your Own Triggers、Apache OpenWhisk

2. 在 Kubernetes 上部署 Argo CD

  • 新建命名空间,部署 Argo CD

这里选择当前发布的最新版本: 1.8.3

代码语言:javascript
复制
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 用于生产环境。

  • 将服务改为 NodePort 类型,方便访问
代码语言:javascript
复制
kubectl patch svc argocd-server -p '{"spec": {"type": "NodePort"}}' -n argocd
  • 查看服务
代码语言:javascript
复制
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
  • 查看 admin 账户密码
代码语言:javascript
复制
kubectl get pod -n argocd |grep argocd-server
argocd-server-7d597d9bcd-6nzct        1/1     Running   0          22m
代码语言:javascript
复制
这里 admin 的密码就是 Pod 的名字: argocd-server-7d597d9bcd-6nzct 。
  • 登录 Argo CD UI 页面,打开页面 http://{HOST_IP}:31808

使用账户: admin,密码: argocd-server-7d597d9bcd-6nzct 进行登录。

3. 安装 CLI 工具

  • 下载 CLI 命令行工具

这里以 Linux 为例进行安装:

代码语言:javascript
复制
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
  • 登录 Kubernetes 集群上部署的 Argo CD

将 HOST_IP 替换为主机的 IP 地址,使用 CLI 登录集群。

代码语言:javascript
复制
argocd login {HOST_IP}:31808 --username admin --password argocd-server-7d597d9bcd-6nzct
'admin' logged in successfullyContext '{HOST_IP}:31808' updated
  • 更新 admin 密码, 方便下次登录
代码语言:javascript
复制
argocd account update-password --account admin --current-password argocd-server-7d597d9bcd-6nzct --new-password password
Password updatedContext '{HOST_IP}:31808' updated

这样 admin 密码就被修改为 password 了。

4. 使用 CLI 创建一个应用

  • 创建一个应用

可以通过 UI 进行创建应用,但为了能通过复制、粘贴快速体验 Argo CD,这里通过 CLI 工具进行创建。

代码语言:javascript
复制
argocd app create guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-server https://kubernetes.default.svc --dest-namespace default

参数说明:

代码语言:javascript
复制
- repo, 指定 Git 仓库- path, 指定部署文件在 Git 仓库中的相对路径- dest-server, 集群的访问地址- dest-namespace, 部署到哪个命名空间

这里 https://github.com/argoproj/argocd-example-apps/tree/master/guestbook 目录下,是一个 deployment 和一个 service 的 yaml 声明。

  • 在页面查看创建的服务

等待一会儿,查看详情,可以看到应用的拓扑图。

  • kubectl 查看创建的服务
代码语言:javascript
复制
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
  • 删除应用,清理环境
代码语言:javascript
复制
argocd app delete guestbook

不仅应用会在 Argo CD 记录中被删除,相关的负载在 Kubernetes 中也会被删除。

5. 总结

本文主要介绍了 Argo CD 非常基础的功能,并通过创建应用对其功能进行了演示。

实际上,Argo CD 的功能并不止于此,比如修改 Git Repo 之后,可以同步到 Kubernetes 中进行更新;修改镜像之后,自动触发更新。从上面的架构图可以看到,通过 Event Source 和 Trigger 可以实现满足很多自动化部署的需求。

另一方面,在更新 Kubernetes 时,Argo CD 还支持 Kustomize、Helm、Ksonnet、Yaml、Json、自定义扩展的资源描述方式,这在使用上会非常方便。

6. 参考

  • https://argoproj.github.io/argo-cd/

来源:https://www.chenshaowen.com/blog/argocd-of-devops-tool-chain.html

2022年9月中旬,DevOps 国际峰会 2022 · 北京站,大咖已悉数到场,火热进行中~

近期好文:

一文读懂测试自动化,这是我看过最全的总结

“DevOps时代”公众号诚邀广大技术人员投稿

投稿邮箱:jiachen@greatops.net,或添加联系人微信:greatops1118。

点个“在看”,少个“bug”

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps时代 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.Argo CD 能解决什么问题
    • 1.1 从 GitOps 说起
      • 1.2 Argo CD 能落地 GitOps
        • 1.3 强大而易扩展的 Argo CD
        • 2. 在 Kubernetes 上部署 Argo CD
        • 3. 安装 CLI 工具
        • 4. 使用 CLI 创建一个应用
        • 5. 总结
        • 6. 参考
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档