首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >从 0 到企业级私有云 | 跑通 GitOps 了:ArgoCD + Gitea 实战全记录

从 0 到企业级私有云 | 跑通 GitOps 了:ArgoCD + Gitea 实战全记录

作者头像
用户12454170
发布2026-05-06 20:55:15
发布2026-05-06 20:55:15
210
举报

本文共 1200+ 字,阅读约需 6 分钟。 当你的集群、镜像仓库、CI 都已经完成之后 下一步不是“继续部署”,而是: 👉 让部署自动发生


一、本篇在整个实验中的位置

在前面的实验中,已经完成:

  • ✅ Kubernetes 集群搭建
  • ✅ Harbor 私有镜像仓库
  • ✅ Jenkins 持续集成(CI)

但现在的部署流程还是:

代码语言:javascript
复制
Jenkins 构建 → 手动 kubectl apply 

👉 本质问题:

  • 人工操作(不可靠)
  • 不可追溯(谁改的?)
  • 不可回滚(很致命)

✅ 本篇解决什么?

我们要实现:

代码语言:javascript
复制
Git → ArgoCD → Kubernetes

👉 最终效果:

只需要改 Git,系统自动部署


二、踩坑记录:ArgoCD 安装直接失败

部分人做到这里会卡住👇

代码语言:javascript
复制
The CustomResourceDefinition "applicationsets.argoproj.io" is invalid:
metadata.annotations: Too long: may not be more than 262144 bytes

🔍 本质原因

问题不是 YAML 错,而是:

👉 Kubernetes 限制 annotation 最大 256KB

之前使用的是:

代码语言:javascript
复制
kubectl apply

它会自动做一件事:

代码语言:javascript
复制
写入 last-applied-configuration

但:

👉 ArgoCD 的 CRD 非常大(尤其 applicationsets)

最终导致:

代码语言:javascript
复制
超过 256KB → API 拒绝

✅ 正确姿势

代码语言:javascript
复制
kubectl create -f https://ghfast.top/https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml -n argocd

📌 核心差异

命令

行为

apply

写 annotation ❌

create

不写 annotation ✅


💡 经验总结

遇到 CRD 超大组件(ArgoCD / Istio),优先避免使用 kubectl apply


三、部署 ArgoCD


1️⃣ 等待组件启动

代码语言:javascript
复制
kubectl get pod -n argocd

👉 判断标准:

  • 全部 Running
  • 没有 CrashLoopBackOff

2️⃣ 暴露 UI(实验环境推荐 NodePort)

代码语言:javascript
复制
kubectl edit svc argocd-server -n argocd

修改:

代码语言:javascript
复制
type: NodePort

代码语言:javascript
复制
kubectl get svc -n argocd

访问:

代码语言:javascript
复制
https://<NodeIP>:<NodePort>

⚠️ 常见坑

  • 浏览器提示不安全(自签证书)→ 直接继续访问
  • 访问不到 → 检查防火墙 / 安全组

3️⃣ 获取登录密码

代码语言:javascript
复制
kubectl get secret argocd-initial-admin-secret -n argocd \
-o jsonpath="{.data.password}" | base64 -d

账号:

代码语言:javascript
复制
admin

四、GitOps 核心:搭建代码仓库(Gitea)

为了符合“私有云实验”主线:

👉 我们继续使用自建 Git 服务:Gitea


1️⃣ 部署 Gitea

代码语言:javascript
复制
docker run -d \
  --name gitea \
  -p 3000:3000 -p 222:22 \
  -v /data/gitea:/data \
  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/gitea/gitea:1.25.4

访问并进行初始配置:

代码语言:javascript
复制
http://你的IP:3000

2️⃣ 创建 GitOps 仓库

代码语言:javascript
复制
gitops-demo/
└── nginx/
    ├── deployment.yaml
    └── service.yaml

⚠️ 这里是高频踩坑点

之前有一个报错:

代码语言:javascript
复制
app path does not exist

👉 本质原因:

ArgoCD 中填写的 Path 和仓库实际路径不一致


五、ArgoCD 对接 Git(关键细节)


方式一:SSH(推荐)

Gitea 添加公钥

ArgoCD 对接私钥

⚠️ 注意点(非常关键)

  • 私钥必须是完整格式(含 BEGIN/END)
  • Git 地址必须用 SSH 格式:
代码语言:javascript
复制
ssh://git@IP:2222/xxx/gitops-demo.git

方式二:HTTP(备用)

六、创建应用

进入 ArgoCD UI:


填写参数

关键字段:

代码语言:javascript
复制
Name: nginx-demo
Repo: Git 地址
Path: nginx
Cluster: 默认
Namespace: default
Sync: Automatic


七、验证 GitOps


1️⃣ 初始部署

代码语言:javascript
复制
kubectl get pod
kubectl get svc

2️⃣ 修改 Git(核心实验)

代码语言:javascript
复制
replicas: 2 → 3
代码语言:javascript
复制
git commit -am "scale to 3"
git push

3️⃣ 观察变化

代码语言:javascript
复制
kubectl get pod

🎯 强调一句

❗ 整个过程,没有执行任何 kubectl apply


八、GitOps 的本质


传统模式

代码语言:javascript
复制
人 → kubectl → 集群

GitOps 模式

代码语言:javascript
复制
Git → ArgoCD → 集群

👉 核心变化:

维度

改变

操作入口

人 → Git

状态来源

集群 → Git

部署方式

手动 → 自动


九、接入 Jenkins

现在已经具备:

  • Jenkins(CI)
  • Harbor(镜像)
  • ArgoCD(CD)

✅ 完整链路:

代码语言:javascript
复制
代码提交
↓
Jenkins 构建镜像
↓
推送 Harbor
↓
修改 Git(版本号)
↓
ArgoCD 自动部署

十、常见问题(实战价值)


❓ 应用不同步

代码语言:javascript
复制
argocd app sync nginx-demo

❓ 应用报错

代码语言:javascript
复制
argocd app get nginx-demo

❓ Git 拉不下来

重点检查:

  • SSH key
  • 网络
  • 仓库权限

十一、一句话总结

当“部署”不再通过人执行,而是通过 Git 驱动时,你的系统才真正具备工程化能力。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一根头发丝的宽度 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、本篇在整个实验中的位置
    • ✅ 本篇解决什么?
  • 二、踩坑记录:ArgoCD 安装直接失败
    • 🔍 本质原因
    • ✅ 正确姿势
    • 📌 核心差异
  • 三、部署 ArgoCD
    • 1️⃣ 等待组件启动
    • 2️⃣ 暴露 UI(实验环境推荐 NodePort)
    • ⚠️ 常见坑
    • 3️⃣ 获取登录密码
  • 四、GitOps 核心:搭建代码仓库(Gitea)
    • 1️⃣ 部署 Gitea
    • 2️⃣ 创建 GitOps 仓库
    • ⚠️ 这里是高频踩坑点
  • 五、ArgoCD 对接 Git(关键细节)
    • 方式一:SSH(推荐)
    • Gitea 添加公钥
    • ⚠️ 注意点(非常关键)
    • 方式二:HTTP(备用)
  • 六、创建应用
    • 填写参数
  • 七、验证 GitOps
    • 1️⃣ 初始部署
    • 2️⃣ 修改 Git(核心实验)
    • 3️⃣ 观察变化
    • 🎯 强调一句
  • 八、GitOps 的本质
    • 传统模式
    • GitOps 模式
  • 九、接入 Jenkins
    • ✅ 完整链路:
  • 十、常见问题(实战价值)
    • ❓ 应用不同步
    • ❓ 应用报错
    • ❓ Git 拉不下来
  • 十一、一句话总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档