跳到内容

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 实例。