1. 名词解释

  • in-tree:代码逻辑在 K8s 官网仓库中;
  • out-of-tree:代码逻辑在 K8s 官网仓库之外,实现与 K8s 代码的解耦;
  • PV:PersistentVolume,集群级别的资源,由 集群管理员 or External Provisioner 创立。PV 的生命周期独立于应用 PV 的 Pod,PV 的 .Spec 中保留了存储设备的详细信息;
  • PVC:PersistentVolumeClaim,命名空间(namespace)级别的资源,由 用户 or StatefulSet 控制器(依据VolumeClaimTemplate) 创立。PVC 相似于 Pod,Pod 耗费 Node 资源,PVC 耗费 PV 资源。Pod 能够申请特定级别的资源(CPU 和内存),而 PVC 能够申请特定存储卷的大小及拜访模式(Access Mode);
  • StorageClass:StorageClass 是集群级别的资源,由集群管理员创立。SC 为管理员提供了一种动静提供存储卷的“类”模板,SC 中的 .Spec 中具体定义了存储卷 PV 的不同服务质量级别、备份策略等等;
  • CSI:Container Storage Interface,目标是定义行业标准的“容器存储接口”,使存储供应商(SP)基于 CSI 规范开发的插件能够在不同容器编排(CO)零碎中工作,CO 零碎包含 Kubernetes、Mesos、Swarm 等。

2. 组件介绍

  • PV Controller:负责 PV/PVC 绑定及周期治理,依据需要进行数据卷的 Provision/Delete 操作;
    * AD Controller:负责数据卷的 Attach/Detach 操作,将设施挂接到指标节点;
  • Kubelet:Kubelet 是在每个 Node 节点上运行的次要 “节点代理”,性能是 Pod 生命周期治理、容器健康检查、容器监控等;
  • Volume Manager:Kubelet 中的组件,负责管理数据卷的 Mount/Umount 操作(也负责数据卷的 Attach/Detach 操作,需配置 kubelet 相干参数开启该个性)、卷设施的格式化等等;
  • Volume Plugins:存储插件,由存储供应商开发,目标在于扩大各种存储类型的卷治理能力,实现第三方存储的各种操作能力,即是下面蓝色操作的实现。Volume Plugins 有 in-tree 和 out-of-tree 两种;
  • External Provioner:External Provioner 是一种 sidecar 容器,作用是调用 Volume Plugins 中的 CreateVolume 和 DeleteVolume 函数来执行 Provision/Delete 操作。因为 K8s 的 PV 控制器无奈间接调用 Volume Plugins 的相干函数,故由 External Provioner 通过 gRPC 来调用;
  • External Attacher:External Attacher 是一种 sidecar 容器,作用是调用 Volume Plugins 中的 ControllerPublishVolume 和 ControllerUnpublishVolume 函数来执行 Attach/Detach 操作。因为 K8s 的 AD 控制器无奈间接调用 Volume Plugins 的相干函数,故由 External Attacher 通过 gRPC 来调用。

3. 长久卷应用(nfs存储数据)

k8s应用NFS共享存储有两种形式:

  • 1.手动形式动态创立所须要的PV和PVC。
  • 2.通过创立PVC动静地创立对应PV,无需手动创立PV。

搭建nfs服务器(ip:192.168.92.56)

找一台服务器搭建nfs服务端,我以centos7为例

装置nfsyum -y install nfs-utils#创立nfs目录mkdir -p /nfs/data/#批改权限chmod -R 777 /nfs/data#编辑export文件vim /etc/exports/nfs/data *(rw,no_root_squash,sync)  (“*“代表所有人都能连贯,倡议换成具体ip或ip段,如192.168.20.0/24)#配置失效exportfs -r#查看失效exportfs#启动rpcbind、nfs服务systemctl restart rpcbind && systemctl enable rpcbindsystemctl restart nfs && systemctl enable nfs#查看 RPC 服务的注册情况rpcinfo -p localhost#showmount测试showmount -e 192.168.92.56