首页
学习
活动
专区
圈层
工具
发布
50 篇文章
1
kubernetes与velero的第一次尝试
2
在Kubernetes中如何针对Namespace进行资源限制?
3
kubernetes之metrics-server安装与配置
4
kubernetes部署metrics-server
5
Kubernetes1.20.9摘掉一个master节点再重新加入(ETCD需要注意的)
6
Kubernetes 1.17.17升级到1.18.20
7
Kubernetes 1.18.20升级到1.19.12
8
Kubernetes 1.19.12升级到1.20.9(强调一下selfLink)
9
Kubernetes 1.16.15升级到1.17.17
10
使用 kainstall 工具一键部署 kubernetes 高可用集群
11
附034.Kubernetes_v1.21.0高可用部署架构二
12
附016.Kubernetes_v1.17.4高可用部署
13
附022.Kubernetes_v1.18.3高可用部署架构一
14
附024.Kubernetes_v1.18.3高可用部署架构二
15
使用 StatefulSet 部署 etcd 集群
16
Kubernetes 稳定性保障手册 -- 极简版
17
Linux(centos7)离现安装kubernetes1.19.2和docker——组件部分
18
docker register 私有仓库部署 - http模式
19
KubeSphere 开源 KubeEye:Kubernetes 集群自动巡检工具
20
K8S 中的 CPUThrottlingHigh 到底是个什么鬼?
21
全链路分布式跟踪系统 Apache SkyWalking 入门教程
22
pod Evicted的状态究竟是何人所为
23
使用 ezctl 工具部署和管理 Kubernetes 集群
24
Kubernetes部署策略详解
25
kubernetes容器探针检测
26
使用Spring Boot实现动态健康检查HealthChecks
27
真一文搞定 ingress-nginx 的使用
28
K8S备份、恢复、迁移神器 Velero
29
一次关于k8s kubectl top 和 contained ps 不一致的问题探究
30
kubernetes备份恢复之velero
31
使用 Velero 进行集群备份与迁移
32
TKE集群中nginx-ingress使用实践
33
使用velero进行kubernetes灾备
34
Kubernetes 映射外部服务
35
运维体系建设套路
36
k8s解决pod调度不均衡的问题
37
ingress中虚拟路径解决方案
38
容器下的两地三中心建设
39
k8s集群外的主机访问pod的解决方案
40
k8s基础-健康检查机制
41
k8s基础-标签使用
42
ingress-nginx请求改写
43
nginx ingress server alias 多域名多证书问题
44
JAVA | Java 解决跨域问题 花式解决跨域问题
45
如何通过ingress-nginx实现应用灰度发布?
46
在Kubernetes(k8s)中使用GPU
47
使用 Prometheus-Operator 监控 Calico
48
使用Kubespray部署Kubernetes集群
49
云原生下的CI/CD:Argo CD 详解,手把手教你入门
50
Pod的健康检查机制
清单首页k8s文章详情

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

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”

下一篇
举报
领券