CA 不够用了?Azure 推 Karpenter + Spot,让 AKS 便宜 80%!

引言

在 2023 年的 KubeCon 北美大会上,微软宣布在 Azure Kubernetes Service(AKS) 中引入 Karpenter 作为 Cluster Autoscaler(CA)的替代方案,并将其命名为 Node Autoprovisioning(NAP)。

虽然 Cluster Autoscaler 一直以来是 AKS/Kubernetes 的默认节点扩缩工具,但其存在诸多限制,促使微软引入 Karpenter。

本文将深入探讨这些挑战,并介绍 Karpenter 如何有效解决它们。

CA vs Karpenter vs CloudPilot AI

太长不看版

在这里插入图片描述

如果你想了解这几款工具的更多技术细节、查看 Karpenter 与 Cluster Autoscaler 的架构差异,回复关键词【对比】,获取完整版 PDF 文件。

Cluster Autoscaler 的局限性

以下是 Cluster Autoscaler 进行节点自动扩缩的流程示意图:

在这里插入图片描述

  1. 受限于虚拟机规模集( VMSS Groups )

Cluster Autoscaler 仅支持 AKS 中的虚拟机规模集。

每个 VMSS 由特定类型的 VM 实例组成,具有固定的 VM SKU、硬件规格和 CPU:内存比(例如 Standard D4sv5,4 vCPU 和 16GB 内存)。

  1. 节点池约束

当新 Pod 需要部署但当前节点容量已满时,Cluster Autoscaler 会尝试创建新的节点,但只能基于现有 VMSS SKU 进行扩容。如果该类型的实例不可用,Pod 将保持待调度状态。

  1. 扩缩能力受限

Cluster Autoscaler 仅能基于指定的 VMSS 进行弹性扩缩,即使其他虚拟机 SKU 有闲置资源,也无法利用这些 VM SKU 的剩余容量。

Karpenter的优势

Karpenter 是一款开源的 Kubernetes 集群自动扩缩工具,专为优化性能和成本而设计,旨在以灵活、高性能和简洁的方式实现节点的弹性扩展。它比 Cluster Autoscaler 的扩缩速度更快,并且能够直接创建独立节点,无需传统的节点组限制。

在这里插入图片描述

Karpenter 的核心特性:

高效扩缩:快速弹性扩展 Kubernetes 节点。

灵活调度:无需依赖 VMSS 也能启动新节点。

成本优化:支持自动补丁更新和 Kubernetes 版本升级,降低总体成本。

✅基于 YAML 配置的 NodePool,可自定义节点类型及调度策略。

Karpenter 的中断管理

中断控制器 (Disruption Controller)负责在 Kubernetes 集群中终止或替换节点,并采用以下三种策略来决定如何处理节点:

1. 节点到期

Karpenter 会为节点设置存活时间(TTL,到期后进行替换。例如:

spec:
  disruption:
    consolidationPolicy: WhenUnderutilized
    expireAfter: 300s  # 

2. 延迟合并

设置中断间隔,控制在触发中断操作前等待的时间。

3. 资源整合

Karpenter 通过分析节点资源使用情况来主动减少集群成本。

📌 支持的策略模式:

  • 无工作负载时:仅移除无 Pod 运行的节点。

  • 资源利用不足时:当节点资源利用率低时,尝试减少或替换节点。

示例:

apiVersion: karpenter.sh/v1beta1
kind: NodePool
metadata:
  name: ondemand
spec:
  disruption:
    consolidationPolicy: WhenEmpty
    consolidateAfter: 60s

在 AKS 上启用 Karpenter

启用 Karpenter 之前,需要满足以下前置条件:

安装 Az CLI 并更新至 0.5.17 以上版本

注册 NAP 预览功能

AKS 需使用 Cilium + Overlay 作为网络配置

如果在 Karpenter 安装上有困难,欢迎尝试 Karpenter 的托管云服务 CloudPilot AI(www.cloudpilot.ai),仅需5分钟即可完成安装。

在现有 AKS 集群上启用 Karpenter

确保 AKS 集群启用了 Azure 网络插件,并使用 Cilium 作为网络策略。

关键参数:--node-provisioning-mode Auto,用于将 Karpenter 设为默认节点扩缩工具。

az aks update --name <aks-cluster-name> --resource-group <rg-name> --node-provisioning-mode Auto

创建新的 AKS 集群并启用 Karpenter

az aks create --name <aks-cluster-name> --resource-group <rg-name> \
  --node-provisioning-mode Auto --network-plugin azure --network-plugin-mode overlay --network-dataplane cilium

验证 Karpenter 是否已启用

kubectl api-resources | grep -e aksnodeclasses -e nodeclaims -e nodepools

返回结果示例:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值