Kubernetes PVC一直处于Pending状态

1. 问题

# pvc一直处于pending状态
$ kubectl get pvc
NAME        STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
bzx-claim   Pending                                      bzx-sc         3m13s

# pods一直处于pending状态
$ kubectl get pods
NAME                                      READY   STATUS             RESTARTS   AGE
bzx-dep-676f47bd86-4q4rx                  0/1     CrashLoopBackOff   2          55s
bzx-dep-676f47bd86-mdhb2                  0/1     Completed          3          55s

# pvc 详细信息
$ kubectl describe pvc bzx-claim
Name:          bzx-claim
Namespace:     default
StorageClass:  bzx-sc
Status:        Pending
Volume:        
Labels:        <none>
Annotations:   volume.beta.kubernetes.io/storage-class: bzx-sc
               volume.beta.kubernetes.io/storage-provisioner: fuseim.pri/ifs
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      
Access Modes:  
VolumeMode:    Filesystem
Used By:       bzx-pod
Events:
  Type    Reason                Age                  From                         Message
  ----    ------                ----                 ----                         -------
  Normal  ExternalProvisioning  5s (x16 over 3m28s)  persistentvolume-controller  waiting for a volume to be created, either by external provisioner "fuseim.pri/ifs" or manually created by system administrator                           # 错误信息

2. 解决

# https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/issues/25

# 解决:
# 修改apiserver的yaml文件
$ vim /etc/kubernetes/manifests/kube-apiserver.yaml
spec:
  containers:
  - command:
    - kube-apiserver
    - --feature-gates=RemoveSelfLink=false
    
# 执行apiserver文件(twice)
$ kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml
$ kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml

3. 查看pvc、pods

# 恢复正常

# pvc
$ kubectl get pvc
NAME        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
bzx-claim   Bound    pvc-e769e5c7-6f34-4971-afea-638212a9d1df   1Gi        RWX            bzx-sc         9m13s
bzx-pvc     Bound    bzx-pv                                     1Gi        RWO                           12h

# pods
$ kubectl get pods
NAME                                      READY   STATUS      RESTARTS   AGE
bzx-pod                                   0/1     Completed   0          9m38s
### 解决 Kubernetes Pod Pending 状态并删除 Pod 当一个 Pod 处于 `Pending` 状态时,通常是因为资源不足或其他配置错误引起的。以下是可能的原因以及解决方案: #### 原因分析 1. **节点资源不足** 如果集群中的节点缺乏足够的 CPU 或内存来调度新的 Pod,则该 Pod 将保持在 `Pending` 状态[^1]。 2. **存储卷绑定失败** 当使用 PersistentVolumeClaim (PVC) 时,如果 PVC 的 StorageClass 不匹配或者无法找到合适的 PV 进行绑定,也会导致 Pod 待机[^3]。 3. **镜像拉取失败** 配置文件中指定的 Docker 镜像不存在或权限设置不当可能导致容器初始化失败,从而进入 `Pending` 状态[^4]。 4. **调度策略冲突** 自定义调度规则(如 NodeSelector、Taints 和 Tolerations)可能会阻止某些 Pods 被分配到任何可用节点上[^2]。 #### 查看具体原因 可以运行以下命令查看详细的事件日志以诊断问题所在: ```bash kubectl describe pod <pod-name> ``` 此操作返回的信息包括但不限于最后尝试启动的时间戳、失败消息等内容。 #### 删除处于 Pending 状态下的 Pod 即使 Pod 没有成功运行起来也可以通过如下方式将其移除掉: ```bash kubectl delete pod <pod-name> --grace-period=0 --force ``` 上述指令利用了 `--force` 参数即时终止目标实例而不考虑优雅关闭周期,默认情况下后者为 30 秒超时期限。 另外需要注意的是,在实际环境中应谨慎对待强制性动作以免影响业务连续性和数据一致性。 ### 示例脚本 下面给出一段简单的 Bash Shell 脚本来自动化查找所有 stuck 在 pending phase 上面的对象并且清理它们。 ```bash #!/bin/bash for ns in $(kubectl get namespaces -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}'); do for p in $(kubectl get pods -n $ns --field-selector=status.phase==Pending -o custom-columns=:metadata.name --no-headers);do echo Deleting pod "$p" from namespace "$ns" kubectl delete pod -n $ns $p --grace-period=0 --force; done done ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值