用途:该技能用于 Kubernetes 节点自动扩缩容与成本优化,基于 Karpenter 直接从云厂商 API 按待调度 Pod 的资源请求供给合适规格的节点,无需节点组,支持亚分钟级扩容与向更便宜节点的主动整合。
主要能力:与 Cluster Autoscaler 相比,不依赖预定义 ASG,可从全部实例类型中选择并装箱,原生支持 Spot(按需回退需显式配置,并非自动)。核心依赖准确的 Pod resources.requests,Karpenter 按 requests 装箱,忽略 limits。实例类型灵活性是装箱与整合的基础,过度限制实例族会削弱两者并收窄 Spot 池。
使用方式:面向 v1 API(Karpenter 1.0+),NodePool 为 karpenter.sh/v1,EC2NodeClass 为 karpenter.k8s.aws/v1;v1 之前的 Provisioner/AWSNodeTemplate 与 v1beta1 已移除。示例包括基础 NodePool、EC2NodeClass、GPU/批处理/有状态等专用 NodePool、中断预算、Pod 调度钩子、Spot 回退与多架构、PDB 保护。
适用场景:节点供给、Spot 实例管理、集群规格调整、成本优化。
限制:v1 中 nodeClassRef 必须同时提供 group、kind、name,否则 NodePool 处于 NotReady;kubelet 配置已从 NodePool 移至 EC2NodeClass.spec.kubelet;consolidationPolicy 的 WhenUnderutilized 已更名为 WhenEmptyOrUnderutilized;expireAfter 移至 spec.template.spec.expireAfter 且可触发漂移;amiSelectorTerms 在 v1 中为必填(amiFamily: Custom 除外)。不要在 Karpenter 管理的节点上运行控制器;NodePool 应互斥或加权;不要在 userData 中调用 /etc/eks/bootstrap.sh。httpPutResponseHopLimit 默认 1,会阻止非 hostNetwork Pod 访问 IMDS,应使用 IRSA 或 EKS Pod Identity。启用整合时建议内存 requests 等于 limits。karpenter.sh/do-not-disrupt 仅阻止自愿中断。中断预算计算会扣除正在删除与 NotReady 节点,调度仅支持 UTC。Spot 到 Spot 整合需特性门控且至少 15 种实例类型。spec.limits 为软性、最终一致的上限,仅按 NodePool 生效。Karpenter 在首次调度中把 preferred affinity 视为必需。建议优先使用 instance-category 与 instance-generation 而非固定实例族列表,并通过 SQS 启用原生中断处理,不要同时运行 Node Termination Handler。