欢迎访问宙启技术站
智能推送

如何使用PV和PVC

发布时间:2023-05-15 00:55:55

PV 和 PVC 是 Kubernetes 中的重要组件之一,它们的使用可以帮助我们管理持久化存储和共享存储资源。在本文中,我们将详细介绍如何使用 PV 和 PVC。

什么是 PV 和 PVC?

PV(PersistentVolume)和 PVC(PersistentVolumeClaim)是 Kubernetes 中的两个 API 对象,它们一起用于管理持久化存储和共享存储资源。

PV 是内部存储资源的表示形式,它可以是 NFS、iSCSI、GlusterFS、等一个实际存储设备,也可以是 static、hostPath 等本地卷。它定义了存储的实际容量和访问模式(例如读写、只读、只应用)。可以将 PV 与实际存储设备绑定,从而将实际存储设备暴露为 Kubernetes 集群中的抽象存储卷。

PVC 是声明了应该如何访问 PV 的对象。可以将 PVC 与 PV 绑定,从而在应用程序中公开存储卷。在 Kubernetes 中,应用程序就像请求 CPU、内存等资源一样请求 PVC。Kubernetes 会查找匹配请求的 PVC,并将其绑定到匹配的 PV 上。

如何创建 PV 和 PVC

在 Kubernetes 中,管理员或开发人员可以轻松创建 PV 和 PVC 来管理持久化存储。以下是创建 PV 和 PVC 的步骤:

步骤 1:创建 PV YAML 文件

首先需要使用 YAML 文件创建 PV。 YAML 文件应包含以下信息:

- apiVersion:这告诉 Kubernetes 要使用哪个 API 版本。

- kind:这是资源类型,必须设置为 PersistentVolume。

- metadata:这是关于资源的元信息。

- spec:这是有关如何分配存储的详细信息。

示例:

apiVersion: v1

kind: PersistentVolume

metadata:

  name: pv-1

spec:

  accessModes:

    - ReadWriteOnce

  capacity:

    storage: 5Gi

  storageClassName: slow

  hostPath:

    path: /opt/data

让我们来看看每个字段的含义:

- accessModes:可以有多个访问方式。例如,读写一次(ReadWriteOnce)或只读多次(ReadOnlyMany)。

- capacity:这是存储资源的容量。

- storageClassName:这是用于设置所需的存储类的字符串。

- hostPath:这是本地存储卷的路径。

步骤 2:创建 PVC YAML 文件

接下来,您需要使用 YAML 文件创建 PVC。 PVC 的 YAML 文件应包含以下信息:

- apiVersion:这告诉 Kubernetes 要使用哪个 API 版本。

- kind:这是资源类型,必须设置为 PersistentVolumeClaim。

- metadata:这是关于资源的元信息。

- spec:这是有关如何分配存储的详细信息。

示例:

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

  name: pvc-1

spec:

  accessModes:

    - ReadWriteOnce

  resources:

    requests:

      storage: 1Gi

  storageClassName: slow

让我们来看看每个字段的含义:

- accessModes:应该是可以与 PV 或 PVC 共享的访问模式。

- resources:这是 PVC 的存储资源请求。

- storageClassName:这是 PV 或 PVC 的存储类名称。

步骤 3:创建 PV 和 PVC

使用 kubectl 来创建 PV 和 PVC。

kubectl apply -f pv.yaml

kubectl apply -f pvc.yaml

输出如下:

persistentvolume/pv-1 created

persistentvolumeclaim/pvc-1 created

如何将 PV 和 PVC 应用于 Pod

使用以下 YAML 文件创建具有 PV 和 PVC 的 Pod。

apiVersion: v1

kind: Pod

metadata:

  name: my-pod

spec:

  containers:

    - name: my-container

      image: nginx

      volumeMounts:

        - name: my-volume

          mountPath: /usr/share/nginx/html

  volumes:

    - name: my-volume

      persistentVolumeClaim:

        claimName: pvc-1

让我们来看看该文件包含的字段:

- name:Pod 的名称

- containers:Pod 中的容器名称。

- image:在容器中使用的 Docker 镜像。

- volumeMounts:Pod 中容器的挂载点。

- name:存储卷的名称。

- mountPath:容器内挂载点的路径。

- persistentVolumeClaim:

  - claimName:PVC 的名称。

然后,将上面创建的 YAML 文件应用到 Kubernetes 集群中。

kubectl apply -f pod.yaml

输出如下:

pod/my-pod created

现在,您可以使用以下命令来检查 Pod 是否正在使用 PV 和 PVC。

kubectl get pod my-pod

kubectl describe pod my-pod

输出如下:

Name:         my-pod

...

Volumes:

  my-volume:

    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)

    ClaimName:  pvc-1

    ReadOnly:   false

...

Containers:

  my-container:

    ...

    Volume Mounts:

      /usr/share/nginx/html from my-volume (rw)

      ...

...

Events:

  <none>

现在,您的容器已成功挂载 PV 和 PVC 输出路径,您可以开始使用持久化卷来存储数据。

总结

在 Kubernetes 中,使用 PV 和 PVC 可以轻松管理持久化存储和共享存储资源。 PV 和 PVC 的结合使用允许应用程序在 Kubernetes 集群中使用这些存储资源。通过创建 PV、PVC 和应用程序 Pod,存储资源可以轻松地提供给应用程序。现在,您可以使用实验室环境中的上述指南来了解如何使用 PV 和 PVC。