kubernetes-notes
  • 目录
    • 序言
  • 云原生体系
    • 12-Factor
    • K8S知识体系
  • 安装与配置
    • 部署k8s集群
      • 使用kubeadm安装生产环境kubernetes
      • 使用kubespray安装kubernetes
      • 使用minikube安装kubernetes
      • 使用kind安装kubernetes
    • k8s证书及秘钥
    • k8s版本说明
  • 基本概念
    • kubernetes架构
      • Kubernetes总架构图
      • 基于Docker及Kubernetes技术构建容器云(PaaS)平台概述
    • kubernetes对象
      • 理解kubernetes对象
      • kubernetes常用对象说明
    • Pod
      • Pod介绍
      • Pod定义文件
      • Pod生命周期
      • Pod健康检查
      • Pod存储卷
      • Pod控制器
      • Pod伸缩与升级
    • 配置
      • ConfigMap
    • Workload
  • 核心原理
    • 核心组件
      • Api Server
      • Controller Manager
      • Scheduler
      • Kubelet
    • 流程图
      • Pod创建流程
      • PVC创建流程
  • 容器网络
    • Docker网络
    • K8S网络
    • 网络插件
      • Flannel介绍
    • CNI
      • CNI接口介绍
      • Macvlan介绍
  • 容器存储
    • 存储卷概念
      • Volume
      • Persistent Volume
      • Persistent Volume Claim
      • Storage Class
      • Dynamic Volume Provisioning
    • CSI
      • csi-cephfs-plugin
      • 部署csi-cephfs
      • 部署cephfs-provisioner
      • FlexVolume介绍
  • 资源隔离
    • 资源配额
    • Pod限额
    • 资源服务质量
    • Lxcfs资源视图隔离
  • 运维指南
    • kubectl工具
      • kubectl安装与配置
      • kubectl命令说明
      • kubectl命令别名
    • kubernetes集群问题排查
    • 节点调度
      • 安全迁移节点
      • 指定Node调度与隔离
    • 镜像仓库配置
      • 配置私有的镜像仓库
      • 拉取私有镜像
  • 开发指南
    • client-go的使用及源码分析
    • CSI插件开发
      • nfs-client-provisioner源码分析
      • csi-provisioner源码分析
    • operator开发
      • kubebuilder的使用
  • 问题排查
    • 节点相关问题
      • keycreate permission denied
      • Cgroup不支持pid资源
      • Cgroup子系统无法挂载
    • Pod驱逐
    • 镜像拉取失败问题
    • PVC Terminating
  • 源码分析
    • Kubernetes源码分析笔记
    • kubelet
      • NewKubeletCommand
      • NewMainKubelet
      • startKubelet
      • syncLoopIteration
      • syncPod
    • kube-controller-manager
      • NewControllerManagerCommand
      • DeploymentController
      • Informer机制
    • kube-scheduler
      • NewSchedulerCommand
      • registerAlgorithmProvider
      • scheduleOne
      • findNodesThatFit
      • PrioritizeNodes
      • preempt
    • kube-apiserver
      • NewAPIServerCommand
  • Runtime
    • Runtime
      • Runc和Containerd概述
    • Containerd
      • 安装Containerd
    • Docker
      • Docker学习笔记
    • Kata Container
      • kata容器简介
      • kata配置
    • GPU
      • nvidia-device-plugin介绍
  • Etcd
    • Etcd介绍
    • Raft算法
    • Etcd启动配置参数
    • Etcd访问控制
    • etcdctl命令工具
      • etcdctl命令工具-V3
      • etcdctl命令工具-V2
    • Etcd中的k8s数据
    • Etcd-Operator的使用
  • 多集群管理
    • k8s多集群管理的思考
    • Virtual Kubelet
      • Virtual Kubelet介绍
      • Virtual Kubelet 命令
    • Karmada
      • Karmada介绍
  • 边缘容器
    • KubeEdge介绍
    • KubeEdge源码分析
      • cloudcore
      • edgecore
    • OpenYurt部署
  • 虚拟化
    • 虚拟化相关概念
    • KubeVirt
      • KubeVirt的介绍
      • KubeVirt的使用
  • 监控体系
    • 监控体系介绍
    • cAdvisor介绍
    • Heapster介绍
    • Influxdb介绍
由 GitBook 提供支持

www.huweihuang.com

在本页
  • 1. PV概述
  • 2. PV和PVC的生命周期
  • 2.1. 配置(Provision)
  • 2.2. 绑定
  • 2.3. 使用
  • 2.4. 回收
  • 3. PV的类型
  • 4. PV的属性
  • 4.1. Capacity
  • 4.2. Volume Mode
  • 4.3. Access Modes
  • 4.4. Class
  • 4.5. Reclaim Policy
  • 4.6. Mount Options
  • 4.7. Phase

这有帮助吗?

在GitHub上编辑
  1. 容器存储
  2. 存储卷概念

Persistent Volume

1. PV概述

PersistentVolume(简称PV) 是 Volume 之类的卷插件,也是集群中的资源,但独立于Pod的生命周期(即不会因Pod删除而被删除),不归属于某个Namespace。

2. PV和PVC的生命周期

2.1. 配置(Provision)

有两种方式来配置 PV:静态或动态。

1、静态

手动创建PV,可供k8s集群中的对象消费。

2、动态

可以通过StorageClass和具体的Provisioner(例如nfs-client-provisioner)来动态地创建和删除PV。

2.2. 绑定

在动态配置的情况下,用户创建了特定的PVC,k8s会监听新的PVC,并寻找匹配的PV绑定。一旦绑定后,这种绑定是排他性的,PVC和PV的绑定是一对一的映射。

2.3. 使用

Pod 使用PVC作为卷。集群检查PVC以查找绑定的卷并为集群挂载该卷。用户通过在 Pod 的 volume 配置中包含 persistentVolumeClaim 来调度 Pod 并访问用户声明的 PV。

2.4. 回收

PV的回收策略可以设定PVC在释放后如何处理对应的Volume,目前有 Retained, Recycled 和 Deleted三种策略。

1、保留(Retain)

保留策略允许手动回收资源,当删除PVC的时候,PV仍然存在,可以通过以下步骤回收卷:

  1. 删除PV

  2. 手动清理外部存储的数据资源

  3. 手动删除或重新使用关联的存储资产

2、回收(Resycle)

该策略已废弃,推荐使用dynamic provisioning

回收策略会在 volume上执行基本擦除(rm -rf / thevolume / *),可被再次声明使用。

3、删除(Delete)

删除策略,当发生删除操作的时候,会从k8s集群中删除PV对象,并执行外部存储资源的删除操作(根据不同的provisioner定义的删除逻辑不同,有的是重命名)。

动态配置的卷继承其StorageClass的回收策略,默认为Delete,即当用户删除PVC的时候,会自动执行PV的删除策略。

如果要修改PV的回收策略,可执行以下命令:

# Get pv 
kubectl get pv
# Change policy to Retaion
kubectl patch pv <pv_name> -p ‘{“spec”:{“persistentVolumeReclaimPolicy”:“Retain”}}’

3. PV的类型

PersistentVolume 类型以插件形式实现。以下仅列部分常用类型:

  • GCEPersistentDisk

  • AWSElasticBlockStore

  • NFS

  • RBD (Ceph Block Device)

  • CephFS

  • Glusterfs

4. PV的属性

每个 PV 配置中都包含一个 sepc 规格字段和一个 status 卷状态字段。

apiVersion: v1
kind: PersistentVolume
metadata:
  annotations:
    pv.kubernetes.io/provisioned-by: fuseim.pri/ifs
  creationTimestamp: 2018-07-12T06:46:48Z
  name: default-test-web-0-pvc-58cf5ec1-859f-11e8-bb61-005056b83985
  resourceVersion: "100163256"
  selfLink: /api/v1/persistentvolumes/default-test-web-0-pvc-58cf5ec1-859f-11e8-bb61-005056b83985
  uid: 59796ba3-859f-11e8-9c50-c81f66bcff65
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 2Gi
  volumeMode: Filesystem  
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: test-web-0
    namespace: default
    resourceVersion: "100163248"
    uid: 58cf5ec1-859f-11e8-bb61-005056b83985
  nfs:
    path: /data/nfs-storage/default-test-web-0-pvc-58cf5ec1-859f-11e8-bb61-005056b83985
    server: 172.16.201.54
  persistentVolumeReclaimPolicy: Delete
  storageClassName: managed-nfs-storage
  mountOptions:
    - hard
    - nfsvers=4.1
status:
  phase: Bound

4.1. Capacity

4.2. Volume Mode

volumeMode 的有效值可以是Filesystem或Block。如果未指定,volumeMode 将默认为Filesystem。

4.3. Access Modes

访问模式包括:

  • ReadWriteOnce——该卷可以被单个节点以读/写模式挂载

  • ReadOnlyMany——该卷可以被多个节点以只读模式挂载

  • ReadWriteMany——该卷可以被多个节点以读/写模式挂载

在命令行中,访问模式缩写为:

  • RWO - ReadWriteOnce

  • ROX - ReadOnlyMany

  • RWX - ReadWriteMany

一个卷一次只能使用一种访问模式挂载,即使它支持很多访问模式。

以下只列举部分常用插件:

Volume 插件
ReadWriteOnce
ReadOnlyMany
ReadWriteMany

AWSElasticBlockStore

✓

-

-

CephFS

✓

✓

✓

GCEPersistentDisk

✓

✓

-

Glusterfs

✓

✓

✓

HostPath

✓

-

-

NFS

✓

✓

✓

RBD

✓

✓

-

...

-

4.4. Class

PV可以指定一个StorageClass来动态绑定PV和PVC,其中通过 storageClassName 属性来指定具体的StorageClass,如果没有指定该属性的PV,它只能绑定到不需要特定类的 PVC。

4.5. Reclaim Policy

回收策略包括:

  • Retain(保留)——手动回收

  • Recycle(回收)——基本擦除(rm -rf /thevolume/*)

  • Delete(删除)——关联的存储资产(例如 AWS EBS、GCE PD、Azure Disk 和 OpenStack Cinder 卷)将被删除

当前,只有 NFS 和 HostPath 支持回收策略。AWS EBS、GCE PD、Azure Disk 和 Cinder 卷支持删除策略。

4.6. Mount Options

Kubernetes 管理员可以指定在节点上为挂载持久卷指定挂载选项。

注意:不是所有的持久化卷类型都支持挂载选项。

支持挂载选项常用的类型有:

  • GCEPersistentDisk

  • AWSElasticBlockStore

  • AzureFile

  • AzureDisk

  • NFS

  • RBD (Ceph Block Device)

  • CephFS

  • Cinder (OpenStack 卷存储)

  • Glusterfs

4.7. Phase

PV可以处于以下的某种状态:

  • Available(可用)——一块空闲资源还没有被任何声明绑定

  • Bound(已绑定)——卷已经被声明绑定

  • Released(已释放)——声明被删除,但是资源还未被集群重新声明

  • Failed(失败)——该卷的自动回收失败

命令行会显示绑定到 PV 的 PVC 的名称。

参考文章:

  • https://kubernetes.io/docs/concepts/storage/persistent-volumes/

  • https://kubernetes.io/docs/tasks/administer-cluster/change-pv-reclaim-policy/

上一页Volume下一页Persistent Volume Claim

最后更新于2年前

这有帮助吗?

给PV设置特定的存储容量,更多 capacity 可参考Kubernetes 。

资源模型