Kubernetes(K8s)Pod部署

这里以老师的指导文档为例,实现一个基于flask和redis的web网页,用户每输入网址浏览一次就加一次浏览量并显示在网页上。

Docker拉取镜像

拉取Python镜像

1
sudo docker pull python

拉取redis镜像

1
sudo docker pull redis

查看镜像

1
docker images

编辑所需文件

编辑Python程序,实现一个基于flask的web应用,在redis中存一个数值,初值为0,每访问一次网站,计数加1。 代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import time
import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='127.0.0.1', port=6379)


def get_hit_count():
    retries = 5
while True:
    try:
        return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
    raise exc
retries -= 1
time.sleep(0.5)


@app.route('/')
def hello():
    count = get_hit_count()
return 'Hello rust! Hello hx! I have been seen {} times.\n'.format(count)

编写dockerfile

1
2
3
4
5
6
7
8
FROM python:latest
WORKDIR /code
ENV FLASK_APP hxapp.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN pip install redis flask -i https://mirror.baidu.com/pypi/simple
COPY hxapp.py hxapp.py
EXPOSE 5000
CMD ["flask","run"]

豆瓣源下redis和flask会报错如下,根据Windows下载这两个包的经验,猜测应该是镜像源的问题,换成百度源,解决问题。

生成新的镜像

1
sudo docker build -t onccn/myflask:v2 -f ./dockerfile .

从kubernetes拉取docker本地镜像 编辑flaskredisdeploy.yaml

 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
apiVersion: apps/v1
kind: Deployment
metadata:
  name: flaskredis
spec:
  selector:
    matchLabels:
      app: flaskredis
  template:
    metadata:
      labels:
        app: flaskredis
    spec:
      containers:
      - name: flaskredis
        image: onccn/myflask:v2
        imagePullPolicy: Never
        resources:
          limits:
            memory: "1500Mi"
            cpu: "1000m"
      - name: redis
        image: redis:latest
        imagePullPolicy: Never
        resources:
          limits:
            memory: "500Mi"
            cpu: "500m"

1
kubectl apply -f flaskredisdeploy.yaml

访问Web和Windows访问

虚拟器中浏览器输入上面查看日志得到的链接

编辑service.yaml

1
gedit myflaskservice.yaml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
apiVersion: v1
kind: Service
metadata:
  name: myflaskservice
spec:
  selector:
    app: flaskredis
  ports:
    - protocol: TCP
      port: 8080   #Service的端口号
      targetPort: 5000 #容器暴露的真实端口号
      nodePort: 30081  #node的真实端口号
  type: NodePort

创建service

1
kubectl apply -f myflaskservice.yaml

遇见报错,这个报错的意思是该端口已经被占用,修改端口号

成功创建service,查看service

1
kubectl get svc -o wide

Windows访问k8s集群的service,进而访问相应的pod ip地址为node的地址(k8s集群中应用service的节点)

网站总访客数:Loading
网站总访问量:Loading
使用 Hugo 构建
主题 StackJimmy 设计