如何将 volumeClaimTemplates 提取到单独的 PersistentVolumeClaim yaml 文件?
How to extract volumeClaimTemplates to a separate PersistentVolumeClaim yaml file?
假设我有一个 StatefulSet
定义
apiVersion: v1
kind: StatefulSet
metadata:
name: web
spec:
...
volumeClaimTemplates:
— metadata:
name: www
spec:
resources:
requests:
storage: 1Gi
这将为我创建一个 PersistentVolumeClaim
(PVC),每个 pod 的 PersistentVolume
(PV) 为 1 GiB。
我怎么能写出这样的东西
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: www
spec:
...
resources:
requests:
storage: 1Gi
...
并将它与 StatefulSet
连接起来,以便它仍然为每个 pod 创建 PVC 和 PV?
我猜你在问题中使用的是 this website 中的 statfulset 示例,因此我将遵循其命名约定。
我即将向您介绍的解决方案已经过我自己的测试,似乎有效。
在k8s api reference中可以找到如下定义:
volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.
所以这意味着只要您有具有特定名称的 volumeclaim,staefulset 就会使用它而无需创建新的。这意味着您可以手动创建一些 pv/pvc,statefulset 将使用它们。
您需要做的就是正确命名您的 pvc。这个名字应该是什么样子的?
这是第一部分:
volumeClaimTemplates:
- metadata:
name: www <-here is the first part
第二部分是 pod 名称。
(查看 can-i-rely-on-volumeclaimtemplates-naming-convention 上的堆栈问题。)
这两个部分组合在一起创建了 pvc 的名称(以破折号分隔),例如
www-web-0 <- this is how you are supposed to name one of your pvcs
│ └ second part (pod name)
└ first part
如果您已经拥有(自动配置的)PVC,请使用
kubectl get pvc <pvcname> -oyaml > pvcname.yaml
kubectl get pv <pvname> -oyaml > pvname.yaml
将其规格保存到磁盘。那么你可以 运行:
kubectl apply -f pvcname.yaml
kubectl apply -f pvname.yaml
应用pvc/pv配置。请记住,在 运行ning kubectl apply
.
之前,某些 yaml 文件可能需要稍作修改
假设我有一个 StatefulSet
定义
apiVersion: v1
kind: StatefulSet
metadata:
name: web
spec:
...
volumeClaimTemplates:
— metadata:
name: www
spec:
resources:
requests:
storage: 1Gi
这将为我创建一个 PersistentVolumeClaim
(PVC),每个 pod 的 PersistentVolume
(PV) 为 1 GiB。
我怎么能写出这样的东西
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: www
spec:
...
resources:
requests:
storage: 1Gi
...
并将它与 StatefulSet
连接起来,以便它仍然为每个 pod 创建 PVC 和 PV?
我猜你在问题中使用的是 this website 中的 statfulset 示例,因此我将遵循其命名约定。
我即将向您介绍的解决方案已经过我自己的测试,似乎有效。
在k8s api reference中可以找到如下定义:
volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.
所以这意味着只要您有具有特定名称的 volumeclaim,staefulset 就会使用它而无需创建新的。这意味着您可以手动创建一些 pv/pvc,statefulset 将使用它们。
您需要做的就是正确命名您的 pvc。这个名字应该是什么样子的? 这是第一部分:
volumeClaimTemplates:
- metadata:
name: www <-here is the first part
第二部分是 pod 名称。
(查看 can-i-rely-on-volumeclaimtemplates-naming-convention 上的堆栈问题。)
这两个部分组合在一起创建了 pvc 的名称(以破折号分隔),例如
www-web-0 <- this is how you are supposed to name one of your pvcs
│ └ second part (pod name)
└ first part
如果您已经拥有(自动配置的)PVC,请使用
kubectl get pvc <pvcname> -oyaml > pvcname.yaml
kubectl get pv <pvname> -oyaml > pvname.yaml
将其规格保存到磁盘。那么你可以 运行:
kubectl apply -f pvcname.yaml
kubectl apply -f pvname.yaml
应用pvc/pv配置。请记住,在 运行ning kubectl apply
.