一、环境准备工作

1.1 搭建NFS

1、在10.0.0.22主机上搭建NFS

[root@k8s-node02 ~]# yum install nfs-utils rpcbind -y

如果是Ubuntu 系列,则采用下面命令

[root@k8s-node02 ~]# apt install nfs-kernel-server -y

2、配置共享目录

[root@k8s-node02 ~]# mkdir /data/nfs -p
[root@k8s-node02 ~]# echo "/data/nfs/ 10.0.0.0/24(rw,sync,no_subtree_check,no_root_squash)" >> /etc/exports

3、加载NFS配置

[root@k8s-node02 ~]# exportfs -r

# 验证
[root@k8s-node02 ~]# exportfs -s
/data/nfs  10.0.0.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,no_root_squash,no_all_squash)

4、启动NFS

[root@k8s-node02 ~]# systemctl enable --now nfs-server rpcbind

如果是Ubuntu 系列,则采用下面命令

[root@k8s-node02 ~]# systemctl enable --now nfs-kernel-server

5、客户端安装客户端工具

# 客户端安装客户端工具
[root@k8s-node01 ~]# yum install nfs-utils -y
[root@k8s-master01 ~]# yum install nfs-utils -y

如果是Ubuntu 系列,则采用下面命令

[root@k8s-node01 ~]# apt install nfs-common -y
[root@k8s-master01 ~]# apt install nfs-common -y

1.2 安装CSI

1、下载安装文件

[root@k8s-master01 ~]# git clone https://gitee.com/dukuan/csi-driver-nfs.git

2、安装CSI

[root@k8s-master01 ~]# cd csi-driver-nfs/
[root@k8s-master01 csi-driver-nfs]# sed -i "s#registry.k8s.io#k8s.m.daocloud.io#g" deploy/v4.9.0/*.yaml
[root@k8s-master01 csi-driver-nfs]# ./deploy/install-driver.sh v4.9.0 local
use local deploy
Installing NFS CSI driver, version: v4.9.0 ...
serviceaccount/csi-nfs-controller-sa created
serviceaccount/csi-nfs-node-sa created
clusterrole.rbac.authorization.k8s.io/nfs-external-provisioner-role created
clusterrolebinding.rbac.authorization.k8s.io/nfs-csi-provisioner-binding created
csidriver.storage.k8s.io/nfs.csi.k8s.io created
deployment.apps/csi-nfs-controller created
daemonset.apps/csi-nfs-node created
NFS CSI driver installed successfully.

3、查看pod状态

[root@k8s-master01 csi-driver-nfs]# kgp -n kube-system | grep csi-nfs
csi-nfs-controller-5c9687ccf5-l9fhp        4/4     Running   2 (5m26s ago)   6m13s
csi-nfs-node-4gnj9                         3/3     Running   0               6m13s
csi-nfs-node-ccww4                         3/3     Running   1 (5m22s ago)   6m13s
csi-nfs-node-rnqpn                         3/3     Running   0               6m13s

4、查看CSI

[root@k8s-master01 csi-driver-nfs]# kg csidriver
NAME             ATTACHREQUIRED   PODINFOONMOUNT   STORAGECAPACITY   TOKENREQUESTS   REQUIRESREPUBLISH   MODES        AGE
nfs.csi.k8s.io   false            false            false             <unset>         false               Persistent   6m42s

1.3 创建SC指向CSI

1、在master01主机(10.0.0.20)上更改sc的配置

[root@k8s-master01 ~]# cd csi-driver-nfs/

# 添加nfs主机信息
  server: 10.0.0.22
  share: /data/nfs

# 修改后的文件内容如下
[root@k8s-master01 csi-driver-nfs]# vim deploy/v4.9.0/storageclass.yaml 

[root@k8s-master01 csi-driver-nfs]# cat deploy/v4.9.0/storageclass.yaml 
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-csi
provisioner: nfs.csi.k8s.io
parameters:
  server: 10.0.0.22
  share: /data/nfs
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
  - nfsvers=4.1

2、创建sc并查看

[root@k8s-master01 csi-driver-nfs]# kaf deploy/v4.9.0/storageclass.yaml 

[root@k8s-master01 csi-driver-nfs]# kg sc
NAME      PROVISIONER      RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-csi   nfs.csi.k8s.io   Delete          Immediate           false                  19s