K8S 下配置 Default StorageClass (NFS)

创建NFS共享服务(Ubuntu)

apt-get install -y nfs-kernel-server  # 安装nfs服务器
apt-get install -y nfs-common   #安装nfs客户端

手动编辑/etc/exports配置文件

root@master:~/app/k8s# vim /etc/exports
root@master:~/app/k8s# cat /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_sub                                                                                                                               tree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#
/data/volumes *(rw,sync,no_root_squash,insecure)
root@master:~/app/k8s#
  • /data/volumes 代表的是共享的目录
  • * 代表是允许所有的网络访问
  • ro 该主机对该共享目录有只读权限
  • rw 该主机对该共享目录有读写权限
  • root_squash 客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户
  • no_root_squash 客户机用root访问该共享文件夹时,不映射root用户
  • all_squash 客户机上的任何用户访问该共享目录时都映射成匿名用户anonuid 将客户机上的用户映射成指定的本地用户ID的用户
  • anongid 将客户机上的用户映射成属于指定的本地用户组ID
  • sync 资料同步写入到内存与硬盘中
  • async 资料会先暂存于内存中,而非直接写入硬盘insecure 允许从这台机器过来的非授权访问
  • 允许客户端从大于1024的tcp/ip端口连接服务器
mkdir -p /data/volumes       #创建目录
chmod -R 777 /data/volumes   
systemctl daemon-reload
/etc/init.d/nfs-kernel-server restart # 重启nfs服务
/etc/init.d/rpcbind restart

测试nfs服务器

showmount -e ${nfs_server_name}

mount -t nfs ${nfs_server_name}:/nfsroot /mnt -o nolock  #挂载测试

umount /mnt #卸载

安装Helm 

Helm 是查找、分享和使用软件构建 Kubernetes 的最优方式, 所以这里先安装 Helm,参见Helm | 安装Helm,这里不再复制了。

部署nfs-subdir-external-provisioner到kubernetes集群

helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
    --set nfs.server=master.vfox.top \
    --set nfs.path=/data/volumes \
    --set image.tag=v4.0.2 \
    --set storageClass.defaultClass=true \
    --set image.repository=registry.cn-beijing.aliyuncs.com/docker-vfox/nfs-subdir-external-provisioner 

# 部署完成显示
NAME: nfs-subdir-external-provisioner
LAST DEPLOYED: Sat Jan 15 16:39:35 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
root@master:~/app/helm# cd /data/volumes/

国内不能拉取  k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2 , 解决方法参考

(15条消息) 使用阿里云容器镜像的 github关联仓库,海外机器构建 Docker 镜像_哈哈虎的博客-CSDN博客

查看已经创建的StorageClass

root@master:/# kubectl get StorageClass
NAME                   PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-client (default)   cluster.local/nfs-subdir-external-provisioner   Delete          Immediate           true                   4m11s

创建Persistent Volume Claims 测试

vim ./test-clain.yaml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: test-claim
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Mi
kubectl apply -f ./test-clain.yaml

root@master:/# kubectl get pvc
NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
test-claim   Bound    pvc-a8c60f21-e4a9-4b43-8840-4a752bb8f2a1   1Mi        RWX            nfs-client     5m47s
root@master:/#

到此配置NFS支持结束;

在配置过程中遇到一个大坑【在这里折腾了2天】:配置完成后报错

Error getting server version: Get "https://10.96.0.1:443/version?timeout=32s: dial tcp 10.96.0.1:443: i/o timeout

发现是Kubernetes 初始化时使用 kubeadm --pod-network-cidr=10.10.0.0/16 参数与 Flannel ConfigMap 配置默认网路不一致,可以重新初始化集群使用Flannel默认参数一致 kubeadm --pod-network-cidr=10.244.0.0/16 , 也可以修改10.244.0.0/16

kubectl edit cm -n kube-system kube-flannel-cfg
# edit the configuration by changing network from 10.244.0.0/16 to 10.10.0.0/16
kubectl delete pod -n kube-system -l app=flannel
kubectl delete po -n kube-system -l k8s-app=kubernetes-dashboard

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值