localPV介绍
Kubernetes直接使用宿主机的本地磁盘目录 ,来持久化存储容器的数据。它的读写性能相比于大多数远程存储来说,要好得多,尤其是SSD盘。
部署方案
基于sig-storage-local-static-provisioner的local volume方案
下载地址:https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/archive/refs/tags/v2.4.0.tar.gz
准备本地存储
磁盘分区(没有分区需求跳过即可,直接进行创建逻辑卷操作)
#磁盘大于2T的分区
#初始化gpt分区
parted /dev/sda
#创建gpt分区表
mklabel gpt
#全部空间给主分区
mkpart primary 0% 100%
#退出保存
q
#磁盘小于2T的分区
#若未安装lvm需先安装
yum install -y lvm2
#新加的盘为/dev/vdb,按默认选项部署,空行为回车
fdisk /dev/vdb << EOF
n
t
8e
w
EOF
partprobe
创建逻辑卷
# 创建pv
pvcreate /dev/vdb
# 创建vg
vgcreate datavg /dev/vdb
# 创建lv
lvcreate -l 100%VG -n datalv datavg
# 格式化mkfs.xfs lvpath
mkfs.xfs /dev/mapper/datavg-datalv
# 新建/data/localvolume目录
mkdir -p /data/localvolume
# 配置fstab
echo "/dev/mapper/datavg-datalv /data xfs defaults 0 0" >> /etc/fstab
# 挂载
mount -a
扩容
# 新挂盘为/dev/vdc
pvcreate /dev/vdc
# 将新pv扩展至卷组datavg中
vgextend datavg /dev/vdc
# 扩容指定容量
lvextend -L +65.6G /dev/mapper/datavg-datalv
# 扩容剩余全部容量
lvextend -l +100%FREE /dev/mapper/datavg-datalv
# xfs格式磁盘空间刷新
xfs_growfs /dev/mapper/datavg-datalv
# ext格式磁盘空间刷新
resize2fs /dev/mapper/datavg-datalv
该provisioner能够用来创建pv的存储只能为挂载点目录,挂载盘麻烦或者没有,可以预先创建几个bind挂载点目录,若pv不够可直接挂载新挂载点,provisioner会自动发现新挂载点并制作成pv
# 如使用的存储目录为/localvolume,在该目录下创建多个子目录,用来挂载
for i in $(seq 1 10); do
mkdir -p /data/localvolume/vol${i}
mkdir -p /mnt/localvolume/vol${i}
echo "/data/localvolume/vol${i} /mnt/localvolume/vol${i} none rw,bind 0 0" >> /etc/fstab
done
mount -a
# 验证挂载情况
mount | grep "localvolume"
部署provisioner
# 本地存储节点打上标签
kubectl label node <node-name> storagetype=localvolume
# 新建namespace
kubectl create ns static-provisioner
# helm安装provisioner
helm install static-provisioner . -n static-provisioner
使用local volume
查看pv
provisioner自动发现符合要求的挂载点后会自动做成pv,状态显示为Available
新增volume
挂载完成后provisioner会立即自动发现并制作新pv,如新增vol6
mkdir /data/localvolume/vol6 /mnt/localvolume/vol6
echo "/data/localvolume/vol6 /mnt/localvolume/vol6 none rw,bind 0 0" >> /etc/fstab
mount -a
删除volume
# 应用停止后,删除pvc
$ kubectl delete pvc <pvc-name> -n <namespace>
# 卸载挂载点目录
$ umount /mnt/localvolume/<vol>
# 删除目录,记得做好备份
$ rm -rf /data/localvolume/<vol> /mnt/localvolume/<vol>
# 删除pv
$ kubectl delete <pv-name>