Argo CD
一、什么是 Argo CD
Argo CD 是一款基于 **GitOps 模式 **的 Kubernetes 声明式持续交付工具,专为自动化应用程序的部署、更新和回滚而设计。其核心目标是通过将 Git 仓库作为唯一可信源,确保 Kubernetes 集群的实时状态与版本控制的配置始终保持一致。
二、为什么选择 Argo CD
应用程序的定义、配置和环境应该是声明式的,并受版本控制。 应用程序的部署和生命周期管理应该是自动化的、可审计的,并易于理解。
三、Argo CD 架构
1、API服务器
API 服务器是一个 gRPC/REST 服务器,用于公开 Web UI、CLI 和 CI/CD 系统使用的 API。 它的职责如下:
- 应用程序管理和状态报告
- 调用应用程序操作(如同步、回滚、用户自定义操作)
- 存储库和集群凭证管理(存储为 k8s secret)
- 外部身份 Provider 的认证和认证授权
- RBAC 执行
- Git webhook 事件的监听器/转发器
2、存储库服务器
配置清单服务器是一个内部服务,负责维护一个本地缓存,缓存中包含应用程序配置清单的 Git 仓库。 它负责在提供以下输入时生成并返回 Kubernetes 配置清单:
- 版本库 URL
- 修订(提交、标记、分支)
- 应用程序路径
- 模板特定设置:参数、helm values.yaml
3、应用程序控制器
应用程序控制器是一个 Kubernetes 控制器,它能持续监控运行中的应用程序,并将当前的实时状态与所需的目标状态(在软件仓库中指定)进行比较。 它能检测到 "OutOfSync "应用程序状态,并有选择地采取纠正措施。 它负责调用任何用户定义的生命周期事件钩子(PreSync、Sync、PostSync)。
四、Argo CD 的使用
1、要求
- 安装了 kubectl 命令行工具。
- 拥有 kubeconfig 文件(默认位置为
~/.kube/config
)。 - CoreDNS.可通过
microk8s enable dns && microk8s stop && microk8s start
为 microk8s 启用。
2、安装 Argo CD
2.1、创建 argocd 命名空间
kubectl create namespace argocd
这样将创建一个新的命名空间 argocd
,用于存放 Argo CD 服务和应用程序资源
安装配置清单中包含的
ClusterRoleBinding
资源引用了argocd
名称空间。 如果您要将 Argo CD 安装到不同的名称空间,请确保更新名称空间引用。
2.2、部署 Argo CD
wget https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
kubectl apply -n argocd -f install.yaml
2.3、验证部署是否成功
# 检查Argo CD CRD
kubectl get crd | grep argoproj.io
# 查看 pod 状态
kubectl get pods -n argocd
3、下载 Argo CD CLI
这边仅展示下载最新稳定版本
VERSION=$(curl -L -s https://raw.githubusercontent.com/argoproj/argo-cd/stable/VERSION)
curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/download/v$VERSION/argocd-linux-amd64
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
rm argocd-linux-amd64
下载最新版本
curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
rm argocd-linux-amd64
下载具体版本
VERSION=<TAG> # Select desired TAG from https://github.com/argoproj/argo-cd/releases
curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/download/$VERSION/argocd-linux-amd64
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
rm argocd-linux-amd64
4、发布 Argo CD 服务器
默认情况下,Argo CD API 服务器不公开外部 IP。
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'
现在可以通过<节点 IP>:30954 访问 Argo CD
5、获取 Argo CD 密码
admin 账户的初始密码会自动生成,并以明文形式存储在 Argo CD 安装命名空间中名为 argocd-initial-admin-secret
的 secret
中的 password
字段中。可以通过以下命令获取
kubectl -n argocd get secret \
argocd-initial-admin-secret \
-o jsonpath="{.data.password}" | base64 -d
登录后的界面
6、准备 Git 仓库
6.1、创建开源仓库
在 Gitee
上创建项目,名为 Myapp
,开源
6.2、创建资源清单
仓库中创建 yaml
目录,两个子文件分别为 myapp-deployment.yaml
和 myapp-service.yaml
- 目录结构
myapp-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
namespace: devops
labels:
app: myapp
spec:
replicas: 1
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: nginx
image: nginx:latest # 使用官方 Nginx 镜像
ports:
- containerPort: 80 # Nginx 默认监听 80 端口
resources:
limits:
memory: "128Mi"
cpu: "100m"
livenessProbe:
httpGet:
path: / # 检查根路径
port: 80
initialDelaySeconds: 5
periodSeconds: 10
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 10
myapp-service.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-service
namespace: devops
labels:
app: myapp
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30080
protocol: TCP
selector:
app: myapp
sessionAffinity: None
7、使用 Argo CD 部署应用
7.1、通过 UI 界面创建应用程序
7.1.1、点击 + NEW APP
7.1.2、配置 GENERAL
- Application Name:自定义的应用名
- Project Name:可以选择默认创建好的
default
项目 - SYNC POLICY:同步方式,可以选择自动/手动
7.1.3、配置 SOURCE
- Repository URL: 项目的 Git 地址
- Revision: 分支名
- Path: yaml 资源文件所在的相对路径
7.1.4、配置 DESTINATION
- Cluster URL: Kubernetes API Server 的访问地址,由于 Argo CD 和下发应用的 Kubernetes 集群是同一个,因此可以直接使用 http://kubernetes.default.svc 来访问。
- Namespace: 部署应用的命名空间
7.1.5、单击 CREATE
单击 CREATE 后界面如下,状态处于 OutOfSync
:
7.1.6、手动同步
由于设置的是手动同步,因此需要点一下 SYNC
进行同步,在弹出的界面中单击 SYNCHRONIZE
确认同步:
7.1.7、同步完成
7.1.8、应用创建详情
7.2、通过 CLI 创建应用程序
7.2.1、登录 Argo CD 服务器
# 例如我的环境<ArgoCD_Server_Address>就是192.168.112.10:30954
argocd login <ArgoCD_Server_Address>
argocd app create myapp2 \
--repo https://gitee.com/kurosaki01/myapp.git \
--path yaml --dest-server \
https://kubernetes.default.svc \
--dest-namespace devops
7.2.2、使用argocd命令查看创建的应用
argocd app list
argocd app get myapp2
应用程序状态最初处于
OutOfSync
状态,因为应用程序尚未部署,也未创建任何 Kubernetes 资源。
7.2.3、通过 Argo CD CLI 同步状态
argocd app sync myapp2
7.3、使用 yaml 文件创建应用程序
7.3.1、创建资源清单
需要指定部署应用程序的命名空间、API Server 地址、项目名、资源文件路径、Git 仓库地址、分支名等信息
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp3
namespace: argocd
spec:
destination:
namespace: devops # 部署应用的命名空间
server: https://kubernetes.default.svc # API Server 地址
project: default # 项目名
source:
path: yaml # 资源文件路径
repoURL: https://gitee.com/kurosaki01/myapp.git # Git 仓库地址
targetRevision: master # 分支名
kubectl apply -f Argocd-Myapp3.yaml
这里同步的操作还是和之前一样的,要么是UI点击,要么是CLI命令行配置
8、版本升级
8.1、手动同步更改为自动同步
DETAILS --> SYNC POLICY --> ENABLE AUTO-SYNC
8.2、修改 git 仓库中资源清单
修改 nginx 镜像版本
等待一会 Argo CD 会自动更新应用,也可以直接点击REFRESH,Argo CD 会去立即获取最新的资源文件。可以看到此时 myapp3 Deployment 会新创建 v3 版本的 Replicaset,v3 版本的 Replicaset 会创建并管理 v3 版本的 Pod(我这里之所以不是v2版本是因为之前有一次部署失败了)。
9、版本回滚
9.1、查看历史版本
升级到v3后会发现剩余的两个版本的 rs 并没有被删除,这是为了方便我们进行回滚
单击 HISTORY AND ROLLBACK 查看历史记录
9.2、回滚 v1 版本
选择 v1 版本右上角,单击 Rollback
在回滚的时候需要禁用 AUTO-SYNC 自动同步,点击 OK 确认即可:
等待一会可以看到此时已经回滚成功,此时 Pod 是 v1 版本的,并且由于此时线上的版本并不是 Git 仓库中最新的版本,因此此时同步状态是 OutOfSync:
kubectl get pod myapp-deployment-7797ffb9d5-m2zx7 -n devops -o jsonpath='{.spec.containers[*].image}'
至此最基础的Argo CD 已经过了一遍,后面有更深入理解了再更新
Argo CD的更多相关文章
- Argo CD使用指南:如何构建一套完整的GitOps?
随着Kubernetes继续将自己确立为容器编排的行业标准,为你的应用和工具找到使用声明式模型的有效方法是成功的关键.在这篇文章中,我们将在AWS中建立一个K3s Kubernetes集群,然后使用A ...
- Linkerd 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用
Linkerd 2.10 系列 快速上手 Linkerd v2.10 Service Mesh(服务网格) 腾讯云 K8S 集群实战 Service Mesh-Linkerd2 & Traef ...
- 基于 Jenkins + Kubernetes + Argo CD 的完整 DevOps 流程记录(1) - 环境部署
一.环境准备 1.1 镜像仓库 整套 DevOps 流程使用 Harbor 作为内部镜像仓库,所有构建产物(镜像)都会推送到 Harbor,以备后续进行项目部署.Harbor 从 2.x 版本开始支持 ...
- Argo 项目加入 CNCF 孵化器 | 云原生生态周报 Vol. 45
作者 | 陈洁.高相林.陈有坤.敖小剑 业界要闻 Argo 项目加入 CNCF 孵化器 Argo 项目是一组 Kubernetes 原生工具,用于运行和管理 Kubernetes 上的作业和应用程序. ...
- 云原生流水线 Argo Workflow 的安装、使用以及个人体验
注意:这篇文章并不是一篇入门教程,学习 Argo Workflow 请移步官方文档 Argo Documentation Argo Workflow 是一个云原生工作流引擎,专注于编排并行任务.它的特 ...
- Casbin权限模型
权限框架casbin1.概述Casbin是一个强大的.高效的开源访问控制框架,其权限管理机制支持多种访问控制模型. Casbin支持以下编程语言: Casbin可以做到:支持自定义请求的格式,默认的请 ...
- Linkerd 2.10(Step by Step)—使用 Debug Sidecar,注入调试容器来捕获网络数据包
Linkerd 2.10 系列 快速上手 Linkerd v2.10 Service Mesh 腾讯云 K8S 集群实战 Service Mesh-Linkerd2 & Traefik2 部署 ...
- Linkerd 2.10(Step by Step)—设置服务配置文件
Linkerd 2.10 系列 快速上手 Linkerd v2.10 Service Mesh 腾讯云 K8S 集群实战 Service Mesh-Linkerd2 & Traefik2 部署 ...
- Kubernetes集群(RKE)安装ArgoCD排坑
Photo by Pixabay from Pexels Argo CD是一个声明式的,基于Kubernetes的GitOps持续交付工具.更多的细节参考 ArgoCD官网 的说明,这里记录了一些实践 ...
- CICD 流水线就该这么玩系列之一
今天给大家分享的是 DevOps 世界中非常流行的一个 GitOps 工具 - Argo CD.如果你还不知道什么是 GitOps,欢迎留言告诉我,根据热度,我会再写一篇详细讲解 GitOps 的文章 ...
随机推荐
- 浅谈Redis的三种集群策略及应用场景
本文分享自天翼云开发者社区<浅谈Redis的三种集群策略及应用场景>,作者:段林 Redis提供了三种集群策略: 1.主从模式:这种模式⽐较简单,主库可以读写,并且会和从库进⾏数据同步,这 ...
- 天翼云VPC支持专线健康检查介绍
本文分享自天翼云开发者社区<天翼云VPC支持专线健康检查介绍>,作者:汪****波 天翼云支持本地数据中心IDC(Internet Data Center)通过冗余专线连接到天翼云云上专有 ...
- PHP简介与开发环境搭建
PHP简介与开发环境搭建 一.PHP简介 PHP,全称PHP: Hypertext Preprocessor(超文本预处理器),是一种广泛使用的开源服务器端脚本语言,尤其适合Web开发.PHP由Ras ...
- THUSC2024 & APIO2024 游记
第二次联赛以上的比赛. Day-n lxs 突然通知:从五月七日开始要去镇海中学集训(这也意味着 THUSC-APIO 中间出去玩的时间没了 ),很神秘.这是属于高二那一届考的联考连通块,不知道为什么 ...
- kali linux脚本小子速成
$如果你耐心看十分钟,你会惊奇的发现我讲的是一堆废话,别急.kali linux博大精深,绝对不是十分钟就能学的完,真正的好东西永远都是夹在屎里,想学你想要的,拿出你的决心来. kali linux用 ...
- 从龟速乘到 $Miller-Rabin$ 算法(数论算法总结)
发现自己竟然菜到不太会龟速乘,所以把 \(Miller-Rabin\) 算法所需要用到的算法全学了一遍-- 龟速乘 龟速乘是一种 \(O(\log n)\) 的乘法计算方法. 考虑有时普通乘法取模会爆 ...
- CF145C Lucky Subsequence 题解
首先,我们对这个幸运数进行分析,发现: \(10^9\) 以内只有 \(1023\) 个幸运数,即 \(\sum\limits_{i=0}^92^i\) 个. 考虑对幸运数和非幸运数分类讨论. 幸运数 ...
- MOS管的寄生电容
我们经常看到,在电源电路中,功率MOS管的G极经常会串联一个小电阻,几欧姆到几十欧姆不等,那么这个电阻用什么作用呢? 这个电阻的作用有2个作用:限制G极电流,抑制振荡. 限制G极电流MOS管是由电压驱 ...
- MediaToolkit:.NET 开发者的多媒体处理工具
MediaToolkit:.NET 开发者的多媒体处理工具 在开发过程中处理音频和视频文件是许多应用程序的重要功能.MediaToolkit 是一个强大的 .NET 库,帮助开轻松处理这些多媒体文件. ...
- 【目标检测】一、初始的R-CNN与SVM
1.流程 为什么要用SVM而不是CNN最后一层的softmax? 取什么模型必然是有标准衡量,这个流程取得是书上[4]写的,作者说他得实验证明SVM比FC的mAP要高,所以我流程暂且这样画了. R-C ...