You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

删除Cassandra StatefulSet Pod后重新创建遇Pending状态,如何释放已分配资源?

删除Cassandra StatefulSet Pod后重新创建遇Pending状态,如何释放已分配资源?

首先,咱们先明确Pod卡在Pending状态的核心原因——这个状态通常意味着Kubernetes没办法把Pod调度到任何节点上,除了你怀疑的资源占用,存储卷的问题在StatefulSet场景下更常见,毕竟StatefulSet的PersistentVolumeClaim(PVC)是和Pod绑定的,而且不会随Pod删除而自动删除。

我给你一步步梳理排查和解决的方法:

第一步:定位Pending的具体原因

先拿到最直接的线索,运行以下命令查看第一个待启动的Cassandra Pod(StatefulSet是按顺序启动的,第一个是cassandra-0)的详细事件:

kubectl describe pod cassandra-0

重点看输出里的Events部分,这里会明确告诉你为什么Pod无法调度,比如“PersistentVolumeClaim is not bound”(PVC未绑定)、“no nodes available to schedule pods”(没有可用节点)或者磁盘空间不足之类的信息。

第二步:检查存储资源状态

StatefulSet的PVC不会随Pod删除而消失,你可以查看现有的PVC:

kubectl get pvc

你会发现之前三个Pod对应的PVC(比如cassandra-data-cassandra-0、cassandra-data-cassandra-1、cassandra-data-cassandra-2)还存在,状态是Bound。当你重建Pod时,K8s会尝试复用这些已存在的PVC,如果这些PVC对应的存储卷(PV)在Kind节点上出现了损坏、空间不足的情况,新Pod就无法挂载,进而卡在Pending。

第三步:释放旧存储资源

如果你不需要保留旧的Cassandra数据,可以直接删除这些旧的PVC,让StatefulSet重新创建新的存储卷:

kubectl delete pvc -l app=cassandra

执行这个命令后,StatefulSet会自动根据你YAML里的volumeClaimTemplates重新生成PVC,对应的存储卷也会被重新分配,新Pod应该就能正常启动了。

补充排查点

如果删除PVC后还是不行,可以试试这几个方向:

  • 检查节点磁盘空间:kubectl top nodes不会显示磁盘使用情况,你可以进入Kind的worker节点查看:
    docker exec -it kind-worker df -h
    
    看看存储卷所在的目录(通常是/var/lib/docker/volumes/下的相关目录)是不是已经满了,如果是,清理节点上的无用数据即可。
  • 验证StorageClass有效性:运行以下命令确认你的fast存储类状态正常:
    kubectl get storageclass fast
    
    如果状态异常,可以先删除再重新创建:
    kubectl delete storageclass fast
    kubectl apply -f <你的Cassandra YAML文件路径>
    

总的来说,你遇到的问题大概率是旧PVC没有被清理导致的,删除旧PVC就能解决。如果还是有问题,kubectl describe pod的Events信息是你定位问题的核心依据。

备注:内容来源于stack exchange,提问作者best_of_man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 15:32:50