Files
ljwx-study/DEPLOYMENT.md
2026-01-29 18:29:48 +08:00

6.4 KiB
Raw Permalink Blame History

Pager Application - 部署指南

目录


一键部署

快速开始

使用提供的部署脚本一键部署到 Kubernetes:

cd /Users/brunogao/work/codes/pingan/pager
./deploy.sh

部署脚本功能

脚本将自动完成以下步骤:

  1. ✅ 构建 Docker 镜像

    • Backend: pager-backend:latest
    • Frontend: pager-frontend:latest
  2. ✅ 创建 Kubernetes 资源

    • Namespace: learn
    • PostgreSQL 数据库
    • Backend 和 Frontend 部署
  3. ✅ 等待部署完成

    • 自动等待所有 Pod 就绪
  4. ✅ 显示部署状态

    • Pods、Services、Ingress 状态

访问应用

部署成功后,访问:


手动部署

步骤 1: 构建镜像

# 构建 Backend
cd backend
docker build -t pager-backend:latest .

# 构建 Frontend
cd ../frontend
docker build -t pager-frontend:latest .

步骤 2: 部署到 Kubernetes

# 创建 namespace
kubectl create namespace learn

# 部署应用
kubectl apply -f k8s/learn-deployment.yaml

步骤 3: 验证部署

# 查看 Pods
kubectl get pods -n learn

# 查看 Services
kubectl get svc -n learn

# 查看 Ingress
kubectl get ingress -n learn

CI/CD 自动部署

配置 Gitea Secrets

在 Gitea 仓库设置中添加以下 Secrets:

  1. KUBECONFIG
    cat ~/.kube/config | base64 | tr -d '\n'
    
    将输出的 base64 字符串作为 Secret 值

触发部署

推送代码到 main 或 master 分支会自动触发 CI/CD 流程:

git add .
git commit -m "Update application"
git push origin main

CI/CD 流程

  1. Build - 构建 Docker 镜像
  2. Test - 运行单元测试
  3. Deploy - 部署到 Kubernetes
  4. Verify - 健康检查验证

查看 CI/CD 状态

访问 Gitea Actions 页面查看部署进度:

  • Gitea URL: http://<gitea-url>/pager/actions

常用命令

查看日志

# Backend 日志
kubectl logs -n learn -l app=pager-backend -f

# Frontend 日志
kubectl logs -n learn -l app=pager-frontend -f

# PostgreSQL 日志
kubectl logs -n learn -l app=pager-postgres -f

重启服务

# 重启 Backend
kubectl rollout restart deployment/pager-backend -n learn

# 重启 Frontend
kubectl rollout restart deployment/pager-frontend -n learn

扩缩容

# 扩容 Backend 到 3 个副本
kubectl scale deployment/pager-backend -n learn --replicas=3

# 扩容 Frontend 到 3 个副本
kubectl scale deployment/pager-frontend -n learn --replicas=3

访问数据库

# 进入 PostgreSQL Pod
kubectl exec -it -n learn <postgres-pod-name> -- psql -U pager_user -d pager_db

# 直接执行 SQL
kubectl exec -it -n learn <postgres-pod-name> -- psql -U pager_user -d pager_db -c "SELECT * FROM users LIMIT 10;"

故障排查

Pod 无法启动

# 查看 Pod 事件
kubectl describe pod -n learn <pod-name>

# 查看 Pod 日志
kubectl logs -n learn <pod-name>

# 查看上一次的日志(如果 Pod 重启)
kubectl logs -n learn <pod-name> --previous

镜像拉取失败

确认镜像已构建:

docker images | grep pager

如果镜像不存在,重新构建:

./deploy.sh

数据库连接失败

检查 PostgreSQL 状态:

kubectl get pods -n learn -l app=pager-postgres
kubectl logs -n learn -l app=pager-postgres

验证数据库连接:

kubectl exec -it -n learn <postgres-pod> -- psql -U pager_user -d pager_db -c "SELECT 1;"

Ingress 无法访问

检查 Ingress 配置:

kubectl describe ingress -n learn

检查 Ingress Controller:

kubectl get pods -n infra -l app.kubernetes.io/name=ingress-nginx
kubectl logs -n infra -l app.kubernetes.io/name=ingress-nginx

测试本地访问:

curl -H "Host: learn.omniverseai.net" http://localhost:31080/

配置说明

环境变量

Backend 环境变量在 K8s ConfigMap 和 Secret 中配置:

  • DATABASE_URL: PostgreSQL 连接字符串
  • REDIS_URL: Redis 连接字符串(如果使用)
  • API_PORT: API 服务端口(默认 8888)
  • ENVIRONMENT: 运行环境(production/development)

资源限制

默认资源配置:

Backend:

  • Requests: 512Mi memory, 500m CPU
  • Limits: 2Gi memory, 2000m CPU

Frontend:

  • Requests: 128Mi memory, 100m CPU
  • Limits: 512Mi memory, 500m CPU

PostgreSQL:

  • Requests: 256Mi memory, 200m CPU
  • Limits: 1Gi memory, 1000m CPU

健康检查

Backend 健康检查端点:

  • Liveness: /health (每 10 秒检查一次)
  • Readiness: /health (每 5 秒检查一次)

更新应用

方式 1: 使用部署脚本

./deploy.sh

方式 2: 手动更新

# 构建新镜像
docker build -t pager-backend:latest backend/
docker build -t pager-frontend:latest frontend/

# 重启部署触发更新
kubectl rollout restart deployment/pager-backend -n learn
kubectl rollout restart deployment/pager-frontend -n learn

方式 3: Git Push 触发 CI/CD

git push origin main

回滚部署

# 查看部署历史
kubectl rollout history deployment/pager-backend -n learn

# 回滚到上一个版本
kubectl rollout undo deployment/pager-backend -n learn

# 回滚到特定版本
kubectl rollout undo deployment/pager-backend -n learn --to-revision=2

监控和日志

实时监控

# 监控 Pod 状态
watch kubectl get pods -n learn

# 监控资源使用
kubectl top pods -n learn
kubectl top nodes

日志聚合

# 查看所有 Backend Pods 的日志
kubectl logs -n learn -l app=pager-backend --tail=100 -f

# 查看特定时间范围的日志
kubectl logs -n learn <pod-name> --since=1h

清理资源

删除应用

# 删除应用但保留 namespace
kubectl delete -f k8s/learn-deployment.yaml

# 删除整个 namespace(包括所有资源)
kubectl delete namespace learn

清理 Docker 镜像

docker rmi pager-backend:latest
docker rmi pager-frontend:latest

支持

如有问题,请查看:

  • Kubernetes 日志
  • 应用日志
  • Ingress Controller 日志

或联系开发团队。