绑定k8s中的PVC和PV

223 阅读3分钟

my-pvc.yml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc1
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: test
  resources:
    requests:
      storage: 5Gi

my-pv.yml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  storageClassName: test
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "E:\\coursera\\my-pv"

在 Kubernetes 中,PersistentVolumeClaim (PVC)PersistentVolume (PV) 通常是自动绑定的,前提是满足以下条件:

  1. PVC 的请求必须与 PV 的容量和访问模式匹配。
  2. 存储类(StorageClass)必须相同,或者 PVC 没有指定存储类并且 PV 是默认的。

但是,如果您想手动绑定 PVC 到特定的 PV,您可以通过以下步骤来操作。

步骤 1:创建 PersistentVolume (PV)

首先,创建一个 PV,这个 PV 可以是任何存储类型(如本地存储、云存储等)。这里以一个简单的本地存储 PV 为例:

yaml
复制代码
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-manual-binding
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: standard
  local:
    path: /mnt/disks/ssd1  # 这是一个本地磁盘的路径
  volumeMode: Filesystem

将此 YAML 保存为 pv-manual-binding.yml,然后应用它:

bash
复制代码
kubectl apply -f pv-manual-binding.yml

步骤 2:创建 PersistentVolumeClaim (PVC)

创建一个 PVC,并确保它的 存储类(StorageClass)容量 与 PV 匹配。请注意,PVC 的 storageClassName 应该与 PV 的存储类匹配,或者 PVC 没有 storageClassName,以便它能够匹配没有存储类的 PV。

yaml
复制代码
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-manual-binding
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi  # 请求的存储大小与 PV 相同
  storageClassName: standard  # 必须与 PV 的 storageClassName 匹配

将此 YAML 保存为 pvc-manual-binding.yml,然后应用它:

bash
复制代码
kubectl apply -f pvc-manual-binding.yml

步骤 3:手动绑定 PVC 到 PV

默认情况下,PVC 和 PV 会自动匹配并绑定。但如果您需要手动绑定,您可以通过以下两种方式实现:

方法 1:删除 PVC 的存储类(StorageClass)

如果您希望 PVC 手动选择特定的 PV,您可以在 PVC 中去掉 storageClassName,并确保该 PVC 和目标 PV 具有相同的容量和访问模式。PVC 就会选择该 PV(前提是 PVC 没有存储类)。

方法 2:修改 PV 的 claimRef

一种更直接的方法是手动修改 PV 的 claimRef 字段,这样就可以将 PVC 绑定到特定的 PV。

首先,查看您创建的 PVC 和 PV:

bash
复制代码
kubectl get pvc pvc-manual-binding
kubectl get pv pv-manual-binding

查看 PVC 的 metadata.name 和 PV 的 metadata.name

接下来,编辑 PV,将 claimRef 字段指向目标 PVC:

bash
复制代码
kubectl edit pv pv-manual-binding

在编辑器中,将 claimRef 字段添加到 PV 配置中,类似这样:

yaml
复制代码
claimRef:
  apiVersion: v1
  kind: PersistentVolumeClaim
  name: pvc-manual-binding  # 目标 PVC 的名称
  namespace: default        # PVC 所在的命名空间

保存并退出编辑器。这样,您就成功手动将 PVC 绑定到 PV。

步骤 4:验证绑定状态

您可以通过以下命令检查 PVC 和 PV 的绑定状态:

bash
复制代码
kubectl get pvc pvc-manual-binding
kubectl get pv pv-manual-binding

如果 PVC 成功绑定到 PV,您将看到 STATUS 字段显示为 Bound,表示 PVC 已经成功绑定到特定的 PV。

总结

手动绑定 PVC 到 PV 的基本步骤如下:

  1. 创建一个 PersistentVolume (PV)。
  2. 创建一个 PersistentVolumeClaim (PVC),确保它的 storageClassName 和容量与 PV 匹配。
  3. 手动修改 PV 的 claimRef 字段,或者删除 PVC 的 storageClassName 来手动绑定。
  4. 使用 kubectl get pvckubectl get pv 验证绑定状态。

这样,您就可以手动控制 PVC 和 PV 之间的绑定过程。