我们可以在k8s中仅使用PVC(无PV)获得持久体积吗?

时间:2019-06-04 19:37:38

标签: kubernetes persistent-volumes persistent-volume-claims

我刚刚在PersistentVolumeClaim容器中看到了volumeMountsvolumespersistentVolumeClaim以及postgresPersistentVolume的Postgres yaml文件。我找不到任何定义的postgres

但是,在提起PersistentVolume容器吊舱后,我可以看到一个 persistentVolumeClaim绑定到yaml文件中定义的PersistentVolume

如果仅定义PersistentVolumeClaim,那么k8s会创建import Cocoa import WebKit class ViewController: NSViewController, WKNavigationDelegate { @IBOutlet weak var webView: WKWebView! override func viewDidLoad() { super.viewDidLoad() webView.navigationDelegate = self let url=URL(string: "https://www.example.com") webView.load(URLRequest(url: url!)) // Do any additional setup after loading the view. } override var representedObject: Any? { didSet { // Update the view, if already loaded. } } } 吗?

2 个答案:

答案 0 :(得分:4)

是的,所以,当您的集群使用storage-classes进行动态配置时,您只需要提供PVC,配置者就会从PVC和storageClass获取相关信息,然后根据这些信息创建PV。

  • PV的配置动态进行
      

    当管理员创建的所有静态PV均与用户的PersistentVolumeClaim不匹配时,群集可能会尝试动态地为PVC专门配置一个卷。此设置基于StorageClasses:PVC必须请求存储类,并且管理员必须已经创建并配置了该类,才能进行动态设置。   dynamic-provisining

例如,您在此处使用PVC提供以下信息

  1. StorageClassName

  2. 请求的存储空间

  3. AccessModes

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: task-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

在StorageClass中,您提供以下信息

  1. Provisioner

  2. 其他信息

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: manual
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
reclaimPolicy: Retain
volumeBindingMode: Immediate
  • PVC是一个命名空间范围的kubernetes对象,但在集群范围的k8s对象中是storageclass。因此,群集中始终有一个默认的存储类。因此,当您在pvc中未指定storgae类的名称时,PV将从默认的存储类中提供。

kubectl get sc,pvc,pv将提供相关信息

答案 1 :(得分:1)

实际上,它是由

完成的

PersistentVolumes的动态配置

PersistentVolumes PersistentVolumeClaims 使开发人员无需处理下面使用的实际存储技术即可轻松获得持久性存储。但这仍然需要集群管理员预先设置实际存储。您认为必须创建 PersistentVolumes ,但不必一直如此。幸运的是,Kubernetes还可以通过 PersistentVolumes的动态配置自动执行这项工作。

集群管理员可以创建 PersistentVolume设置程序,并定义一个或多个 StorageClass 对象,以使用户选择 PersistentVolume < / strong>。用户可以在其 PersistentVolumeClaims 中引用 StorageClass ,供应商在配置持久性存储时会考虑到这一点。

kubernetes通过包含默认的 StoregeClass 定义使其变得更加简单。您无需在yaml清单中指向 StorageClass ,如下所示:

PVC yaml文件:

apiVersion: v1 
kind: PersistentVolumeClaim 
metadata:   
  name: postgresdb-pvc  
spec:   
  resources:
    requests:
      storage: 1Gi   
   accessModes:
    - ReadWriteOnce

此PVC定义仅包含存储大小请求和所需的访问模式,但不包含存储类。创建PVC时,将使用任何标记为默认的存储类。

$ kubectl get pvc postgresdb-pvc

NAME            STATUS   VOLUME         CAPACITY   ACCESSMODES   STORAGECLASS
postgresdb-pvc  Bound    pvc-95a5ec12   1Gi        RWO           standard

$ kubectl get pv pvc-95a5ec12

NAME           CAPACITY  ACCESSMODES  RECLAIMPOLICY  STATUS    STORAGECLASS    
pvc-95a5ec12   1Gi       RWO          Delete         Bound     standard

这张Kubernetes In Action书中的图片完美地总结了所有步骤。

enter image description here