在 Kubernetes 上使用 Flask 搭建 Python 微服务( 五 )

from flask import jsonify, abort

  • controller = UserController()
  • record = controller.find(name)
  • if record is None:
  • abort(404)
  • else:
  • resp = jsonify(record.toJSON())
  • resp.status_code = 200
  • return resp
     
  • 最后,我们需要 Flask 应用程序提供服务,可以使用waitress服务:
     
    1. from waitress import serve
    2. serve(app, host="0.0.0.0", port=8080)
     
    在上面的片段中,应用程序在本地主机的 8080 端口上提供服务 。最终代码如下所示:
     
    1. from flask import Flask, jsonify, abort
    2. from waitress import serve
    3. app = Flask(__name__)
    4. @app.route('/user/')
    5. def get(name):
    6. controller = UserController()
    7. record = controller.find(name)
    8. if record is None:
    9. abort(404)
    10. else:
    11. resp = jsonify(record.toJSON())
    12. resp.status_code = 200
    13. return resp
    14. serve(app, host="0.0.0.0", port=8080)
     
    部署
    FindService的代码已经准备完毕 。除了 REST API 之外,它还有域模型、数据层和应用程序层 。下一步是构建此服务,将其容器化,然后部署到 Kubernetes 上 。此过程与部署其他服务妹有任何区别,但有一些 Python 特有的步骤 。
    在继续前进之前,让我们来看下文件夹和文件结构:
     
    1. + ums-find-service
    2. + ums
    3. - domain.py
    4. - data.py
    5. - app.py
    6. - Dockerfile
    7. - requirements.txt
    8. - kube-find-deployment.yml
       
    如你所见,整个工作文件夹都位于ums-find-service下,它包含了ums文件夹中的代码和一些配置文件,例如Dockerfilerequirements.txtkube-find-deployment.yml
    domain.py包含域模型,data.py包含UserRepositoryImplapp.py包含剩余代码 。我们已经阅读过代码了,现在我们来看看配置文件 。
    第一个是requirements.txt,它声明了 Python 系统需要下载和安装的外部依赖项 。我们需要用查找服务中用到的每个外部 Python 模块来填充它 。如你所见,我们使用了 MySQL 连接器、Flask 和 Waitress 模块 。因此,下面是requirements.txt的内容 。
     
    1. Flask==2.1.1
    2. Flask_RESTful
    3. mysql-connector-python
    4. waitress
       
    第二步是在Dockerfile中声明 Docker 相关的清单,如下:
     
    1. FROM python:3.8-slim-buster
    2. WORKDIR /ums
    3. ADD ums /ums
    4. ADD requirements.txt requirements.txt
    5. RUN pip3 install -r requirements.txt
    6. EXPOSE 8080
    7. ENTRYPOINT ["python"]
    8. CMD ["/ums/app.py"]
     
    总的来说,我们使用 Python 3.8 作为基线,除了移动requirements.txt之外,我们还将代码从ums文件夹移动到 Docker 容器中对应的文件夹中 。然后,我们指示容器运行pip3 install命令安装对应模块 。最后,我们向外暴露 8080 端口(因为 waitress 运行在此端口上) 。


    推荐阅读