K8S部署文件的模板化

提前编写通用模板,和初始化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)

Leave a Reply

Your email address will not be published. Required fields are marked *