部署有状态服务时卷声明一直挂着,Pod 因为无法挂载卷而调度不出去。
真正麻烦的地方在于,几个原因的现象几乎一样。声明的存储类名称写错或者集群里没有;没有可用容量满足申请的大小;访问模式与后端存储支持的不一致。
先看卷声明的事件
kubectl describe pvc 名称 | grep -A5 Events
接着列出可用的存储类
kubectl get storageclass
随后核对访问模式是否匹配
kubectl get pvc 名称 -o yaml | grep -A2 accessModes
修正存储类后重建声明
kubectl get pv | head
同一份数据我导出了两份,一份留底,一份拿来试。
这类问题以前遇到过,但这次的触发条件和上次不一样。
这类改动我都写进变更记录,过两周再出问题时能对上号。
改完先别撤,确认这几项。卷声明绑定成功,Pod 正常调度并挂载,业务启动完成。
补一句。访问模式写成多节点读写但后端只支持单节点,会一直处于等待状态;申请容量也要确认后端真的有余量。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。