Files
k3s_auto_deploy/USAGE-GUIDE.md

427 lines
8.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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访问直接可用
```bash
# 通过任意节点访问
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文件测试用**
```bash
# 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
```
配置后访问:
```bash
curl http://test.jpc.net3w.com
# 或在浏览器打开: http://test.jpc.net3w.com
```
## 🔄 更新应用演示
### 方式1: 使用更新脚本(推荐)
在master节点上执行
```bash
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: 手动修改并提交
```bash
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
```
### 查看更新状态
```bash
# 查看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仓库
```bash
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内部**
```bash
# 在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外部**
```bash
# 创建GitHub仓库后
git remote add origin https://github.com/YOUR_USERNAME/k3s-deployment.git
git push -u origin main
```
### 3. 下次更新配置
```bash
# 修改配置文 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创建新仓库
```bash
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应用
```bash
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仓库
- 查看提交历史
- 创建新仓库
- 管理用户和权限
### 命令行管理
```bash
# 查看所有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
```
## 🔧 故障排查
### 应用无法访问
1. **检查Pod状态**
```bash
kubectl get pods -l app=test-app
kubectl describe pod <pod-name>
kubectl logs <pod-name>
```
2. **检查Service**
```bash
kubectl get svc test-app
kubectl describe svc test-app
```
3. **检查Ingress**
```bash
kubectl get ingress test-app
kubectl describe ingress test-app
```
### ArgoCD同步失败
1. **查看应用状态**
```bash
kubectl get application test-app -n argocd
kubectl describe application test-app -n argocd
```
2. **查看ArgoCD日志**
```bash
kubectl logs -n argocd deployment/argocd-application-controller
kubectl logs -n argocd deployment/argocd-repo-server
```
3. **检查Git仓库连接**
```bash
# 在master节点测试
curl http://gitea-http.gitea.svc.cluster.local:3000/k3s-apps/test-app.git
```
### 域名无法访问
1. **检查DNS解析**
```bash
nslookup test.jpc.net3w.com
# 或
dig test.jpc.net3w.com
```
2. **检查Traefik Ingress Controller**
```bash
kubectl get pods -n kube-system -l app.kubernetes.io/name=traefik
kubectl logs -n kube-system -l app.kubernetes.io/name=traefik
```
3. **临时使用hosts文件**
```bash
# 添加到 /etc/hosts
8.216.38.248 test.jpc.net3w.com
```
## 📝 最佳实践
1. **使用Git管理所有配置**
- 所有Kubernetes清单文件都应该在Git中
- 使用分支管理不同环境dev/staging/prod
2. **定期备份**
- 备份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`
3. **监控资源使用**
```bash
kubectl top nodes
kubectl top pods -A
```
4. **使用命名空间隔离应用**
```bash
kubectl create namespace production
kubectl create namespace staging
```
5. **配置资源限制**
在Deployment中添加
```yaml
resources:
requests:
memory: "64Mi"
cpu: "100m"
limits:
memory: "128Mi"
cpu: "200m"
```
## 🎯 下一步
1. **配置HTTPS**
- 安装cert-manager
- 配置Let's Encrypt自动证书
2. **添加监控**
- 部署Prometheus + Grafana
- 配置告警规则
3. **配置CI/CD**
- 集成Gitea Actions或Jenkins
- 自动构建Docker镜像
4. **多环境管理**
- 使用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/