本文共 2361 字,大约阅读时间需要 7 分钟。
在 Kubernetes 中,用户可以通过多种方式对应用进行持久化,例如将容器内的目录挂载到宿主机的容器目录或 emptyDir 临时存储卷。然而,Kubernetes 还提供了更高级的存储资源管理机制,即 PersistentVolume(PV)和 PersistentVolumeClaim(PVC),允许使用外部存储设备。
PersistentVolume 是对底层网络共享存储的抽象视角,将共享存储定义为一种可消费的“资源”。与 Node 或者其他 Kubernetes 资源类似,PV 由管理员创建和配置,与共享存储的具体实现直接相关。PV 可以指定存储的容量、访问模式以及重复利用策略等属性。
例如,可以通过以下 YAML 定义一个 PV:
apiVersion: v1kind: PersistentVolumemetadata: name: pv namespace: pv labels: name: pvspec: capacity: 2Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle hostPath: path: /usr/soft/k8s/yaml/pv/storage
上述配置表示创建一个名为 pv 的 PV,占用 2Gi 存储空间,支持读写一次访问模式,存储可以被回收利用,并挂载到宿主机 /usr/soft/k8s/yaml/pv/storage 目录。
PVC 是对 PV 的一个“申请”,类似于 Pod 消耗 Node 资源一样,PVC 可以申请特定的存储空间和访问模式。PVC 的创建和使用过程与 PV 类似,主要区别在于申请的存储容量和访问模式。
例如,可以通过以下 YAML 定义一个 PVC:
apiVersion: v1kind: PersistentVolumeClaimmetadata: name: pvc namespace: pv labels: name: pvcspec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi selector: matchLabels: name: pv
上述配置表示创建一个名为 pvc 的 PVC,申请 1Gi 的存储空间,支持读写一次访问模式,并与名为 pv 的 PV 绑定。
为了更好地管理存储资源,Kubernetes 提供了 StorageClass 的概念。StorageClass 用于标记存储资源的特性和性能,管理员可以将存储资源定义为某种类别,类似于存储设备对自身的配置描述。通过 StorageClass,可以直观地了解各种存储资源的特性,从而根据应用需求去申请存储资源。
此外,Kubernetes 提供了 Container Storage Interface(CSI)机制,目标是在 Kubernetes 与外部存储系统之间建立一套标准的存储管理接口,通过该接口为容器提供存储服务。
在实际应用中,可以按照以下步骤操作:
例如,以下 YAML 定义了一个使用 PVC 挂载的 Pod:
apiVersion: v1kind: Podmetadata: name: nginx namespace: pv labels: name: nginxspec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent volumeMounts: - name: pv mountPath: /pvc readOnly: false ports: - containerPort: 80volumes: - name: pv persistentVolumeClaim: claimName: pvc
上述配置表示创建一个名为 nginx 的 Pod,配置了一个挂载 PVC 的容器,存储数据位于容器的 /pvc 目录。
创建完成后,可以执行以下步骤验证:
kubectl exec 命令进入容器。/pvc 目录中创建文件(例如 test.txt)。例如,可以执行以下命令查看 Pod 的运行节点:
kubectl get pods -w
然后,进入节点并检查相应目录:
ssh node-1ls /usr/soft/k8s/yaml/pv/storage
可以看到,节点目录中会存在容器创建的文件。如果在节点目录中添加文件,容器挂载目录也会同步更新。
以上就是 PV 和 PVC 的简单使用方法,更多详细内容请关注后续文章。希望本文能为您的 Kubernetes 存储配置提供帮助。如果对内容有帮助,请记得点赞和关注,支持创作继续!
转载地址:http://zsvyz.baihongyu.com/