Flask简单部署至kubernetes
安装Kubernetes、Docker
项目地址
Flask
flask
run.py
from flask import Flask
import os app = Flask(__name__) @app.route("/index/")
def index():
user = os.environ.get("USER")
password = os.environ.get("PASS")
return f"{user}_{password}" @app.route("/version/")
def version():
env = os.environ.get("ENV")
version = os.environ.get("WEBVERSION")
return f"{env}_{version}" if __name__ == '__main__':
app.run(host="0.0.0.0", port=5000, debug=True)requirements.txt
Flask
gunicorn
gevent
greenlet
Docker
编写dockerfile
Dockerfile
FROM python:3.6.8
RUN mkdir simpleweb
COPY . /simpleweb
WORKDIR /simpleweb
# 升级pip
RUN pip3 install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple # pip读取requirements.txt内容安装所需的库
RUN pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple
CMD ["gunicorn", "-b", ":5000", "-k", "gevent", "run:app"]
构建docker 镜像
docker build -t zhengquantao/simpleweb:latest .
# 可选命令
# docker run 执行容器
# docker exec 进入容器
# docker tag 重命名
# docker login 登录
# docker push 推送到远程仓库
Kubernetes
ConfigMap
存放配置文件
simpleweb-configmap.yaml #
apiVersion: v1
kind: ConfigMap
metadata:
name: simpleweb-configmap
data:
env: "dev"
webVersion: "v1"
Secret
存放敏感信息,通过base64编码
simpleweb-configmap.yaml
apiVersion: v1
kind: Secret
metadata:
name: db-user-pass
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm
Deployment
编写pod
simpleweb.yaml
apiVersion: apps/v1
kind: Deployment # 采用deployment部署
metadata:
name: simpleweb
namespace: default # 默认命名空间
labels:
app: simpleweb
spec:
replicas: 2 # 副本设置1个
selector:
matchLabels:
app: simpleweb
strategy: # 升级策略,这里副本是一个
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
labels:
app: simpleweb
spec:
containers: #容器相关配置
- args: # 启动命令
- gunicorn
- -b
- :5000
- -k
- gevent
- run:app
env: # 这里通过变量注入的方式配置相关参数,你也可以通过数据挂载的方式将配置挂载到容器指定目录下
- name: USER
valueFrom:
secretKeyRef:
name: db-user-pass
key: username
- name: PASS
valueFrom:
secretKeyRef:
name: db-user-pass
key: password
- name: ENV
valueFrom:
configMapKeyRef:
name: simpleweb-configmap
key: env
- name: WEBVERSION
valueFrom:
configMapKeyRef:
name: simpleweb-configmap
key: webVersion
image: zhengquantao/simpleweb:lastest # 镜像地址
imagePullPolicy: IfNotPresent # (IfNotPresent、Never)本地模式有坑,有远程仓库不建议使用
name: simpleweb
ports: # 暴漏端口
- containerPort: 5000
name: tcp5000
protocol: TCP
workingDir: /simpleweb
restartPolicy: Always
terminationGracePeriodSeconds: 5Service
编写service
simplewebsvc.yaml
apiVersion: v1
kind: Service
metadata:
name: simplewebsvc
namespace: default
labels:
app: simplewebsvc
spec:
ports:
- name: tcp5000
port: 5000
protocol: TCP
targetPort: 5000 # 容器端口
nodePort: 31111 # 对外暴露端口
selector:
app: simpleweb # 指向pod
type: NodePort执行部署
kubectl apply -f simpleweb-secret.yaml
kubectl apply -f simpleweb-configmap.yaml
kubectl apply -f simpleweb.yaml
kubectl apply -f simplewebsvc.yaml # kubectl get pods|svc 查看pod
# kubectl create -f 构建pod
# kubectl delete -f 删除pod
# kubectl apply -f 存在更新pod,不存在构建pod
# kubectl describe 查看详情pod
# kubectl logs 查看pod日志
# kubectl port-forward pod端口转发
# kubectl exec 进入pod
验证
curl http://127.0.0.1:31111/index/
Flask简单部署至kubernetes的更多相关文章
- Flask应用部署
1. 介绍 前面介绍了<Linux下Nginx使用>, 但是Nginx是一个提供静态文件访问的web服务 首先我们介绍一下Web服务器, 应用服务器和应用框架的关系 客户端: 浏览器或者a ...
- 使用Minikube部署本地Kubernetes集群(二十八)
前言 使用Minikube部署本地k8s集群相对比较简单,非常推荐将其用于本地k8s开发环境,唯一麻烦点的仅仅是网络问题. 在本篇教程中,我们使用了国内的镜像来完成本地k8s集群的搭建.如果搭建过程中 ...
- Kubernetes 学习笔记(二):本地部署一个 kubernetes 集群
前言 前面用到过的 minikube 只是一个单节点的 k8s 集群,这对于学习而言是不够的.我们需要有一个多节点集群,才能用到各种调度/监控功能.而且单节点只能是一个加引号的"集群&quo ...
- 吾八哥学k8s(二):golang服务部署到kubernetes
本篇主要讲解如何将golang的服务部署到kubernetes集群里,附带相关的golang的demo和yml文件内容.纯新手入门方式,生产服务需要完整的CI/CD流程来支持. golang服务代码 ...
- 把Spring Cloud Data Flow部署在Kubernetes上,再跑个任务试试
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Spring Cloud Data Flow在本地跑得好好的,为什么要部署在Kubernetes上呢?主要是因为Kubern ...
- 把H2数据库从jar包部署到Kubernetes,并解决Ingress不支持TCP的问题
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! H2 Database是一个优秀的数据库,又小又方便,支持内存和文件形式,经常会在测试.POC(proof of conce ...
- 高并发Flask服务部署
高并发Flask服务部署 AI模型持久化 OOP: 利用面向对象思想,实现算法在内存上的实例化及持久化.即一次模型加载,多次请求调用. class ocr_infer_class(threading. ...
- 使用 Kubeadm+Containerd 部署一个 Kubernetes 集群
本文独立博客阅读地址:https://ryan4yin.space/posts/kubernetes-deployemnt-using-kubeadm/ 本文由个人笔记 ryan4yin/knowle ...
- ingress-nginx 的使用 =》 部署在 Kubernetes 集群中的应用暴露给外部的用户使用
文章转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247488189&idx=1&sn=8175f067 ...
- XenApp简单部署
作者:MR.Yangwj 目录 XenApp简单部署... 1 一. XenApp安装... 1 (一) 服务器配置任务... 9 1) 许可证服务器配置... 9 ...
随机推荐
- java集合源码详解
一 Collection接口 1.List 1.1ArrayList 特点 1.底层实现基于动态数组,数组特点根据下表查找元素速度所以查找速度较快.继承自接口 Collection ->Lis ...
- github 小技巧
前言 简单记一下github 小技巧,因为经常忘. 正文 就是如何快速搜索到自己想找的项目. 如果自己知道项目名,那么直接输入就可以搜索到. 如果不是,那么一般要通过高级搜索. https://git ...
- Git 各指令的本质
前言 作为当前世界上最强大的代码管理工具Git相信大家都很熟悉,但据我所知有很大一批人停留在clone.commit.pull.push...的阶段,是不是对rebase心里没底只敢用merge? 碰 ...
- 【笔记】Oracle使用笔记 0-sql injection&&&result of string concatenation is too long
报错:数据库操作错误."27,34006/v1:0-sql injection(SQL注入) 出现这个报错的情况背景是使用后端函数进行前端SQL语句组合进行数据插入的时候的提示 不太清楚是因 ...
- 第12課-Mirth生产环境宕机后基于服务配置XML备份恢复之记录
Mirth Connect作为集成交换平台,生产环境互联互通了众多系统,脑残的是连自家关键业务系统都依托mirth来进行交互,宕机或故障对身处其中的一次紧张的业务系统升级都造成高度的精神紧张:这种宕机 ...
- HarmonyOS NEXT应用开发之Axios获取解析网络数据
介绍 本示例介绍使用第三方库的Axios获取GBK格式的网络数据时,通过util实现GBK转换UTF-8格式.该场景多用于需要转换编码格式的应用. 效果图预览 使用说明 直接进入页面就可获取GBK格式 ...
- 使用日志上下文聚合插件使能上下文查询及Livetail
简介: 日志上下文浏览是排查业务故障时常用的方式,但受限于Logtail插件系统的设计,在Logtail 1.2.1版本前,如果用户使用Logtail插件来处理日志或采集容器的标准输出,那么用户将无法 ...
- OpenSergo 正式开源,多家厂商共建微服务治理规范和实现
简介 OpenSergo,Open 是开放的意思,Sergo 则是取了服务治理两个英文单词 Service Governance 的前部分字母 Ser 和 Go,合起来即是一个开放的服务治理项目. ...
- 一文读懂容器存储接口 CSI
简介: 在<一文读懂 K8s 持久化存储流程>一文我们重点介绍了 K8s 内部的存储流程,以及 PV.PVC.StorageClass.Kubelet 等之间的调用关系.接下来本文将将重点 ...
- EMR on ACK 全新发布,助力企业高效构建大数据平台
简介: 阿里云 EMR on ACK 为用户提供了全新的构建大数据平台的方式,用户可以将开源大数据服务部署在阿里云容器服务(ACK)上.利用 ACK 在服务部署和对高性能可伸缩的容器应用管理的能力优 ...