时间:2025-04-21 19:13
人气:
作者:admin
Argo CD 是一款基于 GitOps 模式 的 Kubernetes 声明式持续交付工具,专为自动化应用程序的部署、更新和回滚而设计。其核心目标是通过将 Git 仓库作为唯一可信源,确保 Kubernetes 集群的实时状态与版本控制的配置始终保持一致。
应用程序的定义、配置和环境应该是声明式的,并受版本控制。 应用程序的部署和生命周期管理应该是自动化的、可审计的,并易于理解。

API 服务器是一个 gRPC/REST 服务器,用于公开 Web UI、CLI 和 CI/CD 系统使用的 API。 它的职责如下:
配置清单服务器是一个内部服务,负责维护一个本地缓存,缓存中包含应用程序配置清单的 Git 仓库。 它负责在提供以下输入时生成并返回 Kubernetes 配置清单:
应用程序控制器是一个 Kubernetes 控制器,它能持续监控运行中的应用程序,并将当前的实时状态与所需的目标状态(在软件仓库中指定)进行比较。 它能检测到 "OutOfSync "应用程序状态,并有选择地采取纠正措施。 它负责调用任何用户定义的生命周期事件钩子(PreSync、Sync、PostSync)。
~/.kube/config)。microk8s enable dns && microk8s stop && microk8s start 为 microk8s 启用。kubectl create namespace argocd

这样将创建一个新的命名空间 argocd,用于存放 Argo CD 服务和应用程序资源
安装配置清单中包含的
ClusterRoleBinding资源引用了argocd名称空间。 如果您要将 Argo CD 安装到不同的名称空间,请确保更新名称空间引用。
wget https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
kubectl apply -n argocd -f install.yaml

# 检查Argo CD CRD
kubectl get crd | grep argoproj.io
# 查看 pod 状态
kubectl get pods -n argocd

这边仅展示下载最新稳定版本
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
默认情况下,Argo CD API 服务器不公开外部 IP。
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'

现在可以通过<节点 IP>:30954 访问 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

登录后的界面

在 Gitee 上创建项目,名为 Myapp ,开源

仓库中创建 yaml 目录,两个子文件分别为 myapp-deployment.yaml 和 myapp-service.yaml

myapp-deployment.yamlapiVersion: 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.yamlapiVersion: 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

default 项目


单击 CREATE 后界面如下,状态处于 OutOfSync:

由于设置的是手动同步,因此需要点一下 SYNC 进行同步,在弹出的界面中单击 SYNCHRONIZE 确认同步:



# 例如我的环境<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

argocd app list
argocd app get myapp2

应用程序状态最初处于
OutOfSync状态,因为应用程序尚未部署,也未创建任何 Kubernetes 资源。
argocd app sync myapp2


需要指定部署应用程序的命名空间、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命令行配置

DETAILS --> SYNC POLICY --> ENABLE AUTO-SYNC

修改 nginx 镜像版本

等待一会 Argo CD 会自动更新应用,也可以直接点击REFRESH,Argo CD 会去立即获取最新的资源文件。可以看到此时 myapp3 Deployment 会新创建 v3 版本的 Replicaset,v3 版本的 Replicaset 会创建并管理 v3 版本的 Pod(我这里之所以不是v2版本是因为之前有一次部署失败了)。

升级到v3后会发现剩余的两个版本的 rs 并没有被删除,这是为了方便我们进行回滚
单击 HISTORY AND ROLLBACK 查看历史记录

选择 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 已经过了一遍,后面有更深入理解了再更新
Ubuntu离线环境部署Kubernetes v1.31.3(ARM64)