首页 > 其他分享 >k8s部署flask

k8s部署flask

时间:2023-02-13 15:24:46浏览次数:41  
标签:__ 5000 flask app 部署 pod k8s port

k8s部署java服务是比较简单的,因为jar包已经包含了应用的所有内容,再加上JVM就可以开心的跑起来了。

但是python服务比较特别,不仅需要python执行环境和应用代码,一般还需要依赖一系列第三方的包。

下面使用python比较流行的flask框架,来实现一个mini的web服务。

一、构建镜像

首先拉取基础镜像

#拉取基础镜像
docker pull python:3.8-slim

下面是应用的代码,简单起见,只有一个文件app.py

from flask import Flask, make_response, request

app = Flask(__name__)


@app.route('/')
def index():
    return "Hello, World!"


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

依赖的第三方包requirements.txt

Flask==2.0.3

将上面两个文件跟dockerfile放在一个目录

FROM python:3.8-slim
WORKDIR /usr/src/app
COPY requirements.txt /usr/src/app
COPY app.py /usr/src/app
RUN pip install -r requirements.txt
EXPOSE 5000
CMD [ "python", "app.py"]

重新构建镜像

docker build -t  wangbin2188/flask:2.0.3 .
##docker启动容器
docker run -d -p 5000:5000 --name flask-app wangbin2188/flask:2.0.3
#访问5000端口,返回hello,world
curl 0.0.0.0:5000

这就证明我的镜像打包成功了,我们的目标是在k8s部署flask,所以还要继续

二、k8s部署

使用如下命令生成pod模板

kubectl run flask-app --image=wangbin2188/flask:2.0.3 --dry-run=client -o yaml

最终的pod配置文件flask-app.yaml如下

apiVersion: v1
kind: Pod
metadata:
  name: flask-app
  labels:
    app: flask-app
spec:
  containers:
  - image: wangbin2188/flask:2.0.3
    name: flask-app
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 5000
  dnsPolicy: ClusterFirst
  restartPolicy: Always

通过kubectl apply -f flask-app.yaml创建pod,通过kubectl  get po查看pod的状态

但这时应用虽然起来了,却只能在pod内部访问,我们可以通过port-forward将pod的端口映射出来

#把本机的端口映射到在pod的端口号
kubectl port-forward flask-app 5000:5000 &
#在本机curl,返回hello,world
curl 0.0.0.0:5000
hello,world

总是用port-forward并不优雅,我们可以给pod生成一个service

#给上面的deploy生成一个service
kubectl expose pod flask-app --port=5000 --target-port=5000 --dry-run=client -o yaml

最终的service配置

apiVersion: v1
kind: Service
metadata:
  labels:
    app: flask-app
  name: flask-app
spec:
  ports:
  - port: 5000
    protocol: TCP
    targetPort: 5000
  selector:
    app: flask-app
  type: NodePort

这样就可以在集群外访问flask-app了。

标签:__,5000,flask,app,部署,pod,k8s,port
From: https://www.cnblogs.com/wangbin2188/p/17116489.html

相关文章

  • 记一次虚机强制断电 K8s 集群 etcd pod 挂掉快照丢失(没有备份)问题处理
    写在前面不小心拔错电源了,虚机强制关机,开机后集群死掉了记录下解决方案断电导致etcd快照数据丢失,没有备份.基本上是没办法处理可以找专业的DBA来处理数据看有没有可......
  • Docker 服务编排 快速部署 SpringCloud 项目 (一)
    一、docker-compose.ymlversion:"3.3"networks:zeal:volumes:data:services:gateway:restart:alwaysbuild:context:./gateway......
  • kubernetes 1.20二进制安装部署
    1.服务器资源规划服务器名称ip地址部署服务k8s-master1192.168.3.112apiserver,controller-manager,schedulerkubelet,kube-proxy,docker,etcd,haproxy,keepalived......
  • k8s安装YAPI
    一、前置条件提前安装MongoDB二、YAML文件namespace自行替换Deployment.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:......
  • k8s——调度与驱逐
    设置节点不可调度,逐台进行kubectlcordonxxx-node-01kubectlcordonxxx-node-02kubectlcordonxxx-node-03驱逐节点上的pod,逐台进行kubectldrainxxx-node-01-......
  • centos下安装部署nginx
    1.在安装Nginx之前,要确保已经安装了需要的软件:gcc、pcre-devel、zlib-devel、openssl-devel。如果没有安装,执行下面命令。  yum-yinstallgccpcre-develzlib-deve......
  • 使用kubeadm快速部署一个K8s集群
    kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。这个工具能通过两条指令完成一个kubernetes集群的部署:#创建一个Master节点$kubeadminit#将一个Node......
  • K8S的基础概念
    一、Kubernetes介绍1、什么是Kubernetes?Kubernetes(通常称为K8s,K8s是将8个字母“ubernete”替换为“8”的缩写)是一个以容器为中心的基础架构,可以实现在物理集群或虚拟......
  • kubeadm部署安装+dashboard+harbor
    一、kubeadm部署1、环境准备12345678910111213141516171819202122232425262728293031323334353637383940414243444......
  • 一个容器,但是一整个k8s集群
    你可能需要一个快速启动和销毁的k8s集群;你可能在资源受限的环境中运行k8s集群;你可能是一个完全的初学者,觉得搭建完整的k8s套件太难。那么这篇短文可能可以帮到你。......