一、卷资源分配问题导致POD Pending
(1)概述
很早之前创建的Prometheus一直可以正常使用,一段时间后发现pod一直处于Pending状态无法启动,describe pod查看到Events中的报错信息。
(2)报错:
第一种:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 32s (x7 over 30m) default-scheduler 0/2 nodes are available: 2 node(s) had volume node affinity conflict. preemption: 0/2 nodes are available: 2 Preemption is not helpful for scheduling.
第二种:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 2m58s (x3 over 23m) default-scheduler running PreBind plugin "VolumeBinding": binding volumes: timed out waiting for the condition
(3)原因分析
经过排查POD配置及EKS 存储相关文档之后排查得出结论:
该POD通过PVC向StorageClass申请了PV,而该SC是向AWS EBS申请的卷资源,开始部署时集群未安装EBS CSI Controller,而是通过SC直接申请的AWS EBS(节点EBS资源),此时集群版本为1.22,POD可以正常运行。后续集群版本正常迭代到1.24后POD无法启动,查阅文档后得知这部分功能在EKS 1.23版本之前是允许的,但是1.23之后必须安装EBS CSI Controller才可以创建EBS卷,因此,POD因为没有向AWS EBS申请到卷资源而处于Pending状态。
(4)解决方法
a. 安装AWS EBS CSI Controller插件
b. 节点Role为EBS CSI Controller添加权限(附加托管策略:AmazonEBSCSIDriverPolicy)