diff --git a/README.md b/README.md new file mode 100644 index 0000000..b80d14b --- /dev/null +++ b/README.md @@ -0,0 +1,225 @@ +# K3s GitOps 自动部署指南 + +## 🎯 GitOps 工作流概述 + +本项目已配置完整的 GitOps 自动部署流程:**Git 提交 → 自动同步 → 集群部署** + +## ✅ 已满足的实现条件 + +### 1. 基础设施 ✅ +- **k3s 集群**: v1.34.3+k3s1 (单节点) +- **存储系统**: Longhorn 分布式存储 +- **证书管理**: cert-manager + Let's Encrypt +- **Ingress**: Traefik + +### 2. GitOps 工具链 ✅ +- **ArgoCD**: 已部署并运行 + - 访问地址: https://argocd.u9.net3w.com + - 用户名: `admin` + - 初始密码: `R5ALO8NIRi4KoN8Q` + +- **Gitea**: 已部署并运行 + - 访问地址: https://git.u9.net3w.com + - 用于托管 k3s 配置文件 + +### 3. Git 仓库 ✅ +- 本地仓库已初始化 +- 所有 k3s 配置文件已提交 + +## 🚀 GitOps 自动部署流程 + +### 方式一:使用 Gitea(推荐) + +#### 步骤 1: 在 Gitea 创建仓库 +```bash +# 1. 访问 https://git.u9.net3w.com +# 2. 注册/登录账号 +# 3. 创建新仓库: k3s-configs +# 4. 获取仓库 URL +``` + +#### 步骤 2: 推送代码到 Gitea +```bash +# 添加远程仓库 +git remote add origin https://git.u9.net3w.com/你的用户名/k3s-configs.git + +# 推送代码 +git push -u origin master +``` + +#### 步骤 3: 配置 ArgoCD 连接 Gitea +```bash +# 1. 访问 https://argocd.u9.net3w.com +# 2. 登录 (admin / R5ALO8NIRi4KoN8Q) +# 3. Settings → Repositories → Connect Repo +# - Repository URL: https://git.u9.net3w.com/你的用户名/k3s-configs.git +# - Username: 你的 Gitea 用户名 +# - Password: 你的 Gitea 密码 +``` + +#### 步骤 4: 创建 ArgoCD Application +```bash +# 修改 k3s/argocd-app.yaml 中的 repoURL +# 然后应用配置 +kubectl apply -f k3s/argocd-app.yaml +``` + +### 方式二:使用 GitHub/GitLab + +如果你想使用 GitHub 或 GitLab: + +```bash +# 推送到 GitHub +git remote add origin https://github.com/你的用户名/k3s-configs.git +git push -u origin master + +# 在 ArgoCD 中配置对应的仓库地址 +``` + +## 📝 日常使用流程 + +### 1. 修改配置文件 +```bash +# 例如:修改 WordPress 副本数 +vim k3s/my-blog/02-wordpress.yaml +# 将 replicas: 2 改为 replicas: 3 +``` + +### 2. 提交并推送 +```bash +git add k3s/my-blog/02-wordpress.yaml +git commit -m "Scale WordPress to 3 replicas" +git push +``` + +### 3. 自动部署 🎉 +- ArgoCD 会在 **3 分钟内**自动检测到变更 +- 自动同步到 k3s 集群 +- 可在 ArgoCD UI 查看部署状态 + +## 🔧 ArgoCD 配置说明 + +### 自动同步策略 +```yaml +syncPolicy: + automated: + prune: true # 自动删除 Git 中不存在的资源 + selfHeal: true # 自动修复被手动修改的资源 +``` + +### 手动同步 +如果需要立即同步,可以: +1. 在 ArgoCD UI 点击 "Sync" 按钮 +2. 或使用命令行: +```bash +# 安装 argocd CLI +curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64 +chmod +x /usr/local/bin/argocd + +# 登录 +argocd login argocd.u9.net3w.com --username admin --password R5ALO8NIRi4KoN8Q + +# 手动同步 +argocd app sync k3s-apps +``` + +## 📊 已部署的服务 + +| 服务 | 域名 | 配置文件路径 | +|------|------|-------------| +| WordPress | https://blog.u9.net3w.com | k3s/my-blog/ | +| Docker Registry | https://registry.u9.net3w.com | k3s/registry/ | +| n8n | https://n8n.u9.net3w.com | k3s/n8n/ | +| Gitea | https://git.u9.net3w.com | k3s/ztg_自托管/ | +| Uptime Kuma | https://status.u9.net3w.com | k3s/kuma-stack.yaml | +| 导航页 | https://nav.u9.net3w.com | k3s/nav/ | +| ArgoCD | https://argocd.u9.net3w.com | - | + +## 🎯 最佳实践 + +### 1. 分支策略 +```bash +# 创建开发分支 +git checkout -b dev + +# 在 dev 分支测试 +git add . +git commit -m "Test new feature" +git push origin dev + +# 测试通过后合并到 master +git checkout master +git merge dev +git push +``` + +### 2. 配置文件组织 +``` +k3s/ +├── my-blog/ # WordPress 博客 +├── registry/ # Docker 仓库 +├── n8n/ # 工作流自动化 +├── nav/ # 导航页 +└── argocd-app.yaml # ArgoCD 应用配置 +``` + +### 3. 回滚操作 +```bash +# 查看历史提交 +git log --oneline + +# 回滚到指定版本 +git revert +git push + +# ArgoCD 会自动同步回滚 +``` + +## 🔍 监控和调试 + +### 查看 ArgoCD 应用状态 +```bash +kubectl get applications -n argocd +kubectl describe application k3s-apps -n argocd +``` + +### 查看同步日志 +```bash +# 在 ArgoCD UI 中查看 +# 或使用 CLI +argocd app logs k3s-apps +``` + +### 常见问题 + +#### 1. 同步失败 +- 检查 Git 仓库是否可访问 +- 检查 YAML 文件语法是否正确 +- 查看 ArgoCD 日志 + +#### 2. 证书问题 +```bash +# 如果 Gitea 使用自签名证书 +kubectl patch configmap argocd-cm -n argocd --type merge -p '{"data":{"repositories":"- url: https://git.u9.net3w.com/user/repo\n insecure: true"}}' +``` + +## 📚 下一步 + +1. **配置 Webhook**: 在 Gitea 中配置 Webhook,实现即时同步 +2. **多环境部署**: 创建 dev/staging/prod 分支 +3. **密钥管理**: 使用 Sealed Secrets 管理敏感信息 +4. **监控告警**: 集成 Prometheus + Grafana + +## 🎉 总结 + +现在你已经拥有完整的 GitOps 工作流: + +``` +修改 YAML → Git Commit → Git Push → ArgoCD 自动同步 → k3s 集群更新 +``` + +所有配置变更都通过 Git 管理,实现了: +- ✅ 版本控制 +- ✅ 自动部署 +- ✅ 快速回滚 +- ✅ 审计追踪 diff --git a/k3s/argocd-app.yaml b/k3s/argocd-app.yaml new file mode 100644 index 0000000..256eab6 --- /dev/null +++ b/k3s/argocd-app.yaml @@ -0,0 +1,33 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: k3s-apps + namespace: argocd +spec: + project: default + + # Git 仓库配置 + source: + repoURL: https://git.u9.net3w.com/admin/k3s-configs.git + targetRevision: HEAD + path: k3s + + # 目标集群配置 + destination: + server: https://kubernetes.default.svc + namespace: default + + # 自动同步配置 + syncPolicy: + automated: + prune: true # 自动删除 Git 中不存在的资源 + selfHeal: true # 自动修复被手动修改的资源 + allowEmpty: false + syncOptions: + - CreateNamespace=true # 自动创建命名空间 + retry: + limit: 5 + backoff: + duration: 5s + factor: 2 + maxDuration: 3m