k8s集群快速部署NFS存储类
本文最后更新于 1153 天前, 如有失效请评论区留言.
本文主要介绍基于 CFS 或者 NFS 来实现 k8s 存储类功能
序
由于 TKE 集群 CSI 功能相对 ACK 比较鸡肋, 相对阿里云 NAS CSI. 我们只需要 SC 自动改创建 CFS 类型的 PV 和 PVC.
我们的使用场景是不同 PV 使用同一个 CFS 不同路径, 或者不同 CFS 可以共享资源包(成本问题,创建 PV 数目比较多), 恰恰这两点 TKE 都不支持。 对此使用社区的 nfs-client-provisioner 项目来实现动态创建 CFS 文件系统中的子路径
CFS 部署实践
CFS 是腾讯云自研的分布式文件系统, 与 NFS 类似, 由腾讯云提供 SLA 保证
提前创建 CFS 实例并配置好资源包
NFS 部署实践
简单记录一下在 Linux 部署 NFS
服务端部署
在Debian上安装NFS
apt-get -y install nfs-common nfs-kernel-server
mkdir /k8sshare
chmod 777 /k8sshare
echo "/k8sshare/ *(insecure,rw,sync,no_root_squash,no_subtree_check)" > /etc/exports
systemctl enable rpcbind
systemctl enable nfs-server
systemctl start rpcbind
systemctl start nfs-server
exportfs -r
# 测试是否生效
showmount -e 127.0.0.1
Export list for 127.0.0.1:
/k8sshare *
在CentOS上安装NFS
类似哈, 只是安装的包不一样yum install nfs-utils
systemctl enable rpcbind --now
systemctl enable nfs --now
客户端安装
# Debian
apt install nfs-common
# CentOS
yum install nfs-utils
部署存储类
这里简单操作, 使用 helm 部署
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm repo update
helm upgrade -i nfs -n kube-system nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--set image.repository=ccr.ccs.tencentyun.com/k7scn/nfs-subdir-external-provisioner \
--set nfs.server=<ip> \
--set nfs.path=<path> \
--set storageClass.defaultClass=true \
--set storageClass.name=opencfs
参数说明
nfs.server: cfs或者nfs的ip nfs.path: cfs或者nfs的路径, 如上面的nfs的`/k8sshare`
storageClass.defaultClass: 默认存储类
storageClass.name: 存储类名称
默认这些参数已经足够了,如果需要更多参数, 请参考 kubernetes-sigs/nfs-subdir-external-provisioner
查看动态存储类
kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
opencfs (default) cluster.local/nfs-subdir-external-provisioner Delete Immediate true 4s
测试
测试前提: 每个节点都需要安装 nfs 客户端哦
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: cfs-volume-test
spec:
storageClassName: opencfs
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Pod
metadata:
name: volume-test
spec:
containers:
- name: volume-test
image: nginx:stable-alpine
imagePullPolicy: IfNotPresent
volumeMounts:
- name: volv
mountPath: /data
ports:
- containerPort: 80
volumes:
- name: volv
persistentVolumeClaim:
claimName: cfs-volume-test