提前编写通用模板,和初始化python脚本,不同的部署包只需定义相应的变量文件就可以生成部署yaml文件,示例如下:
# 模板文件,保存为deployment.yml.j2
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ name }}
namespace: {{ namespace }}
spec:
replicas: {{ replicas }}
selector:
matchLabels:
app: {{ name }}
template:
metadata:
labels:
app: {{ name }}
spec:
containers:
- name: {{ name }}
image: {{ image }}
ports:
- containerPort: {{ port }}
---
apiVersion: v1
kind: Service
metadata:
name: {{ name }}-svc
namespace: {{ namespace }}
spec:
selector:
app: {{ name }}
type: NodePort
ports:
- protocol: TCP
port: {{ port }}
# 配置文件,保存为variables.yml
name: myapp
namespace: default
replicas: 1
image: myapp:latest
port: 8080
# python 脚本createDep.py,最终生成部署文件 deployment_{appname}.yaml
# python2.7 安装yaml包 pip install pyyaml
from jinja2 import Environment, FileSystemLoader
import yaml
env = Environment(loader=FileSystemLoader('.'))
template = env.get_template('deployment.yml.j2')
variables = yaml.safe_load(open('variables.yml'))
output = template.render(variables)
output_file = "deployment_" + variables["name"] + ".yaml"
with open(output_file, 'w') as f:
f.write(output)