k8s-如何将python项目部署成service
毕业设计需要设计一个 kubernetes 的系统,寒假前在实验室的电脑上搭建了 k8s 的集群,但是寒假后回来不知道为什么集群失效了。。重新配置又花了很久时间,正式开始推进毕设大概两周,主要做的工作是把图片识别的 python 项目部署到了 k8s 的集群上(顺便可视化了一下)。
# 实验环境
主机 ip | 名称 | 系统 |
---|---|---|
192.168.1.129 | k8s-master01 | ubuntu |
192.168.1.130 | k8s-node01 | ubuntu |
192.168.1.131 | k8s-node02 | ubuntu |
# Docker image 的创建
kubernetes 本质上来说还是一个管理 dokcer 的工具,因此首先需要制作 Dockerfile 把我们的 python 项目制作成镜像,我使用了 winscp 把 python 项目文件夹复制到了虚拟机上,进入该目录
1 | vi Dockerfile # 创建Dockerfile |
Dockerfile 的内容如下
1 | FROM python:3.8-slim-buster # 拉取基础镜像 |
输入:wq 保存并且退出,输入以下命令,创建镜像
1 | docker build -t lcy200077/app:v1 . |
出现 successful 提示后,输入以下命令就可以看见多了一个名称为 lcy200077/app 的镜像,版本是 v1
1 | docker images |
# 上传镜像至中央仓库
成功创建 lcy200077/app 镜像后,下一步是把 docker 镜像上传至中央仓库,这一步的前提是需要在 DockerHub 上注册账号,非常便捷,上传后就可以随时随地拉取
注意在上传镜像时,dokcer 镜像的名称必须是 username/xxx ,其中 username 是个人在 DockerHub 上的用户名,xxx 是镜像的名字,可以任意
第一步是在 ubuntu 虚拟机上登录 dockerhub 的账号,输入以下命令,出现对应提示后输入用户名和密码,若成功,会提示 success
1 | docker login |
在 build 该镜像的虚拟机上执行以下命令,将镜像 push 到中央仓库
1 | docker push lcy200077/app:v1 |
# 编写 YAML 文件与创建 service 服务
服务可以通过 yaml 文件在 master 节点上使用以下命令创建
1 | kubectl apply -f xxx.yaml |
我的实验环境中,每一个 node 节点跑一个指定的 docker 容器,master 节点的负责负载均衡的算法调配,以下 yaml 文件以 node01 节点上部署的服务为例子(实际上我对于 yaml 文件的写法只知道个大概)
其中 replicas 指定了容器的数量,image 指定了拉取的镜像,nodeName 指定了跑在哪个节点上,如果不确定节点名称可以通过 kubectl get nodes 命令在 master 节点上查看,containerPort 指定了容器暴露的端口,我的两个端口一个用于收取信息一个用于发送信息,连接方式都是 TCP,service 部分的 type 指定了服务向外界暴露的方式,即通过端口 nodePort,指定端口 30026 对应容器端口 8888,指定端口 30027 对应端口 8889。
1 | apiVersion: apps/v1 |
使用以下命令部署服务
1 | kubectl apply -f app.yaml |
使用以下命令查看部署的服务,若状态是 running,就是运行成功,可以通信了~
1 | kubectl get service / kubectl get svc # 查看部署成功的服务,会显示my-python-xxxx,以及端口 |
使用以下命令查看 pod 的状态
1 | kubectl describe po my-python-xxx #最后一个为pod的名字 |
k8s-如何将python项目部署成service