Karpenter ¶
Karpenter 是一个 Kubernetes 原生的容量管理器,它根据 Pod 的要求直接配置节点和底层实例。在 AWS 上,kOps 支持使用 Karpenter 或 AWS 自动扩展组 (ASG) 管理实例组。
安装 ¶
如果使用 kOps 1.26 或更早版本,请启用 Karpenter 功能标志
export KOPS_FEATURE_FLAGS="Karpenter"
Karpenter 要求为集群启用服务帐户的外部权限。有关如何启用此功能,请参阅 AWS IAM 角色以用于服务帐户文档。
现有集群 ¶
在现有集群上,您可以通过将以下内容添加到其实例组规范来创建 Karpenter 实例组
spec:
manager: Karpenter
您还需要在集群规范中启用 Karpenter 附加组件
spec:
karpenter:
enabled: true
新的集群 ¶
在新的集群上,您可以简单地添加 --instance-manager=karpenter
标志
kops create cluster --name mycluster.example.com --cloud aws --networking=amazonvpc --zones=eu-central-1a,eu-central-1b --master-count=3 --yes --discovery-store=s3://discovery-store/
Karpenter 管理的实例组 ¶
Karpenter 管理的实例组控制相应的 Karpenter 配置器资源。kOps 将确保配置器使用正确的 AWS 安全组、子网和启动模板。与 ASG 管理的实例组一样,您可以向节点添加标签和污点,kOps 将确保相应地添加这些标签和污点。
请注意,并非所有实例组功能都受支持。
子网 ¶
默认情况下,kOps 将为每个分配了子网的实例组在子网上添加 kops.k8s.io/instance-group/<intancegroup>: "true"
标签。如果启用了子网的手动标记,则必须确保添加这些标签,否则 Karpenter 将无法配置任何实例。
实例类型 ¶
如果您没有指定混合实例策略,则只使用由 spec.machineType
指定的实例类型。使用 Karpenter 时,通常需要从更广泛的实例范围中进行选择。kOps 支持通过 spec.mixedInstancesPolicy.instances
提供实例类型列表,以及通过 spec.mixedInstancesPolicy.instanceRequirements
提供实例类型要求。有关更多详细信息,请参阅 (/instance_groups)[实例组文档]。
已知限制 ¶
Karpenter 管理的启动模板 ¶
在 EKS 上,Karpener 为配置器创建了自己的启动模板。这些启动模板由于多种原因不适用于 kOps 集群。最重要的是,它们不使用支持的 AMI,并且不安装和配置 nodeup,即实例端的 kOps 组件。需要 Karpenter 直接管理启动模板的 Karpenter 功能在 kOps 上不可用。
未管理的配置器资源 ¶
如上所述,kOps 将为每个实例组管理一个配置器资源。从技术上讲,可以直接创建配置器资源,但您必须确保根据 kOps 要求配置配置器。如上所述,Karpenter 管理的启动模板不起作用,您必须维护自己的与 kOps 兼容的启动模板。
其他细微限制 ¶
- 控制平面节点必须使用 ASG,而不是 Karpenter 进行配置。
- 配置器将无条件地使用抢占式实例,并回退到按需实例。
- 配置器将无条件地包含可突发实例组,例如 T3 实例系列。
- kOps 不允许在同一个提供商中混合使用 arm64 和 amd64 实例。