1. 安装nfs-server

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sudo apt install nfs-kernel-server -y
# 创建共享目录
mkdir -pv /nfs-share
chown -R nobody:nobody /nfs-share
chmod 777 /nfs-share

# 编辑exports添加共享配置
vim /etc/exports
/nfs-share *(rw,sync,no_root_squash,no_subtree_check)

exportfs -a
systemctl restart nfs-kernel-server

# 验证
showmount -e 172.16.56.204

2. k8s集群安装NFS-client-provider(SC)

1
2
3
4
5
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm repo update
helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--set nfs.server=172.16.56.204 \
--set nfs.path=/nfs-share

3. k8s集群的节点全部安装nfs客户端工具,否则pod将一直处于pending状态

错误如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  nfs-subdir-external-provisioner-root:
Type: NFS (an NFS mount that lasts the lifetime of a pod)
Server: 172.16.56.204
Path: /nfs-share
ReadOnly: false
kube-api-access-ldkpb:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedMount 76s (x65 over 117m) kubelet MountVolume.SetUp failed for volume "nfs-subdir-external-provisioner-root" : mount failed: exit status 32
Mounting command: mount
Mounting arguments: -t nfs 172.16.56.204:/nfs-share /var/lib/kubelet/pods/d6ae52f8-4539-4f10-a9c0-29a766c05117/volumes/kubernetes.io~nfs/nfs-subdir-external-provisioner-root
Output: mount: /var/lib/kubelet/pods/d6ae52f8-4539-4f10-a9c0-29a766c05117/volumes/kubernetes.io~nfs/nfs-subdir-external-provisioner-root: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program.

解决方案:

1
2
# 每个节点安装 nfs客户端工具
apt install nfs-common -y