k8s StorageClass pvc无法动态创建对应PV

故障现象

在查看PVC时一直是pending的状态

kubectl  get pvc
NAME        STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pvc-sc-01   Pending                                      nfs-sc         20m

查看pod日志

kubectl logs -f nfs-provisioner-01-6b74df75f8-746rx -n kube-system

有报错:
Unexpected error getting claim reference to claim “default/pvc-sc-01”: selfLink was empty, can’t make reference

处理方式:

如果是kubuadm安装:

在master节点上,修改/etc/kubernetes/manifests/kube-apiserver.yaml 文件,添加添加- --feature-gates=RemoveSelfLink=false

vim /etc/kubernetes/manifests/kube-apiserver.yaml 
grep -B 5 'feature-gates' /etc/kubernetes/manifests/kube-apiserver.yaml
    - --service-account-key-file=/etc/kubernetes/pki/sa.pub
    - --service-account-signing-key-fil
<think>嗯,用户想了解如何在Kubernetes中配置和使用StorageClass插件。首先,我得回忆一下StorageClass的基本概念。StorageClass是用来定义同类型的存储资源的,这样PVC可以动态地申请PV,而需要手动创建。用户可能已经知道一些基本概念,但可能需要具体的步骤和示例。 接下来,我需要考虑用户可能的实际需求。他们可能正在尝试在集群中设置动态存储供应,比如使用NFS、Ceph RBD或者其他存储系统。根据提供的引用,用户已经引用了Ceph RBD和NFS的例子,所以可能需要涵盖这两种情况的配置方法。 首先,配置StorageClass通常需要安装对应的Provisioner,比如nfs-client或者Ceph的Provisioner。每个Provisioner的配置参数可能同,比如NFS需要指定服务器地址和路径,而Ceph需要指定池、用户等信息。我需要分步骤说明如何安装和配置这些Provisioner。 然后,用户可能需要创建StorageClass的YAML示例,展示如何设置parameters,比如引用4提到的参数配置。例如,对于NFS,可能需要指定server和path;对于Ceph,需要指定monitors、pool等参数。 另外,用户可能关心如何验证配置是否正确,比如创建PVC并检查PV是否自动创建,或者挂载到Pod中测试读写。这部分需要给出具体的kubectl命令和检查步骤,确保用户能够实际操作。 还需要注意StorageClass的默认设置,比如设置默认存储类,这样PVC指定StorageClass时会自动使用。这可能涉及到annotations的设置,如storageclass.kubernetes.io/is-default-class。 用户可能遇到的问题包括Provisioner无法正常工作,参数配置错误,或者权限问题。需要提醒用户检查Provisioner的日志,确认参数是否正确,以及存储后端(如NFS服务器或Ceph集群)的可访问性。 此外,引用2提到StorageClass的参数限制,最多512个参数,总大小超过256KiB,这可能在某些复杂配置时需要注意,避免超出限制。 最后,提供一些常见问题,比如如何设置默认StorageClass,如何回收策略影响数据保留,以及如何根据同的存储系统调整参数。这些问题可以帮助用户进一步理解和调整配置。</think>### Kubernetes StorageClass 插件配置与使用教程 #### 一、StorageClass 核心概念 1. **动态存储供应**:通过定义存储类自动创建持久卷(PV),无需手动创建[^1] 2. **参数配置**:通过 `parameters` 字段定义存储后端的特性,同 Provisioner 支持同参数[^4] 3. **存储分层**:可创建多个 StorageClass 对应同性能的存储(如SSD/HDD) #### 二、NFS StorageClass 配置示例 1. **安装 NFS Provisioner** ```bash helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/ helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \ --set nfs.server=192.168.1.100 \ --set nfs.path=/nfsdata ``` 2. **创建 StorageClass** ```yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nfs-sc provisioner: cluster.local/nfs-provisioner parameters: archiveOnDelete: "false" # 删除时是否保留数据 reclaimPolicy: Delete # 回收策略 volumeBindingMode: Immediate ``` #### 三、Ceph RBD 配置示例 ```yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ceph-rbd provisioner: kubernetes.io/rbd parameters: monitors: 10.0.0.1:6789,10.0.0.2:6789 adminId: admin adminSecretName: ceph-admin-secret pool: kube userId: kube userSecretName: ceph-user-secret imageFormat: "2" imageFeatures: layering ``` #### 四、使用验证流程 1. **创建 PVC** ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test-pvc spec: storageClassName: nfs-sc accessModes: - ReadWriteMany resources: requests: storage: 5Gi ``` 2. **验证资源创建** ```bash kubectl get pvc # 查看PVC绑定状态 kubectl get pv # 查看自动创建PV ``` 3. **挂载测试** ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: nfs-test spec: template: spec: containers: - name: nginx volumeMounts: - mountPath: /data name: nfs-vol volumes: - name: nfs-vol persistentVolumeClaim: claimName: test-pvc ``` #### 五、关键配置参数说明 | 参数类型 | NFS 示例 | Ceph 示例 | |------------------|---------------------------|-------------------------| | 服务器地址 | nfs.server=192.168.1.100 | monitors=10.0.0.1:6789 | | 认证方式 | - | userSecretName=ceph-secret | | 存储池/路径 | nfs.path=/nfsdata | pool=kube | | 高级功能 | archiveOnDelete="false" | imageFeatures=layering | #### 六、常见问题排查 1. **Provisioner 报错**:检查 Pod 日志 `kubectl logs -l app=nfs-provisioner` 2. **挂载失败**:验证存储后端连通性(如 `telnet nfs-server 2049`) 3. **参数生效**:确认 Provisioner 支持的参数列表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值