阶段四:基于ArgoCD实现服务的自动化发布

一、课程目标

二、ArgoCD 概述

ArgoCD 是一个面向 Kubernetes 的声明式持续交付工具,属于 CNCF 生态中的热门 GitOps 工具。

它的核心思想是:把应用部署配置统一放到 Git 仓库中,以 Git 中的内容作为系统期望状态,再由 ArgoCD 持续监听仓库与集群状态,自动完成同步、修正和发布。

传统发布方式往往依赖人工执行 kubectl applyhelm upgrade 或脚本发布,存在流程不可审计、环境不一致、误操作多等问题。

ArgoCD 通过 GitOps 模式把“发布动作”转换为“提交配置变更”,实现发布标准化、可追踪和可回滚。

三、ArgoCD 的应用场景

四、ArgoCD 原理

ArgoCD 的核心原理可以概括为三句话:

ArgoCD 的核心组件包括:

ArgoCD 的工作流程如下:

1. 开发或运维将部署配置提交到 Git 仓库 2. ArgoCD 监听 Git 仓库中的分支、目录或版本变化 3. Repo Server 拉取配置并生成目标清单 4. Application Controller 获取集群当前资源状态 5. ArgoCD 对比 Git 期望状态与集群实际状态 6. 如果发现差异,则将应用状态标记为 OutOfSync 7. 在手动同步或自动同步模式下,将最新配置下发到 Kubernetes 8. 同步完成后状态变为 Synced;如启用 Self Heal,还可以自动修复人为改动

五、ArgoCD 最佳实践

1. 环境准备

2. 安装 ArgoCD

image
#创建命名空间
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

注意事项:

kubectl get pods -n argocd
kubectl get svc -n argocd

注意事项:

kubectl patch svc argocd-server -n argocd -p '{"spec":{"type":"NodePort"}}'
kubectl get svc argocd-server -n argocd
NAME            TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
argocd-server   NodePort   10.105.189.170   <none>        80:32711/TCP,443:30559/TCP   41m

注意事项:

3. 获取管理员密码并登录

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d

命令作用:

执行结果:

关键参数:

参数说明
-n普通指定 Kubernetes 命名空间 argocd,命令只在该命名空间内查找或修改资源。
-o普通指定输出格式,后面的 jsonpath={.data.password} 决定显示为表格、YAML、JSON 或自定义列。
jsonpath={.data.password}普通kubectl 输出格式 jsonpath={.data.password};例如 yaml 适合查看完整资源定义,json 适合脚本处理。
-d核心-d 的含义取决于当前命令,需要结合主命令判断,不能直接理解成后台运行。

注意事项:

k8s-app-config/ dev/ test/ prod/




![](/assets/feishu-images/0a8384e01b1e8b30b0e2cd68.png)

注意事项:


**注意事项:**



![](/assets/feishu-images/9aa5aa170998c9aab2910833.png)

![](/assets/feishu-images/f5159570ad69476aaf1ad542.png)

![](/assets/feishu-images/bf2f99866f538b3e4ec43572.png)

![](/assets/feishu-images/b70f14113ecc797e9eb1c94d.png)

![](/assets/feishu-images/3ded1786f2af5a8a51f49a40.png)

![](/assets/feishu-images/9948056f812cdde64f32b377.png)



![](/assets/feishu-images/f45424df719d3a0f9f3480bb.png)


![](/assets/feishu-images/c39e1430be7da1cfa4591f0d.png)

data: registries.conf: | registries: metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"v1","kind":"ConfigMap","metadata":{"annotations":{},"labels":{"app.kubernetes.io/name":"argocd-image-updater-config","app.kubernetes.io/part-of":"argocd-image-updater-controller"},"name":"argocd-image-updater-config","namespace":"argocd"}} labels:

#创建gitlab仓库登录秘钥


**注意事项:**




metadata:

spec:

  commonUpdateSettings:

  writeBackConfig:

    gitConfig:


  applicationRefs:


      images:

注意事项:

本文由飞书云文档同步生成。涉及命令、SQL、配置示例时,请以飞书源文档和实际环境执行结果为准。