Akemi

Python代码封装至k8s中运行

2024/06/01

查看mian函数与requirements.txt文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
这两个文件被封装在压缩包里
cat main.py
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
return "Hello from Python!"

if __name__ == "__main__":
app.run(host='0.0.0.0')

cat requirements.txt
Flask

创建Dockerfile并构建镜像

1
2
3
4
5
6
7
8
cat dockerfile 
FROM python:3.7 # 用Python3.7镜像作为基础镜像
WORKDIR /app
ADD . /app/
RUN /usr/local/bin/python -m pip install --upgrade pip # 升级pip包管理器
RUN pip install -r requirements.txt # 需求包文件
EXPOSE 5000 # 声明5000端口
CMD ["python","/app/main.py"]

docker build -t hello-python:v1 .

传送到目标节点或上传至私有仓库

docker save -o hello.tar.gz hello-python:v1

docker tag hello-python:v1 192.168.10.130/wangsheng/hello-python:v1
docker push 192.168.10.130/wangsheng/hello-python:v1

封装成deployment

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-python
spec:
selector:
matchLabels:
app: hello-python
replicas: 1
template:
metadata:
labels:
app: hello-python
spec:
containers:
- name: hello-python
image: 192.168.10.130/wangsheng/hello-python:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 5000
---
apiVersion: v1
kind: Service
metadata:
name: hello-python-service
spec:
selector:
app: hello-python
ports:
- protocol: "TCP"
port: 6000
targetPort: 5000
type: NodePort
1
2
3
4
5
6
7
8
9
kubectl apply -f deployment.yaml
kubectl get pods -owide
#NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
#hello-python-766fc45645-gqhwr 1/1 Running 0 86s 10.244.179.39 ws-k8s-node1 <none> <none>

kubectl get svc
#NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
#hello-python-service NodePort 10.105.115.32 <none> 6000:31096/TCP 71s
#kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 82d

测试

CATALOG
  1. 1. 查看mian函数与requirements.txt文件
  2. 2. 创建Dockerfile并构建镜像
  3. 3. 传送到目标节点或上传至私有仓库
  4. 4. 封装成deployment
  5. 5. 测试