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 外部化配置
- 标签选择器串联资源
- 滚动更新和回滚
