乐趣区

关于nfs:k8s使用nfs存储数据

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
退出移动版