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 为例
装置 nfs
yum -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 rpcbind
systemctl restart nfs && systemctl enable nfs
#查看 RPC 服务的注册情况
rpcinfo -p localhost
#showmount 测试
showmount -e 192.168.92.56