You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kubernetes中用Gunicorn和Nginx部署Dash/Flask应用

在Kubernetes中用Gunicorn+Nginx部署Flask/Dash应用

一、改造Flask/Dash应用的Docker镜像

1. 更新依赖文件

在requirements.txt中添加Gunicorn依赖:

flask==2.3.3
dash==2.14.2
gunicorn==21.2.0
# 保留原有其他依赖

2. 替换启动命令(替代Flask开发服务器)

  • Flask后端:
    将原flask run --host=0.0.0.0替换为Gunicorn启动命令,--workers建议设置为2*容器CPU核心数+1,可根据资源调整:

    gunicorn --workers=4 --bind=0.0.0.0:5000 app:app
    

    其中app:app对应你的Flask应用文件(如app.py)中的Flask实例名。

  • Dash前端:
    Dash基于Flask构建,启动逻辑类似,需先在Dash代码中暴露Flask实例:

    # app_dash.py
    from dash import Dash
    
    app = Dash(__name__)
    server = app.server  # 暴露Flask实例供Gunicorn调用
    
    # 其他Dash逻辑...
    

    启动命令:

    gunicorn --workers=4 --bind=0.0.0.0:8050 app_dash:server
    

3. 编写Dockerfile

以Flask后端为例,Dash前端只需修改启动命令和对应应用文件:

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

# 用Gunicorn替代Flask开发服务器启动
CMD ["gunicorn", "--workers=4", "--bind=0.0.0.0:5000", "app:app"]

二、添加Nginx反向代理层

建议Nginx与应用分离部署,负责请求转发、静态资源缓存、负载均衡。

1. 编写Nginx配置文件(nginx.conf)

以代理Flask后端为例,代理Dash只需修改proxy_pass地址:

server {
    listen 80;
    server_name _;

    # 转发请求到Flask的Kubernetes Service
    location / {
        proxy_pass http://flask-service:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # 静态资源缓存配置(如果有)
    location /static {
        alias /app/static;
        expires 30d;
    }
}

2. 构建Nginx镜像的Dockerfile

FROM nginx:alpine

COPY nginx.conf /etc/nginx/conf.d/default.conf

三、调整Kubernetes清单

1. Flask后端的Deployment与Service

Deployment(flask-deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: flask-app
spec:
  replicas: 3  # 根据流量调整副本数
  selector:
    matchLabels:
      app: flask-app
  template:
    metadata:
      labels:
        app: flask-app
    spec:
      containers:
      - name: flask-app
        image: 你的镜像仓库/flask-gunicorn:v1  # 替换为实际镜像地址
        ports:
        - containerPort: 5000
        resources:
          requests:
            cpu: "100m"
            memory: "128Mi"
          limits:
            cpu: "500m"
            memory: "256Mi"
        # 添加健康检查(建议在Flask中实现/health接口)
        livenessProbe:
          httpGet:
            path: /health
            port: 5000
          initialDelaySeconds: 10
          periodSeconds: 5
        readinessProbe:
          httpGet:
            path: /health
            port: 5000
          initialDelaySeconds: 5
          periodSeconds: 3

Service(flask-service.yaml)

apiVersion: v1
kind: Service
metadata:
  name: flask-service
spec:
  selector:
    app: flask-app
  ports:
  - port: 5000
    targetPort: 5000

2. Nginx代理的Deployment与Service(Flask为例)

Deployment(nginx-flask-deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-flask
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-flask
  template:
    metadata:
      labels:
        app: nginx-flask
    spec:
      containers:
      - name: nginx-flask
        image: 你的镜像仓库/nginx-flask:v1  # 替换为实际Nginx镜像地址
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: "50m"
            memory: "64Mi"
          limits:
            cpu: "200m"
            memory: "128Mi"

Service(nginx-flask-service.yaml)

apiVersion: v1
kind: Service
metadata:
  name: nginx-flask-service
spec:
  type: NodePort  # 按需选择LoadBalancer/ClusterIP
  selector:
    app: nginx-flask
  ports:
  - port: 80
    targetPort: 80

3. Dash前端配置

Dash的Deployment、Service调整逻辑与Flask完全一致:

  • 使用Gunicorn启动Dash应用
  • 部署对应Nginx代理
  • 替换镜像、端口(如容器端口8050)和Service名称即可

四、关键注意事项

  • 资源适配:根据实际流量调整Gunicorn worker数、Kubernetes副本数及资源限制,避免资源浪费或不足。
  • 镜像推送:确保所有构建好的镜像(Flask/Gunicorn、Dash/Gunicorn、Nginx)推送到Kubernetes集群可访问的镜像仓库。
  • 负载均衡:若需更高可用性,可在Nginx层配置多上游节点,或使用Kubernetes的Service自带负载均衡能力。

内容的提问来源于stack exchange,提问作者Yoda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 05:07:49