k8s部署restful服务

拼搏现实的明天。 2023-09-26 20:03 176阅读 0赞

它的目录格式如下,一切操作都是在当前目录上操作的,在linux环境下操作

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MDcyODA3MA_size_16_color_FFFFFF_t_70

在已经安装docker k8s的基础上,首先是创建镜像,我们这里面代码用的是python,实现的功能是两个数相除。

创建镜像时有三个文件Dockerfile, requirements.txt, divide.py

Dockerfile的内容

  1. FROM python:3.6.3 // FROM:指定创建镜像的基础镜像
  2. COPY . /divide // 复制宿主机数据到镜像内部使用
  3. WORKDIR /divide //工作目录,类似于cd命令
  4. RUN pip install -r requirements.txt // 运行Linux系统的命令使用
  5. ENTRYPOINT ["python"] //指定运行容器启动过程执行命令,覆盖CMD参数
  6. CMD ["divide.py"] // 指定容器启动执行的命令;启动容器中的服务

requirements.txt

  1. flask
  2. flask_restful

divide.py

  1. from flask import Flask
  2. from flask_restful import reqparse, Api, Resource
  3. app = Flask(__name__)
  4. api = Api(app)
  5. parser = reqparse.RequestParser()
  6. parser.add_argument('a')
  7. parser.add_argument('b')
  8. class PredictSentiment(Resource):
  9. def get(self):
  10. # use parser and find the user's query
  11. args = parser.parse_args()
  12. a, b = args['a'], args['b']
  13. c = int(a) / int(b)
  14. return {'result': c, }
  15. # Setup the Api resource routing here
  16. # Route the URL to the resource
  17. api.add_resource(PredictSentiment, '/')
  18. if __name__ == '__main__':
  19. app.run(debug=True,host='0.0.0.0')

    app.run(debug=False)

最开始app.run()中的参数如下,

在我本机跑这个divide.py的时候通过http://127.0.0.1:5000/?a=1&b=2访问是好使的,但是制作完docker 镜像后http://127.0.0.1:5000/?a=1&b=2,访问不到,我也不知道是为什么,加一个host参数就好使了,但是地址前缀变为http://172.22.101.85/,具体什么原理我也不知道。

制作docker

  1. docker build -t divide:1.0 .

大家千万别忘了后面有个 .

我一般建完镜像后都会运行一下该镜像是否好使,否则怕创建k8s服务出错,不知道是谁的问题

  1. docker run -it -p 5000:5000 divide:1.0

运行完之后,如果好使,就会出现一个地址直接访问就ok了,

但是我这里有一个bug, 因为这个地址是带两个参数的,我用curl,访问的时候就好像只能传一个参数,我不知道为什么,还没有解决

接下来就是k8s中的内容了

创建pod.yaml

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: restful-divide
  5. labels:
  6. app: divide
  7. spec:
  8. containers:
  9. - name: divide
  10. image: multiply:1.0
  11. ports:
  12. - containerPort: 5000
  13. imagePullPolicy: Never

kubectl create -y pod.yaml

imagePullPolicy: Never 这个非关键,要不然可能会要把本地制作的镜像先传到dockerhub,再拉下来才能使用

创建svc.yaml

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: restful-divide-svc
  5. spec:
  6. selector:
  7. app: divide
  8. type: NodePort
  9. ports:
  10. - protocol: TCP
  11. port: 5000
  12. targetPort: 5000

kubectl create -y svc.yaml

就创建成功了

kubectl get svc

就可以查到端口号了

就可以访问了




k8s部署restful服务_flask_restful k8s_小夏小夏要坚强的博客-CSDN博客

发表评论

表情:
评论列表 (有 0 条评论,176人围观)

还没有评论,来说两句吧...

相关阅读