Open-local使用指南
架构组成
1. scheduler-extender: 作为 kube-scheduler 的扩展组件,通过 Extender 方式实现,扩展了原生调度器对本地存储资源的感知,以实现对包括磁盘容量、多盘感知、磁盘介质(ssd or hdd)等信息的调度决策,做到存储资源的混合调度;
2. csi-plugin: 符合 CSI(Container Storage Interface) 标准的本地磁盘管理能力,包含创建/删除/扩容存储卷、创建/删除快照、暴露存储卷 metrics 等能力;
3. agent: 运行在集群中的每个节点,根据配置清单初始化存储设备,并通过上报集群中本地存储设备信息以供 scheduler-extender 决策调度;
4. controller: 获取集群存储初始化配置,并向运行在各个节点的 agent 下发详细的资源配置清单。
同时open-local 包含两个 CRD:
NodeLocalStorage:open-local 通过 NodeLocalStorage 资源上报每个节点上的存储设备信息,该资源由 controller 创建,由每个节点的 agent 组件更新其 status。该 CRD 属于全局范围的资源。
NodeLocalStorageInitConfig:open-local controller 可通过 NodeLocalStorageInitConfig 资源创建每个 NodeLocalStorage 资源。NodeLocalStorageInitConfig 资源中包含全局默认节点配置和特定节点配置,若节点的 node label 满足表达式则使用特定节点配置,否则使用默认配置。
前期准备
1.基于Red Hat和Debian的Linux发行版
2.Kubernetes v1.20+
3.Helm v3.0+
4.lvm2
5.至少一个空设备块
初始化设置
新增VG
1.fdisk进行分区(如果是某个分区需要此步骤,如果是某块空闲块设备略过此步)
fdisk /dev/sdb
2.创建PV物理卷(可以将某个分区划分为PV,也可以将某块空闲块设备划分为PV)
pvcreate /dev/sdb1
创建VG卷组 vgcreate -s 32M open-local-pool-0 /dev/sdb1(-s 指定PE大小)
存储初始化配置
编辑NodeLocalStorageConfig 资源,进行初始化配置。默认nlsc为open-local。
使用open-local要求环境中有VG(VolumeGroup),我们上一步已经创建了名称为open-local-pool-0的VG,若您的环境中已存在VG剩余空间,则可以配置在白名单中,若环境中没有VG,您需要提供一个空闲块设备供open-local创建VG。
根据需求手动创建VG或者提供空闲块设备通过open-local自动创建卷组,每个节点为open-local提供一个块设备。块设备名称包括/dev/sdb、/dev/vdc、/dev/sdd2等
helm/values.yaml配置
编辑{{ .Values.agent.device }}在helm/values.yaml文件中
如果集群中的kube-scheduler是静态pod, Open-Local将在每个主节点上运行一个作业来编辑/etc/kubernetes/manifest /kube-scheduler。Yaml文件默认情况下,你可以看到它在初始作业文件。
您还可以手动配置kube-scheduler,特别是当集群中的kube-scheduler不是静态pod时。
设置.extender。Init_job的值为false。在安装Open-Local之前,这将不会运行init-job。
创建一个文件,命名为kube-scheduler-configuration。将其放在每个主节点的“/etc/kubernetes/”路径下。
部署 Open-local
官网下载open-local-main.zip压缩包,解压,进入open-local-main。
确认部署是否成功
Open-local默认在集群中部署一些存储类模版
创建一个Statefulset,该Statefulset 使用 open-local-lvm 存储类模板。此时创建的存储卷文件系统为 ext4。若用户指定 open-local-lvm-xfs 存储模板,则存储卷文件系统为 xfs。
解压包中有Statefulset事例。
修改sts-nginx.yaml中image,对应为docker中nginx镜像名称。
检查Pod/PVC/PV状态,可看到存储卷创建成功
进入容器查看挂载情况
删除pod,验证持久化存储
本地存储持久化验证成功,也可以自定义Statefulset/pv/pvc。
在已有的pv和pvc的yaml文档进行修改,创建我们自己想要的pv和pvc
新建pv,pvc将uid,createTimestamp,claimRef注释掉,并修改name,新建部署单元
部署tomcat,验证自定义应用也没有问题。