kubeasz 安装 K8S 集群启用 NFS 存储问题排查

kubeasz 安装 Kubernetes 集群启用 NFS 存储,默认情况无法安装使用问题排查

kubeaszgithub 上开源项目,内部使用 ansible 自动安装 k8s 集群

服务 版本
CentOS 7.9
Kubernetes 1.25
Kubeasz 3.4.2

集群规划

节点名称 IP地址 节点角色
m1 192.168.100.138 master, ansible, kubeasz
n1 192.168.100.139 node
n2 192.168.100.140 node

安装 Kubernetes 集群

详细的安装流程 参考文档 ,需要注意参考文档中 kubeasz 版本为 3.0.1 ,此处为 3.4.2

问题复现

配置文件中默认启用 nfs 存储

$ cd /etc/kubeasz/clusters/k8s

# 配置文件中启用 nfs-provisioner 作为默认的 storageclass
$ cat config.yml

......
# nfs-provisioner 自动安装
nfs_provisioner_install: "yes"
nfs_provisioner_namespace: "kube-system"
nfs_provisioner_ver: "v4.0.2"
nfs_storage_class: "managed-nfs-storage"
nfs_server: "192.168.100.138"
nfs_path: "/data/nfs"
......

安装后 nfs pod 无法启动

容器启动报错

$ kubectl -n kube-system describe pods nfs-client-provisioner-7f7b7dcb96-q9h59

# 容器日志信息
Events:
  Type     Reason       Age                    From               Message
  ----     ------       ----                   ----               -------
  Normal   Scheduled    7m33s                  default-scheduler  Successfully assigned kube-system/nfs-client-provisioner-7f7b7dcb96-mf8pv to 192.168.100.139
  Warning  FailedMount  3m17s (x2 over 5m30s)  kubelet            Unable to attach or mount volumes: unmounted volumes=[nfs-client-root], unattached volumes=[nfs-client-root kube-api-access-ts9gw]: timed out waiting for the condition
  Warning  FailedMount  76s (x3 over 5m28s)    kubelet            MountVolume.SetUp failed for volume "nfs-client-root" : mount failed: exit status 32
Mounting command: mount
Mounting arguments: -t nfs 192.168.100.138:/data/nfs /var/lib/kubelet/pods/867e70d9-6bee-4361-8fd8-322d3b588f29/volumes/kubernetes.io~nfs/nfs-client-root
Output: mount.nfs: Connection refused
  Warning  FailedMount  63s  kubelet  Unable to attach or mount volumes: unmounted volumes=[nfs-client-root], unattached volumes=[kube-api-access-ts9gw nfs-client-root]: timed out waiting for the condition

解决方法

[root@m1 k8s]# kubectl -n kube-system get pods -o wide
NAME                                         READY   STATUS              RESTARTS   AGE    IP                NODE              NOMINATED NODE   READINESS GATES
nfs-client-provisioner-7f7b7dcb96-xr8xt      1/1     ContainerCreating   0          8m3s   172.20.217.4      192.168.100.140   <none>           <none>
  • 登陆 nfs pod 所在服务器,检查 nfs 服务,并挂载 /data/nfs 目录
$ ssh n2

# 发现 nfs 服务默认没有启动需要启动,其他 m1 和 n1 节点也需要启动 nfs 服务
[root@n2 ~]# systemctl enable nfs --now
[root@n2 ~]# systemctl status nfs

# 挂载 /data/nfs 目录无法挂载,进程会 hang 住
[root@n2 ~]# mount -t nfs 192.168.100.138:/data/nfs /mnt
[root@n1 ~]# exportfs  # 信息为空

# 其他 m1 和 n1 节点也需要启动 nfs 服务
[root@m1 ~]# systemctl enable nfs --now
[root@n1 ~]# systemctl enable nfs --now
  • 登陆 m1 服务器,检查 nfs 服务挂载信息是否暴露
$ cat /etc/exports  # 为空

# 配置 nfs 信息,并重启服务
$ echo "/data/nfs *(rw,no_root_squash,no_all_squash,sync)" >> /etc/exports
$ systemctl restart nfs

# 登陆 n2 接重新测试
$ ssh n2
[root@n1 ~]# exportfs
/data/nfs       192.168.100.138
[root@n2 ~]# mount -t nfs 192.168.100.138:/data/nfs /mnt
[root@n2 ~]# df -h
192.168.100.138:/data/nfs   37G   14G   24G  37% /mnt
  • 查看 nfs pod 服务
$ kubectl -n kube-system get pods
NAME                                         READY   STATUS    RESTARTS   AGE
nfs-client-provisioner-7f7b7dcb96-xr8xt      1/1     Running   0          17m

$ kubectl get sc
NAME                  PROVISIONER                                   RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
managed-nfs-storage   k8s-sigs.io/nfs-subdir-external-provisioner   Delete          Immediate           false                  38m
posted @ 2022-12-21 17:36  evescn  阅读(902)  评论(0编辑  收藏  举报