Karpenter 지원 - Eksctl 사용 설명서

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Karpenter 지원

eksctl는 새로 생성된 클러스터에 Karpenter를 추가할 수 있도록 지원합니다. Helm을 사용하여 Karpenter 자체를 설치하는 등 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의 버전입니다. 다음 옵션도 설정할 수 있습니다.

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

Karpenter를 설치하려면 OIDC를 정의해야 합니다.

Karpenter가 성공적으로 설치되면 NodePool(s)NodeClass(es)를 추가하여 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 휴지통 노드에는 role 또는 중 하나를 지정해야 합니다. instanceProfile에서 생성한 프로필의 이름을 사용하도록 선택한 경우 패턴은 eksctl입니다eksctl-KarpenterNodeInstanceProfile-<cluster-name>.

자동 보안 그룹 태그 지정

eksctl Karpenter가 활성화(karpenter.version 지정)되어 있고 태그가에 있는 karpenter.sh/discovery 경우가 클러스터의 공유 노드 보안 그룹에 자동으로 karpenter.sh/discovery 태그를 지정합니다metadata.tags. 이렇게 하면 AWS Load Balancer Controller 호환성이 활성화됩니다.

참고로 karpenter 0.32.0 이상에서는 Provisioners가 더 이상 사용되지 않으며 NodePool로 대체되었습니다.