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

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
V
V2EX
博客园 - 【当耐特】
WordPress大学
WordPress大学
爱范儿
爱范儿
美团技术团队
宝玉的分享
宝玉的分享
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
小众软件
小众软件
量子位
Hugging Face - Blog
Hugging Face - Blog
B
Blog RSS Feed
Recorded Future
Recorded Future
Engineering at Meta
Engineering at Meta
雷峰网
雷峰网
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
M
MIT News - Artificial intelligence
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 聂微东
H
Hackread – Cybersecurity News, Data Breaches, AI and More
腾讯CDC
大猫的无限游戏
大猫的无限游戏
Jina AI
Jina AI
博客园 - 叶小钗
GbyAI
GbyAI
Y
Y Combinator Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
F
Full Disclosure
G
Google Developers Blog
D
Docker
T
Tailwind CSS Blog
C
Check Point Blog
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
T
The Blog of Author Tim Ferriss
B
Blog
博客园 - 三生石上(FineUI控件)
博客园 - Franky
H
Help Net Security
MyScale Blog
MyScale Blog
U
Unit 42
D
DataBreaches.Net
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
I
InfoQ
阮一峰的网络日志
阮一峰的网络日志
The GitHub Blog
The GitHub Blog
L
LangChain Blog
有赞技术团队
有赞技术团队
Martin Fowler
Martin Fowler
Microsoft Security Blog
Microsoft Security 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) 使用 Velero 备份 Kubernetes 集群 Kubernetes Cheat Sheet 开发 Tips(18) 如何构建一个 Java 工程 开发 Tips(17) KubeSpray 安装 Kubernetes 报错 ip in ansible_all_ipv4_addresses 基于 Kubernetes 和 Jenkins 搭建自动化测试系统 在 Kubernetes 上动态创建 Jenkins Slave 使用 Jenkins 进行服务拨测 开发 Tips(16) Kubernetes 签发 Ingress 证书及日常故障运维 Kubernetes 中 Deployment 的基本操作 Kubernetes 中的证书 如何使用 KubeBuilder 开发一个 Operator Kubernetes 1.6.0 安装问题汇总 镜像管理工具 -- Harbor 开发 Tips(15) Docker 如何拉取镜像 开发 Tips(14) 使用 Helm 安装 harbor 开发 Tips(13) 使用 S2I 构建云原生应用 在 Kubernetes 中使用 emptyDir、hostPath、localVolume 开发 Tips(12) 开发 Tips(11) 代码质量分析工具 SonarQube 使用 Kubeadm 安装 Kubernetes 集群 一起来学 Go --(4)常用函数 Kubernetes 中的 Ceph Kubernetes 之 Volumes Kubernetes 之 Labels、Selectors 开发 Tips(10) 开源正在重构商业模式 Kubernetes 之网络 Kubernetes 之 API 使用 Helm 和 Operator 快速部署 Prometheus Kubernetes 复杂有状态应用管理框架 -- Operator Kubernetes 的包管理器 -- Helm 一起来学 Go --(3)Go Modules 如何一步一步地优化博客方案 kubectl 实用指南 Kubernetes 中的基本概念 搭建远程 Kubernetes 开发环境 大公司和小公司的 ToB 思路 开发 Tips(9) Go 入门指南 一起来学 Go --(2)数据与逻辑结构 如何预防 Web 富文本中的 XSS 攻击 django-xss-cleaner 云工作时代 一起来学 Go --(1)背景与特点 SaaS 开发团队的不同阶段 你不知道的 Git 使用技巧 输出既服务 微服务设计 继续奔跑 开发 Tips(8) 从账户安全到二次验证 Django 性能之数据库查询优化 Django 性能之分库分表 敏捷开发之研发流程 打造一致性的团队 开发 Tips(7) Pytest 进阶学习之 Mock PaaS 部署之 buildpack Go 开发配置 领域输出才是 PaaS 的核心竞争力 Pytest 入门学习 开发 Tips(6) 如何使用 Jenkins、Docker、GitLab 搭建 Django 自动化部署流程
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. 参考


微信公众号