

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

# 추가 기능
<a name="addons"></a>

이 주제에서는 eksctl을 사용하여 Amazon EKS 클러스터의 Amazon EKS 추가 기능을 관리하는 방법을 설명합니다. EKS 추가 기능은 EKS API를 통해 Kubernetes 운영 소프트웨어를 활성화하고 관리할 수 있는 기능으로, 클러스터 추가 기능의 설치, 구성 및 업데이트 프로세스를 간소화합니다.

**주의**  
이제 eksctl은 기본 추가 기능(vpc-cni, coredns, kube-proxy)을 자체 관리형 추가 기능 대신 EKS 추가 기능으로 설치합니다. 즉, eksctl v0.184.0 이상으로 생성된 클러스터에는 `eksctl utils update-*` 명령 `eksctl update addon` 대신를 사용해야 합니다.

Cilium 및 Calico와 같은 대체 CNI 플러그인을 사용하려는 경우 기본 네트워킹 추가 기능 없이 클러스터를 생성할 수 있습니다.

이제 EKS 추가 기능은 EKS Pod Identity Associations를 통한 IAM 권한 수신을 지원하여 클러스터 외부의 AWS 서비스와 연결할 수 있습니다.

## 추가 기능 생성
<a name="addons-create"></a>

Eksctl은 클러스터 추가 기능을 보다 유연하게 관리할 수 있습니다.

구성 파일에서 원하는 추가 기능과 (필요한 경우) 연결할 역할 또는 정책을 지정할 수 있습니다.

```
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: example-cluster
  region: us-west-2

iam:
  withOIDC: true

addons:
- name: vpc-cni
  # all below properties are optional
  version: 1.7.5
  tags:
    team: eks
  # you can specify at most one of:
  attachPolicyARNs:
  - arn:aws:iam::account:policy/AmazonEKS_CNI_Policy
  # or
  serviceAccountRoleARN: arn:aws:iam::account:role/AmazonEKSCNIAccess
  # or
  attachPolicy:
    Statement:
    - Effect: Allow
      Action:
      - ec2:AssignPrivateIpAddresses
      - ec2:AttachNetworkInterface
      - ec2:CreateNetworkInterface
      - ec2:DeleteNetworkInterface
      - ec2:DescribeInstances
      - ec2:DescribeTags
      - ec2:DescribeNetworkInterfaces
      - ec2:DescribeInstanceTypes
      - ec2:DetachNetworkInterface
      - ec2:ModifyNetworkInterfaceAttribute
      - ec2:UnassignPrivateIpAddresses
      Resource: '*'
```

`attachPolicy`, `attachPolicyARNs` 및 중 최대 하나를 지정할 수 있습니다`serviceAccountRoleARN`.

이 중 아무 것도 지정하지 않으면 모든 권장 정책이 연결된 역할로 추가 기능이 생성됩니다.

**참고**  
정책을 추가 기능에 연결하려면 클러스터가 `OIDC` 활성화되어 있어야 합니다. 활성화되지 않은 경우 연결된 정책은 무시됩니다.

그런 다음 클러스터 생성 프로세스 중에 이러한 추가 기능을 생성할 수 있습니다.

```
eksctl create cluster -f config.yaml
```

또는 구성 파일 또는 CLI 플래그를 사용하여 클러스터 생성 후 명시적으로 추가 기능을 생성합니다.

```
eksctl create addon -f config.yaml
```

```
eksctl create addon --name vpc-cni --version 1.7.5 --service-account-role-arn <role-arn>
```

```
eksctl create addon --name aws-ebs-csi-driver --namespace-config 'namespace=custom-namespace'
```

**작은 정보**  
`--namespace-config` 플래그를 사용하여 기본 네임스페이스 대신 사용자 지정 네임스페이스에 추가 기능을 배포합니다.

추가 기능을 생성하는 동안 클러스터에 자체 관리형 버전의 추가 기능이 이미 있는 경우 구성 파일을 통해 `resolveConflicts` 옵션을 설정하여 잠재적 `configMap` 충돌을 해결하는 방법을 선택할 수 있습니다. 예:

```
addons:
- name: vpc-cni
  attachPolicyARNs:
    - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
  resolveConflicts: overwrite
```

추가 기능 생성의 경우 `resolveConflicts` 필드는 세 가지 고유한 값을 지원합니다.
+  `none` - EKS는 값을 변경하지 않습니다. 생성이 실패할 수 있습니다.
+  `overwrite` - EKS는 구성 변경 사항을 EKS 기본값으로 다시 덮어씁니다.
+  `preserve` - EKS는 값을 변경하지 않습니다. 생성이 실패할 수 있습니다. (과 비슷`none`하지만 [`preserve` 추가 기능 업데이트 시](#update-addons)와 다름).

## 활성화된 추가 기능 나열
<a name="_listing_enabled_addons"></a>

다음을 실행하여 클러스터에서 활성화된 추가 기능을 확인할 수 있습니다.

```
eksctl get addons --cluster <cluster-name>
```

또는

```
eksctl get addons -f config.yaml
```

## 추가 기능의 버전 설정
<a name="_setting_the_addons_version"></a>

추가 기능의 버전 설정은 선택 사항입니다. `version` 필드를 비워 두면 추가 기능의 기본 버전이 확인`eksctl`됩니다. 특정 추가 기능의 기본 버전에 대한 자세한 내용은 EKS에 대한 AWS 설명서에서 확인할 수 있습니다. 기본 버전이 반드시 사용 가능한 최신 버전이 아닐 수도 있습니다.

추가 기능 버전을 로 설정할 수 있습니다`latest`. 또는 `v1.7.5-eksbuild.1` 또는와 같이 지정된 EKS 빌드 태그로 버전을 설정할 수 있습니다`v1.7.5-eksbuild.2`. `v1.7.5` 또는와 같은 추가 기능의 릴리스 버전으로 설정할 수도 있으며 `1.7.5`접`eksbuild`미사 태그가 검색되고 자동으로 설정됩니다.

사용 가능한 추가 기능과 해당 버전을 검색하는 방법은 아래 섹션을 참조하세요.

## 추가 기능 검색
<a name="_discovering_addons"></a>

다음을 실행하여 클러스터에 설치할 수 있는 추가 기능을 확인할 수 있습니다.

```
eksctl utils describe-addon-versions --cluster <cluster-name>
```

그러면 클러스터의 kubernetes 버전이 검색되고 해당 버전을 기준으로 필터링됩니다. 또는 특정 kubernetes 버전에 사용할 수 있는 추가 기능을 확인하려면 다음을 실행할 수 있습니다.

```
eksctl utils describe-addon-versions --kubernetes-version <version>
```

`type`, `owner` 및/또는를 필터링하여 추가 기능을 검색할 수도 있습니다`publisher`. 예를 들어 특정 소유자 및 유형에 대한 추가 기능을 보려면 다음을 실행할 수 있습니다.

```
eksctl utils describe-addon-versions --kubernetes-version 1.22 --types "infra-management, policy-management" --owners "aws-marketplace"
```

`types`, `owners` 및 `publishers` 플래그는 선택 사항이며 결과를 필터링하기 위해 함께 또는 개별적으로 지정할 수 있습니다.

## 추가 기능에 대한 구성 스키마 검색
<a name="_discovering_the_configuration_schema_for_addons"></a>

추가 기능 및 버전을 검색한 후 JSON 구성 스키마를 가져와 사용자 지정 옵션을 볼 수 있습니다.

```
eksctl utils describe-addon-configuration --name vpc-cni --version v1.12.0-eksbuild.1
```

그러면이 추가 기능에 사용할 수 있는 다양한 옵션의 JSON 스키마가 반환됩니다.

## 구성 값 작업
<a name="_working_with_configuration_values"></a>

 `ConfigurationValues`는 추가 기능을 생성하거나 업데이트하는 동안 구성 파일에 제공될 수 있습니다. JSON 및 YAML 형식만 지원됩니다.

예:

```
addons:
- name: coredns
  configurationValues: |-
    replicaCount: 2
```

```
addons:
- name: coredns
  version: latest
  configurationValues: "{\"replicaCount\":3}"
  resolveConflicts: overwrite
```

**참고**  
추가 기능 구성 값을 수정하는 경우 구성 충돌이 발생합니다.

```
Thus, we need to specify how to deal with those by setting the `resolveConflicts` field accordingly.
As in this scenario we want to modify these values, we'd set `resolveConflicts: overwrite`.
```

또한 get 명령은 이제 추가 기능에 `ConfigurationValues` 대한 도 검색합니다. 예:

```
eksctl get addon --cluster my-cluster --output yaml
```

```
- ConfigurationValues: '{"replicaCount":3}'
  IAMRole: ""
  Issues: null
  Name: coredns
  NewerVersion: ""
  Status: ACTIVE
  Version: v1.8.7-eksbuild.3
```

## 사용자 지정 네임스페이스 사용
<a name="_using_custom_namespace"></a>

추가 기능을 생성하는 동안 구성 파일에 사용자 지정 네임스페이스를 제공할 수 있습니다. 추가 기능이 생성된 후에는 네임스페이스를 업데이트할 수 없습니다.

### 구성 파일 사용
<a name="_using_config_file"></a>

```
addons:
  - name: aws-ebs-csi-driver
    version: latest
    namespaceConfig:
      namespace: custom-namespace
```

### CLI 플래그 사용
<a name="_using_cli_flag"></a>

또는 `--namespace-config` 플래그를 사용하여 사용자 지정 네임스페이스를 지정할 수 있습니다.

```
eksctl create addon --cluster my-cluster --name aws-ebs-csi-driver --namespace-config 'namespace=custom-namespace'
```

get 명령은 추가 기능의 네임스페이스 값도 검색합니다.

```
- ConfigurationValues: ""
  IAMRole: ""
  Issues: null
  Name: aws-ebs-csi-driver
  NamespaceConfig:
    namespace: custom-namespace
  NewerVersion: ""
  PodIdentityAssociations: null
  Status: ACTIVE
  Version: v1.47.0-eksbuild.1
```

## 추가 기능 업데이트
<a name="update-addons"></a>

다음을 실행하여 추가 기능을 최신 버전으로 업데이트하고 연결된 정책을 변경할 수 있습니다.

```
eksctl update addon -f config.yaml
```

```
eksctl update addon --name vpc-cni --version 1.8.0 --service-account-role-arn <new-role>
```

**참고**  
추가 기능이 생성되면 네임스페이스 구성을 업데이트할 수 없습니다. `--namespace-config` 플래그는 추가 기능을 생성하는 동안에만 사용할 수 있습니다.

추가 기능 생성과 마찬가지로 추가 기능을 업데이트할 때 해당 추가 기능의에 이전에 적용했을 수 있는 구성 변경 사항을 완전히 제어할 수 있습니다`configMap`. 특히 보존하거나 덮어쓸 수 있습니다. 이 선택적 기능은 동일한 구성 파일 필드를 통해 사용할 수 있습니다`resolveConflicts`. 예:

```
addons:
- name: vpc-cni
  attachPolicyARNs:
    - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
  resolveConflicts: preserve
```

추가 기능 업데이트의 경우 `resolveConflicts` 필드는 세 가지 고유한 값을 허용합니다.
+  `none` - EKS는 값을 변경하지 않습니다. 업데이트가 실패할 수 있습니다.
+  `overwrite` - EKS는 구성 변경 사항을 EKS 기본값으로 다시 덮어씁니다.
+  `preserve` - EKS는 값을 보존합니다. 이 옵션을 선택하는 경우 프로덕션 클러스터의 추가 기능을 업데이트하기 전에 비프로덕션 클러스터의 필드 및 값 변경 사항을 테스트하는 것이 좋습니다.

## 추가 기능 삭제
<a name="_deleting_addons"></a>

다음을 실행하여 추가 기능을 삭제할 수 있습니다.

```
eksctl delete addon --cluster <cluster-name> --name <addon-name>
```

그러면 추가 기능과 연결된 모든 IAM 역할이 삭제됩니다.

클러스터를 삭제하면 추가 기능에 연결된 모든 IAM 역할도 삭제됩니다.

## 기본 네트워킹 추가 기능을 위한 클러스터 생성 유연성
<a name="barecluster"></a>

클러스터가 생성되면 EKS는 VPC CNI, CoreDNS 및 kube-proxy를 자체 관리형 추가 기능으로 자동으로 설치합니다. Cilium 및 Calico와 같은 다른 CNI 플러그인을 사용하기 위해이 동작을 비활성화하기 위해 eksctl은 이제 기본 네트워킹 추가 기능 없이 클러스터 생성을 지원합니다. 이러한 클러스터를 생성하려면 다음과 `addonsConfig.disableDefaultAddons`같이를 설정합니다.

```
addonsConfig:
  disableDefaultAddons: true
```

```
eksctl create cluster -f cluster.yaml
```

VPC CNI가 아닌 CoreDNS 및 kube-proxy만 있는 클러스터를 생성하려면에서 추가 기능을 명시적으로 지정`addons`하고 다음과 `addonsConfig.disableDefaultAddons`같이를 설정합니다.

```
addonsConfig:
  disableDefaultAddons: true
addons:
  - name: kube-proxy
  - name: coredns
```

```
eksctl create cluster -f cluster.yaml
```

이 변경의 일환으로 eksctl은 이제 `addonsConfig.disableDefaultAddons`가 명시적으로 true로 설정되지 않은 경우 클러스터 생성 중에 자체 관리형 추가 기능 대신 기본 추가 기능을 EKS 추가 기능으로 설치합니다. 따라서 eksctl v0.184.0 이상으로 생성된 클러스터의 추가 기능을 업데이트하는 데 명령을 더 이상 사용할 수 `eksctl utils update-*` 없습니다.
+  `eksctl utils update-aws-node` 
+  `eksctl utils update-coredns` 
+  `eksctl utils update-kube-proxy` 

대신를 지금 사용해야 `eksctl update addon` 합니다.

자세한 내용은 [Amazon EKS에서 네트워킹 추가 기능을 위한 클러스터 생성 유연성 도입을 참조하세요](https://aws.amazon.com/about-aws/whats-new/2024/06/amazon-eks-cluster-creation-flexibility-networking-add-ons/).