8.6 KiB
8.6 KiB
K3s + GitOps 使用指南
📊 当前部署状态总结
✅ 1. 幂等性配置已修复
所有配置文件已经修复,支持完全幂等性部署:
- ✅ inventory/hosts.ini: 使用正确的组名
server和agent - ✅ api_endpoint: 配置为内网IP
172.23.96.138 - ✅ worker节点: 使用内网IP连接master,配置正确的token
- ✅ 验证: 最后一次Ansible运行显示
changed=0,配置稳定
可以安全地重复运行部署脚本,不会出错!
✅ 2. 测试项目已创建
已创建完整的测试应用 test-app,包含:
- 应用: 2个nginx副本,带自定义HTML页面
- Service: NodePort 30081
- Ingress: 域名访问
test.jpc.net3w.com - Git仓库: http://8.216.38.248:32158/k3s-apps/test-app
- ArgoCD应用: 自动同步部署
🌐 访问方式
1. NodePort访问(直接可用)
# 通过任意节点访问
curl http://8.216.38.248:30081
curl http://8.216.41.97:30081
curl http://8.216.33.69:30081
2. 域名访问(需要DNS配置)
方式A: 配置本地hosts文件(测试用)
# Linux/Mac
sudo echo "8.216.38.248 test.jpc.net3w.com" >> /etc/hosts
# Windows (管理员权限)
# 编辑 C:\Windows\System32\drivers\etc\hosts
# 添加: 8.216.38.248 test.jpc.net3w.com
方式B: 配置DNS解析(生产用) 在你的域名DNS管理面板添加A记录:
test.jpc.net3w.com → 8.216.38.248
配置后访问:
curl http://test.jpc.net3w.com
# 或在浏览器打开: http://test.jpc.net3w.com
🔄 更新应用演示
方式1: 使用更新脚本(推荐)
在master节点上执行:
ssh fei@8.216.38.248
cd /home/fei/k3s/test-app
# 更新到v2.0(粉红色背景)
./update-app.sh v2.0
# 更新到v3.0(蓝色背景)
./update-app.sh v3.0
# 更新到v4.0(绿色背景)
./update-app.sh v4.0
方式2: 手动修改并提交
ssh fei@8.216.38.248
cd /home/fei/k3s/test-app
# 1. 修改配置
vim manifests/deployment.yaml
# 修改 ConfigMap 中的内容,比如版本号、颜色等
# 2. 提交到Git
git add .
git commit -m "Update to v2.0"
git push
# 3. 等待ArgoCD自动同步(3分钟内)
kubectl get application test-app -n argocd -w
查看更新状态
# 查看ArgoCD应用状态
kubectl get application test-app -n argocd
# 查看Pod状态
kubectl get pods -l app=test-app
# 查看实时日志
kubectl logs -f -l app=test-app
# 访问应用验证更新
curl http://8.216.38.248:30081 | grep Version
📦 将部署配置存入Git
1. 初始化Git仓库
cd /home/fei/opk3s/k3s自动化部署
# 初始化Git
git init -b main
# 添加文件
git add .gitignore
git add README-DEPLOYMENT.md
git add USAGE-GUIDE.md
git add config/cluster-vars.yml.example
git add scripts/
git add k3s-ansible/inventory/hosts.ini
# 提交
git commit -m "Initial commit: K3s deployment configuration"
2. 推送到远程仓库
选项A: 推送到Gitea(内部)
# 在Gitea创建仓库 k3s-deployment
# 然后推送
git remote add origin http://8.216.38.248:32158/k3s-apps/k3s-deployment.git
git push -u origin main
选项B: 推送到GitHub/GitLab(外部)
# 创建GitHub仓库后
git remote add origin https://github.com/YOUR_USERNAME/k3s-deployment.git
git push -u origin main
3. 下次更新配置
# 修改配置文 config/cluster-vars.yml
# 重新生成inventory
python3 scripts/generate-inventory.py
# 提交更改
git add k3s-ansible/inventory/hosts.ini
git commit -m "Update cluster configuration"
git push
# 重新部署(幂等操作)
cd k3s-ansible
ansible-playbook site.yml -i inventory/hosts.ini -e "@../config/cluster-vars.yml"
🚀 创建新的应用
1. 在Gitea创建新仓库
ssh fei@8.216.38.248
cd /home/fei/k3s
# 创建新应用目录
mkdir -p my-new-app/manifests
# 创建Kubernetes清单
cat > my-new-app/manifests/deployment.yaml << 'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-new-app
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: my-new-app
template:
metadata:
labels:
app: my-new-app
spec:
containers:
- name: app
image: nginx:alpine
ports:
- containerPort: 80
EOF
# 创建Service
cat > my-new-app/manifests/service.yaml << 'EOF'
apiVersion: v1
kind: Service
metadata:
name: my-new-app
namespace: default
spec:
type: NodePort
selector:
app: my-new-app
ports:
- port: 80
targetPort: 80
nodePort: 30082
EOF
# 初始化Git并推送
cd my-new-app
git init -b main
git add .
git commit -m "Initial commit"
# 推送到Gitea(需要先在Gitea创建仓库)
git remote add origin http://argocd:ArgoCD%402026@localhost:32158/k3s-apps/my-new-app.git
git push -u origin main
2. 创建ArgoCD应用
kubectl apply -f - << 'EOF'
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-new-app
namespace: argocd
spec:
project: default
source:
repoURL: http://gitea-http.gitea.svc.cluster.local:3000/k3s-apps/my-new-app.git
targetRevision: main
path: manifests
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
automated:
prune: true
selfHeal: true
EOF
📊 监控和管理
ArgoCD Web UI
- URL: https://8.216.38.248:31875
- 用户名: admin
- 密码: ArgoAdmin@2026
功能:
- 查看所有应用的同步状态
- 手动触发同步
- 查看部署历史
- 回滚到之前的版本
Gitea Web UI
- URL: http://8.216.38.248:32158
- 管理员: gitea_admin / GitAdmin@2026
- ArgoCD用户: argocd / ArgoCD@2026
功能:
- 管理Git仓库
- 查看提交历史
- 创建新仓库
- 管理用户和权限
命令行管理
# 查看所有ArgoCD应用
kubectl get application -n argocd
# 查看应用详情
kubectl describe application test-app -n argocd
# 手动触发同步
kubectl patch application test-app -n --type merge -p '{"metadotations":{"argocd.argoproj.io/refresh":"hard"}}}'
# 查看所有Pod
kubectl get pods -A
# 查看特定应用的Pod
kubectl get pods -l app=test-app
# 查看Ingress
kubectl get ingress -A
🔧 故障排查
应用无法访问
- 检查Pod状态
kubectl get pods -l app=test-app
kubectl describe pod <pod-name>
kubectl logs <pod-name>
- 检查Service
kubectl get svc test-app
kubectl describe svc test-app
- 检查Ingress
kubectl get ingress test-app
kubectl describe ingress test-app
ArgoCD同步失败
- 查看应用状态
kubectl get application test-app -n argocd
kubectl describe application test-app -n argocd
- 查看ArgoCD日志
kubectl logs -n argocd deployment/argocd-application-controller
kubectl logs -n argocd deployment/argocd-repo-server
- 检查Git仓库连接
# 在master节点测试
curl http://gitea-http.gitea.svc.cluster.local:3000/k3s-apps/test-app.git
域名无法访问
- 检查DNS解析
nslookup test.jpc.net3w.com
# 或
dig test.jpc.net3w.com
- 检查Traefik Ingress Controller
kubectl get pods -n kube-system -l app.kubernetes.io/name=traefik
kubectl logs -n kube-system -l app.kubernetes.io/name=traefik
- 临时使用hosts文件
# 添加到 /etc/hosts
8.216.38.248 test.jpc.net3w.com
📝 最佳实践
-
使用Git管理所有配置
- 所有Kubernetes清单文件都应该在Git中
- 使用分支管理不同环境(dev/staging/prod)
-
定期备份
- 备份Gitea数据:
kubectl exec -n gitea <pod> -- tar czf /tmp/backup.tar.gz /data - 备份ArgoCD配置:
kubectl get application -n argocd -o yaml > argocd-apps-backup.yaml
- 备份Gitea数据:
-
监控资源使用
kubectl top nodes kubectl top pods -A -
使用命名空间隔离应用
kubectl create namespace production kubectl create namespace staging -
配置资源限制 在Deployment中添加:
resources: requests: memory: "64Mi" cpu: "100m" limits: memory: "128Mi" cpu: "200m"
🎯 下一步
-
配置HTTPS
- 安装cert-manager
- 配置Let's Encrypt自动证书
-
添加监控
- 部署Prometheus + Grafana
- 配置告警规则
-
配置CI/CD
- 集成Gitea Actions或Jenkins
- 自动构建Docker镜像
-
多环境管理
- 使用ArgoCD ApplicationSet
- 管理dev/staging/prod环境
📞 获取帮助
- ArgoCD文档: https://argo-cd.readthedocs.io/
- K3s文档: https://docs.k3s.io/
- Gitea文档: https://docs.gitea.io/
- Kubernetes文档: https://kubernetes.io/docs/