gpt4 book ai didi

python - 在Kubernetes中容器化Flask微服务

转载 作者:行者123 更新时间:2023-12-02 12:01:25 26 4
gpt4 key购买 nike

我已经在使用Kubernetes编写微服务的Flask集群上工作了一段时间,但不确定当前的容器化方法是否正确。

我一直在使用this图像作为基础。

但是我一直在看到各种各样的帖子,说这样的话可能有点过大。

我的问题是,每当我查找有关将FlaskKubernetes结合使用的文章时,他们总是会跳过实际容器的详细信息,而专注于构建集群,这已经是我的一个坚实的技巧了。我想我想知道的是,是否有更好的方法为单个Flask应用程序构建docker镜像,因为很难找到一个直接的答案。

最佳答案

“更好”是完全相对的,但这是我使用的。

FROM python:3.7 AS build

ENV PYTHONFAULTHANDLER=1 \
PYTHONUNBUFFERED=1 \
PYTHONHASHSEED=random \
PIP_NO_CACHE_DIR=off \
PIP_DISABLE_PIP_VERSION_CHECK=on \
PIP_DEFAULT_TIMEOUT=100

RUN pip install poetry==1.0.5

WORKDIR /app
COPY poetry.lock pyproject.toml /app/
RUN poetry config virtualenvs.create false && \
poetry install --no-dev --no-interaction --no-ansi


FROM gcr.io/distroless/python3-debian10

WORKDIR /app
ENV PYTHONPATH=/usr/local/lib/python3.7/site-packages/
COPY --from=build /usr/local/lib/python3.7/site-packages/ /usr/local/lib/python3.7/site-packages/
COPY . /app

CMD ["-m", "myapp"]

使用-m入口点,如下所示:
from . import create_app

application = create_app()


def main() -> None:
import sys
from twisted import logger # type: ignore
from twisted.internet import reactor # type: ignore
from twisted.internet.endpoints import TCP4ServerEndpoint # type: ignore
from twisted.python import threadpool # type: ignore
from twisted.web.server import Site # type: ignore
from twisted.web.wsgi import WSGIResource # type: ignore
from prometheus_client.twisted import MetricsResource # type: ignore

observers = [logger.textFileLogObserver(sys.stdout)]
logger.globalLogBeginner.beginLoggingTo(observers)
logger.Logger().info("myapp starting on :8000")

pool = threadpool.ThreadPool()
reactor.callWhenRunning(pool.start)
django_resource = WSGIResource(reactor, pool, application)
django_site = Site(django_resource)
django_endpoint = TCP4ServerEndpoint(reactor, 8000)
django_endpoint.listen(django_site)
metrics_resource = MetricsResource()
metrics_site = Site(metrics_resource)
metrics_endpoint = TCP4ServerEndpoint(reactor, 9000)
metrics_endpoint.listen(metrics_site)
reactor.run()
pool.stop()


if __name__ == "__main__":
main()

关于python - 在Kubernetes中容器化Flask微服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61329734/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com