这里以老师的指导文档为例,实现一个基于flask和redis的web网页,用户每输入网址浏览一次就加一次浏览量并显示在网页上。
Docker拉取镜像
拉取Python镜像
1
|
sudo docker pull python
|

拉取redis镜像

查看镜像

编辑所需文件
编辑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的节点)
