k8s+rancher+阿里云镜像简单部署flask项目
- k8s简单部署一个flask项目示例,镜像从阿里镜像仓库拉取。首先搭建一个k8s集群,用kubeadm,二进制都可以。
1.示例项目准备
simpleweb
|—————Dockerfile
|_____gunicorn.conf
|_____run.py
FROM python:3.6.8
ADD ./requirements.txt /requirements
RUN pip3 install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
ADD . /simpleweb
workers = 1
threads = 1
bind = "0.0.0.0:9005"
worker_connections = 1000
accesslog = "-"
errorlog = "-"
loglevel = "debug"
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 index():
env = os.environ.get("ENV")
version = os.environ.get("WEBVERSION")
return f"{env}_{version}"
2.镜像上传阿里镜像管理
docker build -t simpleweb:lastest .
docker login
# 然后输入密码
docker tag <Image Id> registry.cn-hangzhou.aliyuncs.com/webproject/simpleweb:lastest
docker push registry.cn-hangzhou.aliyuncs.com/webproject/simpleweb:lastest
3.rancher添加阿里云镜像仓库凭证
- k8s在default 命名空间点击资源选择密文,镜像仓库凭证,添加凭证
1.填写名称
2.点击自定义
3.输入用户名密码
- 添加配置项:simpleweb-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: simpleweb-configmap
data:
env: "dev"
webVersion: "v1"
- 添加要配置密码:simpleweb-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: db-user-pass
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm
apiVersion: apps/v1
kind: Deployment# 采用deployment部署
metadata:
name: simpleweb
namespace: default# 默认命名空间
labels:
app: simpleweb
spec:
replicas: 1
selector:
matchLabels:
app: simpleweb
strategy:# 升级策略,这里副本是一个
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
labels:
app: simpleweb
spec:
containers:#容器相关配置
- args:# 启动命令
- gunicorn
- -c
- gunicorn.conf
- 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: registry.cn-hangzhou.aliyuncs.com/webproject/simpleweb:lastest# 镜像地址
imagePullPolicy: Always
name: simpleweb
ports:# 暴漏端口
- containerPort: 9005
name: 9005tcp01
protocol: TCP
workingDir: /simpleweb
imagePullSecrets:# 添加密钥凭据
- name: aliyun
restartPolicy: Always
terminationGracePeriodSeconds: 5
- 添加service暴漏应用:simplewebsvc.yaml
apiVersion: v1
kind: Service
metadata:
name: simplewebsvc
namespace: default
labels:
app: simplewebsvc
spec:
ports:
- name: 9005tcp01
port: 9005
protocol: TCP
targetPort: 9005
selector:
app: simpleweb# 指向pod
type: NodePort
kubectl create -f simpleweb-secret.yaml
kubectl create -f simpleweb-configmap.yaml
kubectl create -f simpleweb.yaml
kubectl create -f simplewebsvc.yaml
http://192.168.1.8:30566/index/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库