带污点容忍与亲和性的K8s Pod挂载Vault CSI密钥卷失败排查
问题排查与解决:Spot实例上Vault CSI驱动无法找到Provider
以下是针对该问题的排查步骤和解决方法:
检查Vault CSI驱动的调度范围
Vault CSI驱动通常以DaemonSet形式部署,默认可能仅调度到按需节点。先确认驱动Pod是否在Spot节点上运行:kubectl get pods -n <vault-csi-namespace> -o wide如果没有Spot节点上的驱动Pod,需要修改DaemonSet的调度配置:
- 添加节点亲和性,覆盖按需和Spot节点:
affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/capacityType operator: In values: - ON_DEMAND - SPOT - 如果Spot节点带有污点(比如
spot.amazonaws.com/removal: NoSchedule),给DaemonSet添加对应的容忍:tolerations: - key: "spot.amazonaws.com/removal" operator: "Exists" effect: "NoSchedule"
- 添加节点亲和性,覆盖按需和Spot节点:
验证Spot节点的标签与污点
执行kubectl describe node <spot-node-name>查看节点标签,确认存在eks.amazonaws.com/capacityType: SPOT标签,否则Pod亲和性配置可能无法正确匹配节点。同时检查节点是否有未被CSI驱动容忍的污点,这会阻止驱动Pod调度到该节点。检查CSI节点注册状态
运行kubectl get csinode,查看Spot节点是否已注册Vault CSI驱动。如果未注册,说明驱动Pod没有在该节点上启动,需要回到第一步调整调度配置。查看Spot节点的kubelet日志
登录Spot节点,通过kubelet日志定位具体错误:journalctl -u kubelet -f | grep csi日志中可能会显示无法找到CSI socket、驱动初始化失败等细节,帮助定位问题根源。
验证Spot节点与Vault的网络连通性
偶尔Spot节点的网络策略或安全组可能限制了与Vault服务的通信。在Spot节点上执行curl <vault-service-name>.<vault-namespace>.svc:8200,确认能正常访问Vault服务。
内容的提问来源于stack exchange,提问作者Mateo Arboleda
相关产品推荐
相关产品推荐

