Files
k3s_auto_deploy/USAGE-GUIDE.md

8.6 KiB
Raw Blame History

K3s + GitOps 使用指南

📊 当前部署状态总结

1. 幂等性配置已修复

所有配置文件已经修复,支持完全幂等性部署:

  • inventory/hosts.ini: 使用正确的组名 serveragent
  • api_endpoint: 配置为内网IP 172.23.96.138
  • worker节点: 使用内网IP连接master配置正确的token
  • 验证: 最后一次Ansible运行显示 changed=0,配置稳定

可以安全地重复运行部署脚本,不会出错!

2. 测试项目已创建

已创建完整的测试应用 test-app,包含:

🌐 访问方式

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

功能:

  • 查看所有应用的同步状态
  • 手动触发同步
  • 查看部署历史
  • 回滚到之前的版本

Gitea Web UI

功能:

  • 管理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

🔧 故障排查

应用无法访问

  1. 检查Pod状态
kubectl get pods -l app=test-app
kubectl describe pod <pod-name>
kubectl logs <pod-name>
  1. 检查Service
kubectl get svc test-app
kubectl describe svc test-app
  1. 检查Ingress
kubectl get ingress test-app
kubectl describe ingress test-app

ArgoCD同步失败

  1. 查看应用状态
kubectl get application test-app -n argocd
kubectl describe application test-app -n argocd
  1. 查看ArgoCD日志
kubectl logs -n argocd deployment/argocd-application-controller
kubectl logs -n argocd deployment/argocd-repo-server
  1. 检查Git仓库连接
# 在master节点测试
curl http://gitea-http.gitea.svc.cluster.local:3000/k3s-apps/test-app.git

域名无法访问

  1. 检查DNS解析
nslookup test.jpc.net3w.com
# 或
dig test.jpc.net3w.com
  1. 检查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
  1. 临时使用hosts文件
# 添加到 /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. 监控资源使用

    kubectl top nodes
    kubectl top pods -A
    
  4. 使用命名空间隔离应用

    kubectl create namespace production
    kubectl create namespace staging
    
  5. 配置资源限制 在Deployment中添加

    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环境

📞 获取帮助