我想为我的系统动态提供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。有可能吗?
发布于 2019-04-12 04:54:06
kubernetes本身不识别任何模板。但是在将此yaml传递给kubectl之前,您可以使用任何模板引擎。
常见的做法是使用helm,它在内部使用了gotpl。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"https://stackoverflow.com/questions/55639436
复制相似问题