Kubernetes(K8s)Pod部署

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

1.docker拉取镜像

拉取Python镜像

sudo docker pull python

图片.png
拉取redis镜像

sudo docker pull redis

图片.png
查看镜像

docker images

图片.png

2.编辑所需文件

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

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)

图片.png
编写dockerfile

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"]

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

3.生成新的镜像

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

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

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"

图片.png

kubectl apply -f flaskredisdeploy.yaml

图片.png

4.访问Web和Windows访问

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

编辑service.yaml

gedit myflaskservice.yaml
apiVersion: v1
kind: Service
metadata:
  name: myflaskservice
spec:
  selector:
    app: flaskredis
  ports:
    - protocol: TCP
      port: 8080   #Service的端口号
      targetPort: 5000 #容器暴露的真实端口号
      nodePort: 30081  #node的真实端口号
  type: NodePort

图片.png
创建service

kubectl apply -f myflaskservice.yaml

遇见报错,这个报错的意思是该端口已经被占用,修改端口号
图片.png
图片.png
成功创建service,查看service

kubectl get svc -o wide

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

posted @ 2024-06-02 10:37  rusthx  阅读(35)  评论(0)    收藏  举报