kubernetes - 在一个.yaml中创建多个持久卷

标签 kubernetes

我想为我的系统动态配置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/

相关文章:

kubernetes - Istio 安装因私有(private) docker 注册表失败

kubernetes - k8s replicaSet 状态困惑

kubernetes - 无法在Windows 10中使用Minikube for Kubernetes Cluster启动Hyper V VM以产生 Spark

kubernetes - 印花布:networkPlugin CNI无法设置Pod,I/O超时

kubernetes - Kubernetes 中的 rollout 是什么?

kubernetes - 如何在 kubernetes 的 alertmanager pod 中安装 curl

docker - Helm 中 Kubernetes 上的 Jenkins - 如何将 ssh key 附加到代理

kubernetes - GCE入口资源和ClusterIP服务

kubernetes - 使用 Bastion 通过 SSH 连接到 Kubernetes Pod

docker - 2 个容器在 Kubernetes pod 中使用相同的端口