Skip to content

05 - 完整实操:部署 Web 应用到 K8s

目标

在 K8s 上部署一个完整的 Nginx + Flask API + Redis 应用栈,综合运用前面学到的所有核心资源。

架构

用户 → NodePort Service → Nginx (反向代理)


                    ClusterIP Service → Flask API (3 副本)


                                  ClusterIP Service → Redis

部署步骤

所有 YAML 文件在 ../manifests/full-app/ 目录。

bash
# 1. 创建命名空间
kubectl apply -f namespace.yaml

# 2. 创建 ConfigMap 和 Secret
kubectl apply -f configmap.yaml
kubectl apply -f secret.yaml

# 3. 部署 Redis
kubectl apply -f redis-deployment.yaml
kubectl apply -f redis-service.yaml

# 4. 部署 Flask API
kubectl apply -f api-deployment.yaml
kubectl apply -f api-service.yaml

# 5. 部署 Nginx
kubectl apply -f nginx-configmap.yaml
kubectl apply -f nginx-deployment.yaml
kubectl apply -f nginx-service.yaml

# 或者一次性部署
kubectl apply -f ../manifests/full-app/

# 6. 验证
kubectl get all -n demo-app
kubectl port-forward -n demo-app svc/nginx 8080:80
# 打开 http://localhost:8080

验证和调试

bash
# 查看所有资源
kubectl get all -n demo-app

# 查看 Pod 日志
kubectl logs -n demo-app -l app=api -f

# 进入 Pod 调试
kubectl exec -n demo-app -it deploy/api -- sh

# 测试内部 DNS
kubectl run test --rm -it -n demo-app --image=busybox -- \
  wget -qO- http://api:5000/health

# 扩容 API
kubectl scale -n demo-app deployment/api --replicas=5

# 更新版本
kubectl set image -n demo-app deployment/api api=myapi:v2

# 回滚
kubectl rollout undo -n demo-app deployment/api

# 清理
kubectl delete namespace demo-app

学到了什么

  • Namespace 隔离环境
  • Deployment 管理无状态应用
  • Service 提供稳定的服务发现
  • ConfigMap/Secret 外部化配置
  • 标签选择器串联资源
  • 滚动更新和回滚

下一步

Phase 5 - K8s 网络