我想为我的系统动态配置3个持久卷,它们全部基于我先前创建的storageClass
。我的v1代码成功完成了工作。
v1:
apiVersion: v1
kind: PersistentVolume
metadata:
name: volume0
labels:
type: storage-one
spec:
storageClassName: storage-one
accessModes:
- ReadWriteMany
capacity:
storage: 2Gi
hostPath:
path: /somepath
type: "DirectoryOrCreate"
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: volume1
labels:
type: storage-one
spec:
storageClassName: storage-one
accessModes:
- ReadWriteMany
capacity:
storage: 2Gi
hostPath:
path: /somepath
type: "DirectoryOrCreate"
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: volume2
labels:
type: storage-one
spec:
storageClassName: storage-one
accessModes:
- ReadWriteMany
capacity:
storage: 2Gi
hostPath:
path: /somepath
type: "DirectoryOrCreate"
我想使用k8s可以识别的模板来重构此代码,因为这里唯一的变量是
metadata.name
。可能吗?
最佳答案
本地kubernetes无法识别任何模板。但是,您可以在将此Yaml传递给kubectl之前使用任何模板引擎。
常见的做法是使用在内部使用gotpl的 Helm 。 https://helm.sh/docs/chart_template_guide/
您的示例如下所示:
{{ range .Values.volume_names }}
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: {{ . }}
labels:
type: storage-one
spec:
storageClassName: storage-one
accessModes:
- ReadWriteMany
capacity:
storage: 2Gi
hostPath:
path: /somepath
type: "DirectoryOrCreate"
{{ end }}
和values.yaml:
volume_names:
- volume_this
- volume_that
通常,您可以使用任何引擎执行
render_with_your_fav_engine_to_stdout | kubectl apply -f
。UPD:根据给定的len生成(这很奇怪):
{{ range $k, $v := until (atoi .Values.numVolumes) }}
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: volume-{{ $v }}
labels:
type: storage-one
spec:
storageClassName: storage-one
accessModes:
- ReadWriteMany
capacity:
storage: 2Gi
hostPath:
path: /somepath
type: "DirectoryOrCreate"
{{ end }}
和values.yaml:
numVolumes: "3"
关于kubernetes - 在一个.yaml中创建多个持久卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55639436/