K8S中storageClass
从 NFS Provisioner (nfs-client-provisioner) 的日志来看,问题的核心是:
关键错误
E0806 14:01:35.881674 1 controller.go:1004] provision "default/test-claim" class "managed-nfs-storage":
unexpected error getting claim reference: selfLink was empty, can't make reference
问题原因
- Kubernetes API 废弃了
**selfLink**字段(v1.20+),但 NFS Provisioner 仍然依赖它。 - Provisioner 无法正确引用 PVC,导致动态 PV 创建失败。
解决方案
方法 1:启用 Legacy **selfLink**(临时方案)
在 kube-apiserver 配置中启用 selfLink(不推荐长期使用):
# 修改 /etc/kubernetes/manifests/kube-apiserver.yaml
spec:
containers:
- command:
- kube-apiserver
- --feature-gates=RemoveSelfLink=false # 添加这一行
然后重启 kube-apiserver:
systemctl restart kubelet
⚠️ 警告:
selfLink已在 Kubernetes v1.24 完全移除,此方法可能在将来失效。
方法 2:升级/替换 NFS Provisioner
方案 1:使用更新的 NFS Provisioner
推荐使用 NFS Subdir External Provisioner(社区维护的活跃项目):
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=<NFS_SERVER_IP> \
--set nfs.path=/your/nfs/share \
--set storageClass.name=managed-nfs-storage
方案 2:改用 CSI Driver
如果集群版本较新(v1.20+),建议迁移到 NFS CSI Driver:
helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts
helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs \
--set nfs.server=<NFS_SERVER_IP> \
--set nfs.mountPath=/your/nfs/share
方法 3:手动创建 PV/PVC(临时绕过)
如果急需使用,可以手动创建 PV 并绑定 PVC:
# manual-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: test-pv-manual
spec:
storageClassName: managed-nfs-storage
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
server: <NFS_SERVER_IP>
path: /your/nfs/share
kubectl apply -f manual-pv.yaml
验证步骤
- 检查 PV 是否创建:
kubectl get pv
- 确认 PVC 已绑定:
kubectl get pvc test-claim
-
- STATUS 应为
**Bound**。
- STATUS 应为
- 重新部署 Pod:
kubectl delete pod <your-pod> && kubectl apply -f pod.yaml
根本解决建议
| 方案 | 适用场景 | 备注 |
|---|---|---|
启用 **selfLink** |
临时测试环境 | 不推荐生产使用 |
| 升级到 NFS Subdir Provisioner | 兼容旧版 Kubernetes | 社区维护,支持新 API |
| 迁移到 NFS CSI Driver | 新集群(v1.20+) | 官方推荐方案 |
| 手动创建 PV | 紧急恢复 | 需维护 PV 生命周期 |
推荐顺序:
CSI Driver > NFS Subdir Provisioner > 手动 PV > 启用 **selfLink**
附加排查
如果问题仍未解决,请提供:
- NFS 服务器状态:
showmount -e <NFS_SERVER_IP>
- StorageClass 详细配置:
kubectl get sc managed-nfs-storage -o yaml
- PVC 的完整 YAML:
kubectl get pvc test-claim -o yaml
我会根据这些信息进一步分析! 🛠️

浙公网安备 33010602011771号