部署一个完整的 Web 应用

知识库
知识库文档
/tech-stacks/kubernetes/examples/部署一个完整的 Web 应用.md

文档

K8s 部署完整 Web 应用

目标

部署一个 Flask Web 应用,包含 Deployment、Service、ConfigMap、Ingress。

完整 YAML

1. ConfigMap(configmap.yaml)

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  ENV: "production"
  LOG_LEVEL: "info"

2. Deployment(deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: flask-app
  labels:
    app: flask-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: flask-app
  template:
    metadata:
      labels:
        app: flask-app
    spec:
      containers:
      - name: flask
        image: myregistry/flask-app:v1.0
        ports:
        - containerPort: 5000
        envFrom:
        - configMapRef:
            name: app-config
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 500m
            memory: 256Mi
        livenessProbe:
          httpGet:
            path: /health
            port: 5000
          initialDelaySeconds: 5
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /health
            port: 5000
          initialDelaySeconds: 3
          periodSeconds: 5

3. Service(service.yaml)

apiVersion: v1
kind: Service
metadata:
  name: flask-svc
spec:
  type: ClusterIP
  selector:
    app: flask-app
  ports:
  - port: 80
    targetPort: 5000
    protocol: TCP

4. Ingress(ingress.yaml)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: flask-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - host: app.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: flask-svc
            port:
              number: 80

运行步骤

# 1. 应用所有资源
kubectl apply -f configmap.yaml
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
kubectl apply -f ingress.yaml

# 2. 查看状态
kubectl get pods -w                    # 等待 Pod Ready
kubectl get svc flask-svc             # 查看 Service
kubectl get ingress flask-ingress     # 查看 Ingress

# 3. 端口转发测试(本地没有 Ingress Controller 时)
kubectl port-forward svc/flask-svc 8080:80
curl http://localhost:8080/

# 4. 扩容
kubectl scale deployment flask-app --replicas=5

# 5. 滚动更新
kubectl set image deployment/flask-app flask=myregistry/flask-app:v2.0
kubectl rollout status deployment/flask-app

# 6. 回滚
kubectl rollout undo deployment/flask-app

预期输出

Pod 全部 Ready 后,curl 应返回:

Hello from flask-app-<pod-hash> | ENV=production

信息

路径
/tech-stacks/kubernetes/examples/部署一个完整的 Web 应用.md
更新时间
2026/5/31