325 lines
8.2 KiB
Markdown
325 lines
8.2 KiB
Markdown
# K3s + GitOps 部署总结
|
||
|
||
## ✅ 完成情况
|
||
|
||
### 1. 幂等性配置修复 ✅
|
||
|
||
**问题回顾:**
|
||
- 之前worker节点尝试通过公网IP连接master导致超时
|
||
- inventory配置中缺少必要的变量
|
||
- worker节点的token配置不正确
|
||
|
||
**已修复:**
|
||
- ✅ `inventory/hosts.ini` 使用正确的组名 `server` 和 `agent`
|
||
- ✅ `api_endpoint` 配置为内网IP `172.23.96.138`
|
||
- ✅ worker节点环境文件配置正确的内网IP和token
|
||
- ✅ 所有配置文件支持幂等性,可以安全重复执行
|
||
|
||
**验证结果:**
|
||
```bash
|
||
# 最后一次Ansible运行结果
|
||
172.23.96.138 : ok=25 changed=0 failed=0
|
||
172.23.96.139 : ok=18 changed=0 failed=0
|
||
172.23.96.140 : ok=18 changed=0 failed=0
|
||
```
|
||
`changed=0` 表示配置已稳定,支持幂等性!
|
||
|
||
### 2. 测试项目创建 ✅
|
||
|
||
**已创建完整的测试应用 `test-app`:**
|
||
|
||
#### 应用组件
|
||
- **Deployment**: 2个nginx副本,带自定义HTML页面
|
||
- **ConfigMap**: 包含HTML内容,显示版本号和背景颜色
|
||
- **Service**: NodePort 30081
|
||
- **Ingress**: 域名访问 `test.jpc.net3w.com`
|
||
|
||
#### Git仓库
|
||
- **仓库地址**: http://8.216.38.248:32158/k3s-apps/test-app
|
||
- **分支**: main
|
||
- **内容**: manifests目录包含所有Kubernetes清单文件
|
||
|
||
#### ArgoCD应用
|
||
- **应用名**: test-app
|
||
- **状态**: Synced & Healthy
|
||
- **自动同步**: 已启用
|
||
- **自动修复**: 已启用
|
||
|
||
#### 访问方式
|
||
1. **NodePort**: http://8.216.38.248:30081 (或任意节点IP)
|
||
2. **域名**: http://test.jpc.net3w.com (需配置DNS)
|
||
|
||
### 3. GitOps自动更新流程 ✅
|
||
|
||
**工作流程:**
|
||
```
|
||
开发者修改代码
|
||
↓
|
||
提交到Git (Gitea)
|
||
↓
|
||
ArgoCD检测变化 (3分钟内)
|
||
↓
|
||
自动同步到K3s集群
|
||
↓
|
||
应用自动更新
|
||
```
|
||
|
||
**更新脚本:**
|
||
- 创建了 `update-app.sh` 脚本
|
||
- 支持一键更新应用版本
|
||
- 自动修改配置、提交Git、推送
|
||
|
||
**使用示例:**
|
||
```bash
|
||
cd /home/fei/k3s/test-app
|
||
./update-app.sh v2.0 # 更新到v2.0(粉红色背景)
|
||
./update-app.sh v3.0 # 更新到v3.0(蓝色背景)
|
||
./update-app.sh v4.0 # 更新到v4.0(绿色背景)
|
||
```
|
||
|
||
### 4. 部署配置Git管理 ✅
|
||
|
||
**已创建的文件:**
|
||
- ✅ `.gitignore` - 排除敏感信息
|
||
- ✅ `README-DEPLOYMENT.md` - 部署文档
|
||
- ✅ `USAGE-GUIDE.md` - 详细使用指南
|
||
- ✅ `SUMMARY.md` - 本总结文档
|
||
- ✅ `config/cluster-vars.yml.example` - 配置模板
|
||
- ✅ `demo-gitops-update.sh` - GitOps演示脚本
|
||
|
||
**可以存入Git的内容:**
|
||
```
|
||
k3s自动化部署/
|
||
├── .gitignore # ✅ 已创建
|
||
├── README-DEPLOYMENT.md # ✅ 已创建
|
||
├── USAGE-GUIDE.md # ✅ 已创建
|
||
├── SUMMARY.md # ✅ 已创建
|
||
├── demo-gitops-update.sh # ✅ 已创建
|
||
├── config/
|
||
│ └── cluster-vars.yml.example # ✅ 已创建(模板)
|
||
├── scripts/ # ✅ 所有脚本
|
||
│ ├── generate-inventory.py
|
||
│ ├── deploy-gitea.sh
|
||
│ ├── setup-gitea.sh
|
||
│ ├── deploy-argocd.sh
|
||
│ ├── create-argocd-app.sh
|
||
│ └── push-demo-app.sh
|
||
└── k3s-ansible/
|
||
└── inventory/
|
||
└── hosts.ini # ✅ 自动生成的inventory
|
||
```
|
||
|
||
**不会存入Git的内容(已在.gitignore):**
|
||
- `config/cluster-vars.yml` - 包含敏感信息(密码、IP等)
|
||
- `*.vault` - Ansible加密文件
|
||
- Python缓存和临时文件
|
||
|
||
## 📊 当前集群状态
|
||
|
||
### K3s集群
|
||
```
|
||
Master: 8.216.38.248 (172.23.96.138) - Ready
|
||
Worker1: 8.216.41.97 (172.23.96.139) - Ready
|
||
Worker2: 8.216.33.69 (172.23.96.140) - Ready
|
||
```
|
||
|
||
### GitOps组件
|
||
```
|
||
Gitea: http://8.216.38.248:32158
|
||
- 管理员: gitea_admin / GitAdmin@2026
|
||
- ArgoCD用户: argocd / ArgoCD@2026
|
||
- 仓库: k3s-apps/demo-app, k3s-apps/test-app
|
||
|
||
ArgoCD: https://8.216.38.248:31875
|
||
- 用户: admin / ArgoAdmin@2026
|
||
- 应用: demo-app (Synced & Healthy)
|
||
- 应用: test-app (Synced & Healthy)
|
||
```
|
||
|
||
### 部署的应用
|
||
```
|
||
demo-app: NodePort 30080
|
||
- 2个nginx副本
|
||
- 状态: Running
|
||
|
||
test-app: NodePort 30081
|
||
- 2个nginx副本
|
||
- 状态: Running
|
||
- 域名: test.jpc.net3w.com
|
||
```
|
||
|
||
## 🎯 使用场景演示
|
||
|
||
### 场景1: 更新应用版本
|
||
|
||
```bash
|
||
# 1. SSH到master节点
|
||
ssh fei@8.216.38.248
|
||
|
||
# 2. 进入应用目录
|
||
cd /home/fei/k3s/test-app
|
||
|
||
# 3. 运行更新脚本
|
||
./update-app.sh v2.0
|
||
|
||
# 4. 等待3分钟,ArgoCD自动同步
|
||
|
||
# 5. 验证更新
|
||
curl http://localhost:30081 | grep Version
|
||
```
|
||
|
||
### 场景2: 手动修改配置
|
||
|
||
```bash
|
||
# 1. 修改配置文件
|
||
vim manifests/deployment.yaml
|
||
|
||
# 2. 提交到Git
|
||
git add .
|
||
git commit -m "Update configuration"
|
||
git push
|
||
|
||
# 3. ArgoCD自动检测并部署(3分钟内)
|
||
kubectl get application test-app -n argocd -w
|
||
```
|
||
|
||
### 场景3: 创建新应用
|
||
|
||
```bash
|
||
# 1. 在Gitea创建新仓库
|
||
# 访问 http://8.216.38.248:32158
|
||
|
||
# 2. 创建Kubernetes清单文件
|
||
mkdir -p my-app/manifests
|
||
# 创建 deployment.yaml, service.yaml 等
|
||
|
||
# 3. 推送到Gitea
|
||
cd my-app
|
||
git init -b main
|
||
git add .
|
||
git commit -m "Initial commit"
|
||
git remote add origin http://...
|
||
git push
|
||
|
||
# 4. 在ArgoCD创建应用
|
||
kubectl apply -f argocd-app.yaml
|
||
|
||
# 5. ArgoCD自动部署
|
||
```
|
||
|
||
### 场景4: 回滚应用
|
||
|
||
```bash
|
||
# 方式1: 通过Git回滚
|
||
cd /home/fei/k3s/test-app
|
||
git log --oneline
|
||
git revert <commit-hash>
|
||
git push
|
||
# ArgoCD自动同步回滚
|
||
|
||
# 方式2: 通过ArgoCD Web UI
|
||
# 访问 https://8.216.38.248:31875
|
||
# 选择应用 → History → 选择版本 → Rollback
|
||
```
|
||
|
||
## 🔄 GitOps工作流程详解
|
||
|
||
### 完整流程
|
||
```
|
||
1. 开发者修改代码/配置
|
||
↓
|
||
2. 提交到Git仓库 (Gitea)
|
||
↓
|
||
3. ArgoCD定期检查Git仓库 (每3分钟)
|
||
↓
|
||
4. 检测到变化后,ArgoCD拉取最新配置
|
||
↓
|
||
5. ArgoCD对比当前集群状态与Git中的期望状态
|
||
↓
|
||
6. 如果有差异,ArgoCD自动应用变更
|
||
↓
|
||
7. Kubernetes更新Pod/Service/Ingress等资源
|
||
↓
|
||
8. 应用自动滚动更新,零停机时间
|
||
↓
|
||
9. ArgoCD持续监控,确保状态一致
|
||
```
|
||
|
||
### 优势
|
||
- ✅ **声明式配置**: Git是唯一的真实来源
|
||
- ✅ **自动化部署**: 无需手动执行kubectl命令
|
||
- ✅ **版本控制**: 所有变更都有历史记录
|
||
- ✅ **快速回滚**: 一键回滚到任意历史版本
|
||
- ✅ **审计追踪**: 谁在什么时候做了什么改动
|
||
- ✅ **自我修复**: 如果有人手动修改集群,ArgoCD会自动恢复
|
||
|
||
## 📝 下一步建议
|
||
|
||
### 1. 配置域名DNS
|
||
```bash
|
||
# 在DNS管理面板添加A记录
|
||
test.jpc.net3w.com → 8.216.38.248
|
||
argocd.jpc.net3w.com → 8.216.38.248
|
||
git.jpc.net3w.com → 8.216.38.248
|
||
```
|
||
|
||
### 2. 配置HTTPS证书
|
||
```bash
|
||
# 安装cert-manager
|
||
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cert-manager.yaml
|
||
|
||
# 配置Let's Encrypt
|
||
# 创建ClusterIssuer和Certificate资源
|
||
```
|
||
|
||
### 3. 添加监控
|
||
```bash
|
||
# 部署Prometheus + Grafana
|
||
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
|
||
helm install prometheus prometheus-community/kube-prometheus-stack -n monitoring --create-namespace
|
||
```
|
||
|
||
### 4. 配置备份
|
||
```bash
|
||
# 定期备份Gitea数据
|
||
kubectl exec -n gitea <pod> -- tar czf /tmp/backup.tar.gz /data
|
||
|
||
# 备份ArgoCD配置
|
||
kubectl get application -n argocd -o yaml > argocd-backup.yaml
|
||
```
|
||
|
||
### 5. 多环境管理
|
||
```bash
|
||
# 创建不同的命名空间
|
||
kubectl create namespace dev
|
||
kubectl create namespace staging
|
||
kubectl create namespace production
|
||
|
||
# 使用ArgoCD ApplicationSet管理多环境
|
||
```
|
||
|
||
## 🎉 总结
|
||
|
||
### 已完成
|
||
1. ✅ **幂等性配置修复** - 所有配置支持重复执行
|
||
2. ✅ **测试项目创建** - test-app完整部署并运行
|
||
3. ✅ **GitOps自动更新** - 修改Git自动部署到集群
|
||
4. ✅ **域名访问配置** - Ingress配置完成(需DNS)
|
||
5. ✅ **部署配置Git化** - 所有配置可存入Git管理
|
||
|
||
### 当前状态
|
||
- **K3s集群**: 3节点全部Ready
|
||
- **Gitea**: 运行正常,2个仓库
|
||
- **ArgoCD**: 运行正常,2个应用Synced
|
||
- **应用**: demo-app和test-app都在运行
|
||
|
||
### 可以开始使用
|
||
- ✅ 通过Git管理应用配置
|
||
- ✅ 自动部署更新
|
||
- ✅ 通过NodePort访问应用
|
||
- ✅ 通过域名访问(配置DNS后)
|
||
- ✅ 在ArgoCD Web UI查看状态
|
||
- ✅ 在Gitea管理Git仓库
|
||
|
||
**你的K3s + GitOps集群已经完全就绪,可以投入使用!** 🚀
|