在Kubernetes集群上的Nginx后面部署带有Gunicorn的Flaskapp

bvk5enib  于 2022-09-20  发布在  Kubernetes
关注(0)|答案(1)|浏览(163)

KUBERNETES集群上有没有标准部署FASK APP,GONICORN和NGINX,因为我是通过dockerfile尝试的,如下所示:

FROM nginx:latest as base-image
RUN apt update
RUN apt -y install python3 python3-pip
RUN apt -y install build-essential 

RUN mkdir /app
WORKDIR /app
COPY src src/
COPY src/.nginx/config /etc/nginx/conf.d/default.conf
COPY requirements.txt ./
RUN pip3 install -r requirements.txt

RUN pip3 install -e ./src
RUN pwd
RUN ls -l /app/src

# RUN pytest

EXPOSE 80

WORKDIR /app/src
CMD ["nginx", "-g", "daemon off;"]
ENTRYPOINT ["gunicorn" , "--bind","0.0.0.0:8000", "wsgi:app"]

解决方案是在Kubernetes的一个Pod中分别运行两个容器,分别用于Gunicorn和nginx吗?

wz3gfoph

wz3gfoph1#

解决方案是在Kubernetes的一个Pod中分别运行两个容器,分别用于Gunicorn和nginx吗?

是。在Kubernetes中或在本地机器上简单地运行Docker时,最好组合多个容器,而不是试图将所有内容都塞到一个容器中。

您的Docker文件的这一部分:

CMD ["nginx", "-g", "daemon off;"]
ENTRYPOINT ["gunicorn" , "--bind","0.0.0.0:8000", "wsgi:app"]

并不是在做你似乎期待的事情。这两个指令协同工作:

  • 如果定义,ENTRYPOINT是容器启动时运行的命令。
  • CMD的值作为参数提供给ENTRYPOINT脚本。

您可以在官方文档中阅读有关ENTRYPOINT的更多信息。

更好的设计应该是在您的Python应用程序中使用官方的Python图像:

FROM python:3.10

WORKDIR /app

COPY src src/
COPY requirements.txt ./
RUN pip3 install -r requirements.txt
RUN pip3 install -e ./src

WORKDIR /app/src
CMD ["gunicorn" , "--bind","0.0.0.0:8000", "wsgi:app"]

然后使用官方nginx image运行nginx服务。

一个使用两个容器的示例部署,一个用于您的Python应用程序,一个用于Nginx,可能如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: flask-example
  name: flask-example
spec:
  selector:
    matchLabels:
      app: flask-example
  template:
    metadata:
      labels:
        app: flask-example
    spec:
      containers:
      - image: quay.io/larsks/example:flaskapp
        name: app
      - image: docker.io/nginx:mainline
        name: nginx
        ports:
        - containerPort: 80
          name: http
        volumeMounts:
        - mountPath: /etc/nginx/conf.d
          name: nginx-config
      volumes:
      - configMap:
          name: nginx-config-c65tttk45k
        name: nginx-config

在上面的部署中,我们从ConfigMap挂载nginx的配置。

您可以找到上述here的完整可部署示例。

相关问题