k8s使用nfs配置StorageClass,配置完成后,创建pvc一直为pending的状态。

背景

使用nfs配置StorageClass
配置流程:

  1. 配置 ServiceAccount
  2. 配置 nfs-client-provisioner
  3. 配置 StorageClass
  4. 创建pvc
    nfs-client-provisioner 和 StorageClass 都创建成功,没有报错
    创建pvc后,查看状态一直为pending
    在这里插入图片描述
    查看nfs-client-provisioner 的pod 日志
    在这里插入图片描述
    发现报错
provision "default/exampleforstorageclass" class "managed-nfs-storage": unexpected error getting claim reference: selfLink was empty, can't make reference

解决方案

selfLink was empty 在k8s集群 v1.20之前都存在,在v1.20之后被删除,需要在/etc/kubernetes/manifests/kube-apiserver.yaml 添加参数 增加 `- --feature-gates=RemoveSelfLink=false``

spec:
  containers:
  - command:
    - kube-apiserver
    - --feature-gates=RemoveSelfLink=false

添加之后使用kubeadm部署的集群会自动加载部署pod

kubeadm安装的apiserver是Static Pod,它的配置文件被修改后,立即生效。
Kubelet 会监听该文件的变化,当您修改了 /etc/kubenetes/manifest/kube-apiserver.yaml 文件之后,kubelet 将自动终止原有的 kube-apiserver-{nodename} 的 Pod,并自动创建一个使用了新配置参数的 Pod 作为替代。
如果您有多个 Kubernetes Master 节点,您需要在每一个 Master 节点上都修改该文件,并使各节点上的参数保持一致。

这里需注意如果api-server启动失败 需重新在执行一遍

kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml

配置完之后再使用 kubectl get pvc

image-20220623200938804

pvc STATUS变为Bound

猜你喜欢

转载自blog.csdn.net/qq_45473439/article/details/125434215