最近测试新的 k8s 集群,版本1.24.6 ,NFS Provisioner 这个坑里躺了好久,发现特性门控feature-gates 里面真不能乱改,有版本兼容问题。
第一部分,NFS Provisioner
问题
起因是 集群里面有应用要用到 mysql-operator,要用到 storageclass ,于是拿出用了很久的 NFS Provisioner yaml文件,结果发现mysql 没起来。
2次报错如下:
1 2 3 |
persistentvolume-controller waiting for a volume to be created, either by external provisioner "fuseim.pri/ifs" or manually created by system administrator Warning FailedScheduling 4m53s (x2 over 10m) default-scheduler 0/2 nodes are available: 2 pod has unbound immediate PersistentVolumeClaims. preemption: 0/2 nodes are available: 2 Preemption is not helpful for scheduling. |
疑惑了很久才发现 nfs provisioner pod 没起来。
然后网上找一圈,90% 以上的帖子 说要改 /etc/kubernetes/manifests/kube-apiserver.yaml
文件
在参数中新增加 - --feature-gates=RemoveSelfLink=false
结果集群立马挂了, 6443 直接不通了,当时还以为是别的原因引起的,又是想了好一阵才想起主要改了这个参数,移除后,集群起来了。
那么肯定不是这个原因了
继续翻,找到这篇 “k8s 1.24 使用nfs“ 和 这篇 https://vqiu.cn/kube120-nfs-provisioner/
里面提到 feature-gates=RemoveSelfLink=false 参数正式移除了,所以导致添加这个之前的nfs provider不好用, 现在使用新的方式去做。
在1.20 版本中此功能现在默认禁用,最终将在后续版本中将此功能移除。更多关注# 1164
解决办法
也就是 2022年2月10号发布的 4.0.16 版本修复了这个问题。
我这里当然是用最新版本嘛,8月4号发布的 4.0.17 。
后续步骤照旧,这里也记录下
1 2 3 4 5 6 7 8 9 10 |
#解压 tar -xvf nfs-subdir-external-provisioner-4.0.17.tgz 解压后修改 values.yaml中的 nfs.server 和 nfs.path字段为NFS服务器的 然后使用 helm安装命令安装即可 helm install nfs-subdir-external-provisioner . -n nfs 会创建一个nfs-client的storageclass, 如果需要可以使用下面命令改成默认存储 kubectl patch storageclass nfs-client -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' |
当然,上面的步骤还可以用helm来安装。
本次折腾,2种方式都顺带试过了,效果相同。
helm 部分
官网 https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
步骤 见下面的readme
1 2 3 4 5 6 |
$ 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=x.x.x.x \ --set nfs.path=/exported/path # 本次用到的命令如下,更多参数看上面的 readme helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \ --set nfs.server=10.29.0.149 \ --set nfs.path=/nfs_ssd/dce5_sc_14.189 \ --set storageClass.onDelete=truey |
应用正常启动,问题解决了。
第二部分,关于特性门控feature-gates
再看看官方文档
https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/feature-gates/
果然已经拿掉了,所以强行加上这个参数后 apiserver起不来也是正常现象。
以后得不时看看 这个地址了。
文章评论