我有一个正在运行的k8s部署,其中包含一个容器。
我想部署10多个容器,在部署清单中有一些不同(即命令启动,容器名称,…)。
与其在整个部署中创建10个以上的.yml文件,我更愿意使用模板。我该怎么做才能达到这个目标呢?
---
apiVersion: v1
kind: CronJob
metadata:
name: myname
labels:
app.kubernetes.io/name: myname
spec:
schedule: "*/10 * * * *"
jobTemplate:
spec:
template:
metadata:
labels:
app.kubernetes.io/name: myname
spec:
serviceAccountName: myname
containers:
- name: myname
image: 'mynameimage'
imagePullPolicy: IfNotPresent
command: ["/my/command/to/launch"]
restartPolicy: OnFailure
Kustomize似乎是kubernetes配置中模板化、组合、多环境覆盖等的首选工具。它现在也直接内置到kubectl
中。
您可以指定一组要创建的容器,您可以这样做:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: container1
image: your-image
- name: container2
image: your-image
- name: container3
image: your-image
,你可以重复这个容器的定义,只要你想。
另一种方法是使用像上面提到的helm/customize这样的模板引擎。
使用helm,这是Kubernetes清单的模板引擎,您可以按照我的指导创建自己的模板。
如果您从未使用过
helm
,您可以查看官方文档为了让您遵循,请确保您已经安装了helm !
-创建一个新图表:
helm create cowboy-app
这将为您生成一个新项目。
-删除templates
目录中的所有内容
-删除所有values.yaml
内容
-在templates
目录下创建一个新文件deployment.yaml
,并粘贴如下:apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Values.appName }}
labels:
chart: {{ .Values.appName }}
spec:
selector:
matchLabels:
app: {{ .Values.appName }}
replicas: 1
template:
metadata:
labels:
app: {{ .Values.appName }}
spec:
containers:
{{ toYaml .Values.images | indent 8 }}
-在values.yaml
粘贴此:
appName: cowboy-app
images:
- name: app-1
image: image-1
- name: app-2
image: image-2
- name: app-3
image: image-3
- name: app-4
image: image-4
- name: app-5
image: image-5
- name: app-6
image: image-6
- name: app-7
image: image-7
- name: app-8
image: image-8
- name: app-9
image: image-9
- name: app-10
image: image-10
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Values.appName }}
labels:
chart: {{ .Values.appName }}
spec:
selector:
matchLabels:
app: {{ .Values.appName }}
replicas: 1
template:
metadata:
labels:
app: {{ .Values.appName }}
spec:
containers:
{{ toYaml .Values.images | indent 8 }}
values.yaml
粘贴此:appName: cowboy-app
images:
- name: app-1
image: image-1
- name: app-2
image: image-2
- name: app-3
image: image-3
- name: app-4
image: image-4
- name: app-5
image: image-5
- name: app-6
image: image-6
- name: app-7
image: image-7
- name: app-8
image: image-8
- name: app-9
image: image-9
- name: app-10
image: image-10
所以如果你熟悉helm你可以告诉{{ toYaml .Values.images | indent 10 }}
在deploy。yaml引用values.yaml中指定的数据。通过运行helm install release-name /path/to/chart
将生成并部署一个清单文件,该文件为deploy . YAML它看起来像这样:
apiVersion: apps/v1
kind: Deployment
metadata:
name: cowboy-app
labels:
chart: cowboy-app
spec:
selector:
matchLabels:
app: cowboy-app
replicas: 1
template:
metadata:
labels:
app: cowboy-app
spec:
containers:
- image: image-1
name: app-1
- image: image-2
name: app-2
- image: image-3
name: app-3
- image: image-4
name: app-4
- image: image-5
name: app-5
- image: image-6
name: app-6
- image: image-7
name: app-7
- image: image-8
name: app-8
- image: image-9
name: app-9
- image: image-10
name: app-10
可以使用Helm或Kustomize. 它们都是模板工具,可以帮助您实现目标