[英]kubernetes YML, use for loop
k8s中的模板(yml)文件中是否有用於生成多個項目的機制? 就像一個 for 循環。
例如,我有一個模板用於我的多個項目。 但有些人需要 1 個數據庫,而有些人可能需要 2 個、3 個或更多。 我不想手動定義所有變量,如果有新項目進入並需要新變量,則編輯我的文件。
我今天做的例子:
template:
(...)
containers:
(...)
env:
- name: DATABASE_NAME
value: "{{prj.database.name}}"
- name: DATABASE_NAME_2
value: "{{prj.database.name.second}}"
- name: DATABASE_USER
valueFrom:
secretKeyRef:
name: "{{ k8s.deploy.app.secret.name }}"
key: database_user
- name: DATABASE_USER_2
valueFrom:
secretKeyRef:
name: "{{ k8s.deploy.app.secret.name }}"
key: database_user_2
如您所見,我必須為每個用戶 + 密碼 + 數據庫名稱復制粘貼代碼。 在這個文件和秘密中。 我使用 XLDeploy 在我的 YML 文件中插入數據。
我在找什么:
template:
(...)
containers:
(...)
env:
---- for i in {{prj.database.number}} ----
- name: DATABASE_NAME_{i}
value: "{{prj.database.name.{i]}}"
- name: DATABASE_USER_{i}
valueFrom:
secretKeyRef:
name: "{{ k8s.deploy.app.secret.name }}"
key: database_user_{i}
---- end for loop ----
所以我可以在 XLDeploy 中插入我用於每個項目的數據庫數量。 並用 XLD 填充值。
這可能嗎,或者我需要使用腳本語言從“YML 模板”生成 YML 文件?
如果您有其他與此文件相關的 yaml,則可以為此使用helm 。 Helm 允許這樣的語法:
{{- range .Values.testvalues }}
---
apiVersion: v1
kind: Service
metadata:
annotations: {}
labels: {}
name: {{ . }}
spec:
ports:
- name: tcp-80-8080
port: 80
protocol: TCP
targetPort: 8080
selector:
app: rss-{{ . }}
type: ClusterIP
{{- end }}
因此,在testvalues
中有一個values.yaml
列表,如下所示:
testvalues:
- a
- b
- c
- d
Helm 將生成四個服務聲明——每個項目一個。 第一個看起來像這樣:
---
apiVersion: v1
kind: Service
metadata:
annotations: {}
labels: {}
name: a
spec:
ports:
- name: tcp-80-8080
port: 80
protocol: TCP
targetPort: 8080
selector:
app: rss-a
type: ClusterIP
如果它只是一個文件,另一種選擇是使用 Jinja 和 Python 之類的東西來使用jinja2模塊構建文件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.