Karpenter 支援 - Eksctl 使用者指南

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Karpenter 支援

eksctl 支援將 Karpenter 新增至新建立的叢集。它將建立 Karpenter 入門章節中概述的所有必要先決條件,包括使用 Helm 安裝 Karpenter 本身。我們目前支援安裝版本 0.28.0+。如需更多詳細資訊,請參閱 Karpenter 相容性一節。

下列叢集組態概述典型的 Karpenter 安裝:

apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: cluster-with-karpenter region: us-west-2 version: '1.32' # requires a version of Kubernetes compatible with Karpenter tags: karpenter.sh/discovery: cluster-with-karpenter # here, it is set to the cluster name iam: withOIDC: true # required karpenter: version: '1.2.1' # Exact version should be specified according to the Karpenter compatibility matrix managedNodeGroups: - name: managed-ng-1 minSize: 1 maxSize: 2 desiredCapacity: 1

版本是 Karpenter 的版本,因為它可以在其 Helm 儲存庫中找到。也可以設定下列選項:

karpenter: version: '1.2.1' createServiceAccount: true # default is false defaultInstanceProfile: 'KarpenterNodeInstanceProfile' # default is to use the IAM instance profile created by eksctl withSpotInterruptionQueue: true # adds all required policies and rules for supporting Spot Interruption Queue, default is false

必須定義 OIDC 才能安裝 Karpenter。

成功安裝 Karpenter 後,請新增 NodePool(s)NodeClass(s),以允許 Karpenter 開始將節點新增至叢集。

NodePool 的 nodeClassRef區段必須符合 的名稱EC2NodeClass。例如:

apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: example annotations: kubernetes.io/description: "Example NodePool" 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"] nodeClassRef: group: karpenter.k8s.aws kind: EC2NodeClass name: example # must match the name of an EC2NodeClass
apiVersion: karpenter.k8s.aws/v1 kind: EC2NodeClass metadata: name: example annotations: kubernetes.io/description: "Example EC2NodeClass" spec: role: "eksctl-KarpenterNodeRole-${CLUSTER_NAME}" # replace with your cluster name subnetSelectorTerms: - tags: karpenter.sh/discovery: "${CLUSTER_NAME}" # replace with your cluster name securityGroupSelectorTerms: - tags: karpenter.sh/discovery: "${CLUSTER_NAME}" # replace with your cluster name amiSelectorTerms: - alias: al2023@latest # Amazon Linux 2023

請注意,您必須instanceProfile為 lauch 節點指定其中一個 role或 。如果您選擇使用 建立的設定檔instanceProfile名稱,eksctl請遵循 模式:eksctl-KarpenterNodeInstanceProfile-<cluster-name>

自動安全群組標記

eksctl 當 Karpenter 啟用 (karpenter.version指定) 且karpenter.sh/discovery標籤存在於 中karpenter.sh/discovery時, 會自動使用 標記叢集的共用節點安全群組metadata.tags。這可啟用 AWS Load Balancer 控制器相容性。

請注意,使用 karpenter 0.32.0+ 時,Provisioners 已棄用,並由 NodePool 取代。