惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
博客园 - Franky
博客园 - 三生石上(FineUI控件)
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Apple Machine Learning Research
Apple Machine Learning Research
云风的 BLOG
云风的 BLOG
人人都是产品经理
人人都是产品经理
博客园 - 【当耐特】
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
爱范儿
爱范儿
罗磊的独立博客
博客园_首页
美团技术团队
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
V
Visual Studio Blog
T
Tailwind CSS Blog

陈少文的网站

巨变与机遇的未来十年 Kubernetes 平台管理软件压力测试方案 使用镜像部署 Hexo 静态页面 终于等到你 - GitHub 镜像仓库服务(ghcr.io) 一起来学 Go --(6)Interface 一起来学 Go --(5)Goroutine 和 Channel 什么是函数式编程 如何在 Kubernetes 集群集成 Kata 柯里化与偏函数 使用 PyGithub 自动创建 Label 软件产品是团队能力的输出 Helm 2 、Helm 3 比较 IoT 变现 Kubernetes 中的 DNS 服务 国内的 Helm 镜像源 Harbor 使用自签证书支持 Https 访问 DevOps 工具链之 Prow 如何使用 kfctl 安装 Kubeflow VS Code 无法下载 Go 插件的工具包 工程师更应具有服务精神 你不知道的 Docker 使用技巧 使用 Docker 运行 Tensorflow 论中国 什么是左移 如何清空 Git 仓库全部历史记录 一禅小和尚 有风吹过厨房 时间的玫瑰 如何在 CentOS 安装 GPU 驱动 开发 Tips(19)
DevOps 工具链之 Argo CD
微信公众号 · 2021-02-04 · via 陈少文的网站

Please enable Javascript to view the contents

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

1
2
kubectl create namespace argocd
kubectl 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 类型,方便访问
1
kubectl patch svc argocd-server -p '{"spec": {"type": "NodePort"}}' -n argocd
  • 查看服务
1
2
3
4
5
6
7
8
9
kubectl -n argocd get svc

NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
argocd-dex-server       ClusterIP   10.233.34.191   <none>        5556/TCP,5557/TCP,5558/TCP   5m37s
argocd-metrics          ClusterIP   10.233.54.3     <none>        8082/TCP                     5m36s
argocd-redis            ClusterIP   10.233.18.86    <none>        6379/TCP                     5m36s
argocd-repo-server      ClusterIP   10.233.3.171    <none>        8081/TCP,8084/TCP            5m36s
argocd-server           NodePort    10.233.61.3     <none>        80:31808/TCP,443:30992/TCP   5m36s
argocd-server-metrics   ClusterIP   10.233.36.228   <none>        8083/TCP                     5m36s
  • 查看 admin 账户密码
1
2
3
kubectl get pod -n argocd |grep argocd-server

argocd-server-7d597d9bcd-6nzct        1/1     Running   0          22m

这里 admin 的密码就是 Pod 的名字: argocd-server-7d597d9bcd-6nzct 。

  • 登录 Argo CD UI 页面,打开页面 http://{HOST_IP}:31808

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

3. 安装 CLI 工具

  • 下载 CLI 命令行工具

这里以 Linux 为例进行安装:

1
2
curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/v1.8.3/argocd-linux-amd64
chmod +x /usr/local/bin/argocd
  • 登录 Kubernetes 集群上部署的 Argo CD

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

1
2
3
4
argocd login {HOST_IP}:31808 --username admin --password argocd-server-7d597d9bcd-6nzct

'admin' logged in successfully
Context '{HOST_IP}:31808' updated
  • 更新 admin 密码, 方便下次登录
1
2
3
4
argocd account update-password --account admin --current-password argocd-server-7d597d9bcd-6nzct --new-password password

Password updated
Context '{HOST_IP}:31808' updated

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

4. 使用 CLI 创建一个应用

  • 创建一个应用

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

1
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 查看创建的服务
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
kubectl get all -n default
NAME                                READY   STATUS    RESTARTS   AGE
pod/guestbook-ui-65b878495d-wjmxh   1/1     Running   0          60s

NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/guestbook-ui   ClusterIP   10.233.55.230   <none>        80/TCP    61s
service/kubernetes     ClusterIP   10.233.0.1      <none>        443/TCP   12d

NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/guestbook-ui   1/1     1            1           60s

NAME                                      DESIRED   CURRENT   READY   AGE
replicaset.apps/guestbook-ui-65b878495d   1         1         1       60s
  • 删除应用,清理环境
1
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. 参考


微信公众号