如何将volumeClaimTemplates提取到单独的PersistentVolumeClaim yaml文件? [英] How to extract volumeClaimTemplates to a separate PersistentVolumeClaim yaml file?

查看:3711
本文介绍了如何将volumeClaimTemplates提取到单独的PersistentVolumeClaim yaml文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有一个StatefulSet定义

apiVersion: v1
kind: StatefulSet
metadata:
  name: web
spec:
  ...
  volumeClaimTemplates:
  — metadata:
      name: www
    spec:
      resources:
        requests:
          storage: 1Gi

这将为我创建一个PersistentVolumeClaim(PVC),每个容器的PersistentVolume(PV)为1 GiB.

This will create me a PersistentVolumeClaim (PVC) with a PersistentVolume (PV) of 1 GiB for each pod.

我怎么写这样的东西

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: www
spec:
  ...
  resources:
    requests:
      storage: 1Gi
...

并将其与StatefulSet连接,仍然可以为每个吊舱创建PVC和PV?

and connect it with the StatefulSet in a way that it still creates a PVC and PV for each pod?

推荐答案

我猜在您的问题中,您使用的是

I am guessing that in your question you are using statfulset example from this website so I will follow its naming convention.

我要为您提供的解决方案已经过我自己的测试,并且似乎可行.

The solution I am about to present you was tested by myself and it seems to work.

k8s api参考您可以找到以下定义:

In k8s api reference you can find the folllowing definition:

volumeClaimTemplates是允许pod引用的声明的列表. StatefulSet控制器负责以维护容器身份的方式将网络身份映射到声明.此列表中的每个声明都必须在模板的一个容器中至少有一个匹配的(按名称)volumeMount.此列表中的声明优先于模板中具有相同名称的所有卷.

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将使用它们.

So this means that as long as you have volumeclaim with specific name, staefulset will use it without creating a new one. This means that you can create some pv/pvc manually and statefulset will use them.

您需要做的就是正确命名您的pvc.这个名字应该是什么样子? 这是第一部分:

All you need to do is to correctly name your pvcs. How is this name supposed to look like? Here is the first part:

volumeClaimTemplates:
  - metadata:
      name: www        <-here is the first part

第二部分是广告连播名称.

and the second part is a pod name.

(请在 can-i-rely-上查看此Stack问题on-volumeclaimtemplates-naming-convention .)

这两个部分结合在一起创建了pvc的名称(用破折号分隔),例如

These two parts combined together create a name of pvc (separated with dash) e.g.

www-web-0        <- this is how you are supposed to name one of your pvcs
│   └ second part (pod name)
└ first part

如果您已经拥有(自动配置的)PVC,请使用

If you already have (automatically provisioned) PVCs, use

kubectl get pvc <pvcname> -oyaml > pvcname.yaml
kubectl get pv  <pvname>  -oyaml > pvname.yaml

将其规格保存到磁盘.然后您可以运行:

to save its specification to disk. Then you can run:

kubectl apply -f pvcname.yaml
kubectl apply -f pvname.yaml

应用pvc/pv配置.请记住,某些yaml文件在运行kubectl apply之前可能需要进行一些修改.

to apply pvc/pv configuration. Remember that some yaml files may require slight modifications before running kubectl apply.

这篇关于如何将volumeClaimTemplates提取到单独的PersistentVolumeClaim yaml文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆