
karpenter-provider-aws v1.12 实例类型参考指南标签体系、可调度资源与 NodePool 选型实践【免费下载链接】karpenter-provider-awsKarpenter is a Kubernetes Node Autoscaler built for flexibility, performance, and simplicity.项目地址: https://gitcode.com/GitHub_Trending/ka/karpenter-provider-awsKarpenter 的核心能力之一是按实例类型自动选型它把 AWS EC2 实例的硬件规格翻译成一组标准化的 Kubernetes 标签Labels与可调度资源Resources让调度器可以在数百种实例类型之间自由择优。本文以仓库中 v1.12 版本的 instance-types.md 为骨架完整解读这份由代码自动生成的实例类型权威清单它覆盖了 165 个实例族、1200 余种实例类型包含了每种实例在扣除 Karpenter 预留开销之后的真实可调度资源以及可供 NodePool 编写 requirements 使用的全部标签。读完本文你将能够准确读懂表格中每个数字的含义并据此在 NodePool 中写出精确、可维护的实例类型筛选规则。文档定位一份由生成器维护的权威数据源website/content/en/v1.12/reference/instance-types.md是一份自动生成的文档文件开头明确标注了它的出处!-- this document is generated from hack/docs/instancetypes_gen/main.go --。这意味着你不需要手工维护这 3 万多行的数据——只要运行 hack/docs/instancetypes_gen/main.go 中的生成器它就会连接 AWS EC2 API把最新的实例类型数据重新渲染成 Markdown 表格。从生成器源码看文档数据的完整链路是依次在us-east-1、us-east-2、us-west-2三个区域加载 AWS 配置生成器第 131 行跨区域取实例类型的并集保证文档覆盖面最大化构造一个 fake 的EC2NodeClassAMI 选择al2023latest子网选择全部通过instanceTypeProvider.List()拿到完整的实例类型列表生成器第 165-193 行按实例族family聚合、按 CPU 与内存排序后输出每个实例类型的标签表与资源表输出前会剔除topology.kubernetes.io/zone、topology.k8s.aws/zone-id、karpenter.sh/capacity-type这三个随区域/容量类型变化的标签生成器第 212-215 行只保留全局稳定的属性。因此这份文档实际上就是 Karpenter 运行时实例类型数据的一次快照与控制器内部 pkg/providers/instancetype/instancetype.go 中DefaultProvider计算出来的数据同源同构阅读价值与运行时的真实行为完全一致。数值口径三个必须知道的假设文档开头有一段容易被忽略的说明它决定了表中所有数字的含义The values provided below are the resources availablewith some assumptionsandafter the instance overhead has been subtracted:blockDeviceMappingsare not configuredamiFamilyis set toAL2023拆开解读已经扣除了实例开销overhead表中cpu、memory等资源数量是it.Capacity减去it.Overhead.Total()之后的净值生成器第 244 行。Karpenter 会为系统组件kubelet、容器运行时、系统保留等预留一部分资源因此cpu显示为940m而不是完整的1核memory显示为1392Mi而不是2048Mi。这是真正可供 Pod 调度使用的量。未配置blockDeviceMappings即使用 EC2NodeClass 默认的根卷配置所以所有实例的ephemeral-storage都统一显示为17GiAL2023 默认根卷规格下的可用量。如果你在 EC2NodeClass 里配置了自定义块设备映射或实例存储策略实际数值会不同。amiFamily为AL2023不同 AMI 家族AL2、Bottlerocket、Windows 等的开销计算方式不同文档统一以 AL2023 为基准。标签体系用 Karpenter 标签描述 EC2 硬件每个实例类型都会输出一组karpenter.k8s.aws/*标签它们的键名统一定义在 pkg/apis/v1/labels.go 中并在程序初始化时注册为karpv1.WellKnownLabelslabels.go 第 31-64 行即预定义、可直接用于 NodePool requirements 的合法标签。以下是从源码和文档中提取的完整标签清单| 标签 | 含义 | 示例值 | |--|--|--| |karpenter.k8s.aws/instance-category| 实例族类别c/m/r 等 |c、m、r| |karpenter.k8s.aws/instance-family| 实例族名称 |a1、c5、m6i| |karpenter.k8s.aws/instance-generation| 实例代数数字 |5、6| |karpenter.k8s.aws/instance-size| 实例规格后缀 |medium、large、2xlarge、metal| |karpenter.k8s.aws/instance-cpu| vCPU 数量整数 |2、96| |karpenter.k8s.aws/instance-memory| 内存 MiB整数 |4096、196608| |karpenter.k8s.aws/instance-cpu-manufacturer| CPU 厂商 |aws、intel、amd| |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz| CPU 持续主频MHz |2300、3400旧代实例显示0未公布 | |karpenter.k8s.aws/instance-hypervisor| 虚拟化类型 |nitro、xenmetal 实例为空 | |karpenter.k8s.aws/instance-ebs-bandwidth| EBS 带宽Mbps |3500、19000| |karpenter.k8s.aws/instance-network-bandwidth| 网络带宽Mbps |500、25000| |karpenter.k8s.aws/instance-encryption-in-transit-supported| 是否支持传输中加密 |true、false| |karpenter.k8s.aws/instance-capability-flex| 是否属于 Flex 规格 |true、false| |karpenter.k8s.aws/instance-local-nvme| 本地 NVMe 存储GB |75仅本地盘实例族出现 | |karpenter.k8s.aws/instance-gpu-name| GPU 型号名 |radeon-pro-v520、gaudi-hl-205等 | |karpenter.k8s.aws/instance-gpu-manufacturer| GPU 厂商 | 如nvidia、amd| |karpenter.k8s.aws/instance-gpu-count| GPU 数量 |1、4| |karpenter.k8s.aws/instance-gpu-memory| GPU 显存 | 视型号而定 | |karpenter.k8s.aws/instance-accelerator-name| 加速器如 Inferentia/Trainium型号 | 视型号而定 | |karpenter.k8s.aws/instance-accelerator-manufacturer| 加速器厂商 | 如aws| |karpenter.k8s.aws/instance-accelerator-count| 加速器数量 |1、4| |karpenter.k8s.aws/instance-nitro-sandbox| 是否支持 Nitro Enclaves |true/false| |karpenter.k8s.aws/instance-tenancy| 租户模式 |default、dedicated| |karpenter.k8s.aws/placement-group-id/placement-group-partition| 放置组信息 | 与放置组特性相关 | |karpenter.k8s.aws/capacity-reservation-id/-type/-interruptible| 容量预留信息 | 与容量预留特性相关 | |kubernetes.io/arch| 架构 |amd64、arm64| |kubernetes.io/os| 操作系统 |linux| |node.kubernetes.io/instance-type| 标准实例类型名 |a1.medium|其中instance-category、instance-family、instance-generation、instance-size、instance-cpu、instance-memory、instance-cpu-manufacturer、instance-cpu-sustained-clock-speed-mhz、instance-hypervisor、instance-ebs-bandwidth、instance-network-bandwidth、instance-encryption-in-transit-supported、instance-capability-flex、instance-local-nvme等由 labels.go 第 144-172 行 定义。注意文档中instance-memory与instance-cpu是整数型规格值如2048MiB而资源表中的memory是扣除开销后的可调度量如1392Mi两者口径不同使用时要区分。另外labels.go 第 66 行 为instance-tenancy注册了合法的取值集合default/dedicated说明部分标签具有枚举约束NodePool 校验会据此拒绝非法值。资源清单扣除开销后真正可调度的容量每个实例类型都会输出一张资源表资源名集合与 labels.go 第 87-99 行 定义的WellKnownResources一致。以文档开头的a1.medium为例| Resource | Quantity | |--|--| | cpu | 940m | | ephemeral-storage | 17Gi | | memory | 1392Mi | | pods | 8 | | vpc.amazonaws.com/pod-eni | 10 |各资源含义如下cpu可调度 CPU单位m千分之一核。a1.medium显示940m说明 1 核中约 60m 被开销占用c5.24xlarge显示95690m96 核净值。memory可调度内存单位Mi。注意这是扣除 overhead 后的净值例如a1.medium规格内存标签为2048MiB资源表为1392Mi。ephemeral-storage临时存储。生成器对它的输出做了特殊处理统一以BinarySI即Gi格式化生成器第 268-271 行。在未配置 blockDeviceMappings的假设下恒为17Gi。pods该实例类型可承载的最大 Pod 数量受 ENI 数量与实例规格共同约束。例如a1.medium为 8c5.18xlarge为 737。vpc.amazonaws.com/pod-eniAWS VPC CNI 的辅助 ENI 数量文档中约 1051 处出现该资源。这是使用 VPC CNI 时 Pod 密度的重要约束。vpc.amazonaws.com/efa弹性网卡适配器EFA数量出现在支持 EFA 的实例类型如部分 c5n、hpc、p 系列中。nvidia.com/gpu / amd.com/gpuGPU 数量出现在 g4ad/g4dn/g5/g6/p3/p4d/p5 等实例族中文档中nvidia.com/gpu取值可见1、4等。aws.amazon.com/neuron / aws.amazon.com/neuroncoreAWS Inferentia/Trainium 的 Neuron 设备数与 NeuronCore 数出现在 inf1/inf2/trn1 等实例族中如neuron 1 neuroncore 4、neuron 4 neuroncore 16等组合。habana.ai/gaudiHabana Gaudi 加速器数量出现在 dl1 等实例族中对应标签instance-gpu-name取值为gaudi-hl-205。这些扩展资源GPU/Neuron/Gaudi/EFA被 labels.go 第 100-106 行 归类为WellKnownExoticResources在 NodePool 的 requirements 中同样可以直接引用。从表格到 NodePool把标签变成调度规则理解了标签与资源的含义就可以把它们用于 NodePool 的requirements字段做实例类型筛选。仓库中的示例配置展示了最常见的组合方式examples/v1/general-purpose.yaml中requirements组合了架构、容量类型、实例类别与代数spec: template: spec: requirements: - key: kubernetes.io/arch operator: In values: [amd64] - key: kubernetes.io/os operator: In values: [linux] - key: karpenter.sh/capacity-type operator: In values: [on-demand] - key: karpenter.k8s.aws/instance-category operator: In values: [c, m, r] - key: karpenter.k8s.aws/instance-generation operator: Gt values: [2]这段配置的含义是只用 amd64 Linux 的按需实例类别限定为计算c、通用m、内存r三类且代数必须大于 2即第三代以后。这正是文档中标签体系的典型应用——instance-category、instance-generation这类标签让按类别按代数的粗粒度筛选成为可能。文档中的其他标签同样可以直接套用例如用kubernetes.io/arch: [arm64]锁定 Graviton 实例对应 a1/c6g/m6g/r6g/t4g 等arm64实例族用karpenter.k8s.aws/instance-hypervisor: [nitro]强制使用 Nitro 虚拟化获得更好的网络与 EBS 性能用karpenter.k8s.aws/instance-encryption-in-transit-supported: [true]筛选支持传输中加密的实例c5a/c6a 等较新 AMD 实例显示为true而 a1/c1/c3/c4/c5 显示为falseGPU 与加速器工作负载可参考 examples/workloads/gpu-nvidia.yaml 与 [examples/workloads/neuron.yaml)用nvidia.com/gpu、aws.amazon.com/neuron等资源名或instance-gpu-*、instance-accelerator-*标签做精确匹配。一个实用的阅读技巧先用instance-categoryinstance-generation缩小范围再用instance-cpu/instance-memory精确到规格档位。因为文档按实例族组织且族内按 CPU/内存升序排列你可以在某一族内横向比较同规格实例的开销差异例如同为 4 核 16GB 的 c5.xlarge 可调度内存6584Mic6i.xlarge 等新代实例往往略高。实例族全景与选型速览文档按字母序收录了 165 个实例族## xxx Family从 AWS 实例命名惯例与文档中的标签可以快速归类通用型a1、m1~m8 系列含 m5a/m5n/m6i/m7g/m8g 等变体、t1~t4g 突发型计算优化型c1、c3~c8 系列以及带本地盘的 c5ad/c5d/c6gd/c7gd/c8gd 等内存优化型r3~r8 系列、x1/x1e/x2 系列、以及高内存的 u-3tb1/u-6tb1/u7i-*tb/u7in-*tb 等超大内存实例存储优化型d2/d3/d3en、i2~i8 系列本地 NVMe对应instance-local-nvme标签、h1、im4gn/is4genGPU 实例g4ad/g4dn/g5/g5g/g6/g6e/g6f/g7e/gr6、p3/p3dn/p4d/p4de/p5/p5e/p5en/p6-b200/p6-b300资源表含nvidia.com/gpu或amd.com/gpu机器学习加速实例dl1/dl2qHabana Gaudihabana.ai/gaudi、inf1/inf2Inferentia、trn1/trn1n/trn2Trainiumaws.amazon.com/neuron高性能计算hpc6a/hpc6id/hpc7a/hpc7g/hpc8a、vt1视频转码、f1/f2FPGA。表格中的kubernetes.io/arch标签可以直接用于区分架构a1、c6g、m6g、r6g、t4g、g5g、x2gd 等带g后缀的实例族为arm64Graviton其余绝大多数为amd64。使用注意事项与限制数值会随版本漂移文档是运行生成器时的快照AWS 新增实例类型、AMI 开销调整都会改变数值。以当前仓库为准升级 Karpenter 后建议重新生成或核对本页。metal 实例的特殊性metal 实例的instance-hypervisor标签为空裸金属无虚拟化层instance-size为metal资源表与同规格最大虚拟实例接近如 a1.metal 与 a1.4xlarge 一致。旧代实例数据缺失c1/c3/c4 等 Xen 虚拟化老实例的instance-cpu-sustained-clock-speed-mhz为0AWS 未公布持续主频instance-ebs-bandwidth、instance-network-bandwidth也只在部分实例上出现筛选时注意判空。区域/容量类标签被剔除topology.kubernetes.io/zone、topology.k8s.aws/zone-id、karpenter.sh/capacity-type因随环境变化不在此表中但它们依然是 NodePool 可用的合法标签如on-demand/spot。口径区分标签中的instance-memory/instance-cpu是 AWS 规格值整数资源表中的memory/cpu是 Karpenter 扣除开销后的可调度值二者用途不同——前者用于选型筛选后者用于容量计算与装箱bin-packing。延伸阅读完整数据本文全部表格的数据源 website/content/en/v1.12/reference/instance-types.md165 个实例族、1200 实例类型生成器实现hack/docs/instancetypes_gen/main.go标签与资源常量定义pkg/apis/v1/labels.go运行时实例类型 Providerpkg/providers/instancetype/instancetype.goNodePool 选型示例examples/v1/general-purpose.yaml、examples/v1/spot.yaml、examples/v1/multiple-arch.yaml工作负载资源示例examples/workloads/gpu-nvidia.yaml、examples/workloads/neuron.yaml其他参考页v1.12 设置参考、v1.12 指标参考【免费下载链接】karpenter-provider-awsKarpenter is a Kubernetes Node Autoscaler built for flexibility, performance, and simplicity.项目地址: https://gitcode.com/GitHub_Trending/ka/karpenter-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考