# K3s + GitOps 全自动化部署指南 面对一个新的集群,如何从零开始一步步搭建完整的K3s + GitOps自动化环境。 ## 📋 目录 - [概述](#概述) - [前置准备](#前置准备) - [快速开始](#快速开始) - [详细步骤](#详细步骤) - [验证部署](#验证部署) - [故障排查](#故障排查) --- ## 概述 本项目提供了一套完整的K3s + GitOps自动化部署方案,适用于从零开始搭建新集群。 ### 部署内容 - **K3s集群**: 轻量级Kubernetes集群(1 master + N worker) - **Gitea**: 私有Git服务器 - **ArgoCD**: GitOps持续部署工具 - **cert-manager**: 自动SSL证书管理 - **Traefik**: Ingress控制器(K3s内置) ### 特点 - ✅ 完全自动化部署 - ✅ 支持幂等性(可重复执行) - ✅ GitOps工作流 - ✅ HTTPS自动配置 - ✅ 配置参数化 --- ## 前置准备 ### 1. 硬件要求 | 角色 | 最低配置 | 推荐配置 | |------|---------|---------| | Master节点 | 2核4G | 4核8G | | Worker节点 | 2核4G | 4核8G | ### 2. 软件要求 **控制机(本地机器)**: ```bash # Ubuntu/Debian sudo apt update sudo apt install -y python3 python3-pip git ansible sshpass # macOS brew install python3 ansible git ``` **目标节点(K3s集群)**: - Ubuntu 20.04+ / Debian 11+ - SSH访问权限 - sudo权限 ### 3. 准备配置信息 需要收集以下信息: ```yaml # 节点信息 - Master节点: 公网IP、内网IP、SSH用户、SSH密码 - Worker节点: 公网IP、内网IP、SSH用户、SSH密码 # 域名(可选,用于HTTPS) - 主域名: example.com - ArgoCD域名: argocd.example.com - Gitea域名: git.example.com # 密码 - ArgoCD管理员密码 - Gitea管理员密码 ``` --- ## 快速开始 ### 一键部署(推荐) ```bash # 1. 克隆项目 git clone cd k3s自动化部署 # 2. 配置集群信息 cp config/cluster-vars.yml.example config/cluster-vars.yml vim config/cluster-vars.yml # 填写实际配置 # 3. 执行部署 chmod +x scripts/*.sh ./scripts/deploy-all.sh ``` --- ## 详细步骤 ### 步骤1: 配置集群参数 #### 1.1 创建配置文件 ```bash cd k3s自动化部署 cp config/cluster-vars.yml.example config/cluster-vars.yml vim config/cluster-vars.yml ``` #### 1.2 配置示例 ```yaml # 节点配置 master_nodes: - hostname: k3s-master-01 public_ip: "8.216.38.248" # 改为你的公网IP private_ip: "172.23.96.138" # 改为你的内网IP ssh_user: "root" # 改为你的SSH用户 ssh_password: "your-password" # 改为你的SSH密码 worker_nodes: - hostname: k3s-worker-01 public_ip: "8.216.41.97" private_ip: "172.23.96.139" ssh_user: "root" ssh_password: "your-password" # K3s配置 k3s_version: "v1.28.5+k3s1" flannel_iface: "eth0" target_dir: "/home/fei/k3s" # 域名配置(可选) domain_name: "example.com" argocd_domain: "argocd.example.com" gitea_domain: "git.example.com" # 密码配置 argocd_admin_password: "YourStrongPassword123!" gitea_admin_password: "YourStrongPassword123!" ``` ### 步骤2: 部署K3s集群 ```bash # 生成inventory python3 scripts/generate-inventory.py # 部署K3s cd k3s-ansible ansible-playbook site.yml -i inventory/hosts.ini # 验证集群 ssh user@master-ip kubectl get nodes ``` **预期输出**: ``` NAME STATUS ROLES AGE VERSION k3s-master-01 Ready control-plane,master 5m v1.28.5+k3s1 k3s-worker-01 Ready 4m v1.28.5+k3s1 ``` ### 步骤3: 部署Gitea ```bash # 部署Gitea ./scripts/deploy-gitea.sh # 初始化Gitea ./scripts/setup-gitea.sh # 获取访问地址 kubectl get svc -n gitea gitea-http ``` **访问**: `http://:` ### 步骤4: 部署ArgoCD ```bash # 部署ArgoCD ./scripts/deploy-argocd.sh # 获取访问地址 kubectl get svc -n argocd argocd-server ``` **访问**: `https://:` ### 步骤5: 配置HTTPS(可选) #### 5.1 前置条件 - DNS已解析到master节点公网IP - 云服务器安全组已开放80和443端口 #### 5.2 部署cert-manager ```bash # 在master节点上执行 kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.3/cert-manager.yaml # 等待就绪 kubectl wait --for=condition=ready pod -l app.kubernetes.io/instance=cert-manager -n cert-manager --timeout=300s ``` #### 5.3 创建ClusterIssuer ```bash kubectl apply -f - < demo-app/manifes/deployment.yaml < # 检查K3s服务 sudo systemctl status k3s-agent sudo journalctl -u k3s-agent -f ``` ### 问题2: 外部无法访问服务 ```bash # 检查云服务器安全组 # 开放端口: 80, 443, 30000-32767 # 从master节点内部测试 curl http://localhost:30080 ``` ### 问题3: HTTPS证书申请失败 ```bash # 检查DNS解析 nslookup argocd.example.com # 检查cert-manager日志 kubectl logs -n cert-manager deployment/cert-manager # 查看证书详情 kubectl describe certificate -n ``` --- ## 架构说明 ``` ┌─────────────────────────────────────────────────────────────┐ │ K3s Cluster │ │ │ │ Master + Workers │ │ ↓ │ │ Gitea (Git Server) │ │ ↓ │ │ ArgoCD (GitOps) │ │ ↓ │ │ cert-manager (SSL) │ │ ↓ │ │ Traefik (Ingress) │ │ ↓ │ │ Applications │ └─────────────────────────────────────────────────────────────┘ ``` ### GitOps工作流 ``` 开发者修改代码 ↓ 提交到Git (Gitea) ↓ ArgoCD检测变化 (3分钟内) ↓ 自动同步到集群 ↓ 应用自动更新 ``` --- ## 总结 按照本指南,您可以在30-60分钟内完成: - ✅ K3s集群部署 - ✅ Gitea私有Git服务器 - ✅ ArgoCD GitOps引擎 - ✅ HTTPS自动证书 - ✅ 示例应用 所有配置都支持幂等性,可以安全重复执行。 **祝您部署顺利!** 🚀 --- ## 参考文档 - [README-DEPLOYMENT.md](README-DEPLOYMENT.md) - 详细部署文档 - [USAGE-GUIDE.md](USAGE-GUIDE.md) - 使用指南 - [SUMMARY.md](SUMMARY.md) - 完整总结 - [QUICK-REFERENCE.md](QUICK-REFERENCE.md) - 快速参考 - [TROUBLESHOOTING-ACCESS.md](TROUBLESHOOTING-ACCESS.md) - 访问问题排查