

 **이 페이지 개선에 도움 주기** 

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 **GitHub에서 이 페이지 편집** 링크를 선택합니다.

# AWS CLI를 사용하여 EKS Auto Mode 클러스터 생성
<a name="automode-get-started-cli"></a>

EKS Auto Mode 클러스터는 컴퓨팅, 스토리지, 네트워킹을 위한 일상적인 클러스터 관리 작업을 자동화합니다. 예를 들어 EKS Auto Mode 클러스터는 추가 노드가 필요한 시기를 자동으로 감지하고 워크로드 수요에 맞춰 새 EC2 인스턴스를 프로비저닝합니다.

이 주제에서는 AWS CLI를 사용하여 새 EKS Auto Mode 클러스터를 생성하고 선택적으로 샘플 워크로드를 배포하는 방법을 안내합니다.

## 사전 조건
<a name="_prerequisites"></a>
+ 장치에 최신 버전의 AWS Command Line Interface(AWS CLI)가 설치 및 구성되어 있습니다. 현재 버전을 확인하려면 `aws --version`을 사용합니다. 최신 버전을 설치하려면 AWS 명령줄 인터페이스 사용 설명서에서 [설치](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 및 [aws config를 사용하여 빠른 구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html#cli-configure-quickstart-config)을 참조하세요.
  + 충분한 IAM 권한을 사용하여 CLI에 로그인하고 IAM 정책, IAM 역할, EKS 클러스터를 포함한 AWS 리소스를 생성합니다.
+ 장치에 설치된 kubectl 명령줄 도구입니다. AWS에서는 EKS 클러스터의 Kubernetes 버전과 동일한 kubectl 버전을 사용할 것을 권장합니다. kubectl을 설치하거나 업그레이드하려면 [`kubectl` 및 `eksctl` 설정](install-kubectl.md) 섹션을 참조하세요.

## VPC 서브넷 지정
<a name="_specify_vpc_subnets"></a>

Amazon EKS Auto Mode는 노드를 VPC 서브넷에 배포합니다. EKS 클러스터를 생성할 때 노드가 배포될 VPC 서브넷을 지정해야 합니다. AWS 계정에서 기본 VPC 서브넷을 사용하거나 중요한 워크로드를 위한 전용 VPC를 생성할 수 있습니다.
+  AWS는 클러스터에 대한 전용 VPC를 생성할 것을 제안합니다. [Amazon EKS 클러스터에 대한 Amazon VPC 생성](creating-a-vpc.md) 방법에 대해 알아봅니다.
+ EKS 콘솔은 새 VPC 생성을 지원합니다. [AWS Management Console을 사용하여 EKS 자동 모드 클러스터 생성](automode-get-started-console.md) 방법에 대해 알아봅니다.
+ 또는 AWS 계정의 기본 VPC를 사용할 수 있습니다. 다음 지침에 따라 서브넷 ID를 찾습니다.

### 기본 VPC의 서브넷 ID를 찾으려면
<a name="auto-find-subnet"></a>

 **AWS CLI 사용:** 

1. 다음 명령을 실행하여 기본 VPC와 해당 서브넷을 나열합니다.

   ```
   aws ec2 describe-subnets --filters "Name=vpc-id,Values=$(aws ec2 describe-vpcs --query 'Vpcs[?IsDefault==`true`].VpcId' --output text)" --query 'Subnets[*].{ID:SubnetId,AZ:AvailabilityZone}' --output table
   ```

1. 출력을 저장하고 **서브넷 ID**를 기록합니다.

   샘플 출력:

   ```
   ----------------------------------------
   |             DescribeSubnets          |
   ----------------------------------------
   |   SubnetId        |   AvailabilityZone  |
   |--------------------|---------------------|
   |   subnet-012345678 |   us-west-2a        |
   |   subnet-234567890 |   us-west-2b        |
   |   subnet-345678901 |   us-west-2c        |
   ----------------------------------------
   ```

## EKS Auto Mode 클러스터에 대한 IAM 역할
<a name="auto-mode-create-roles"></a>

### 클러스터 IAM 역할
<a name="auto-roles-cluster-iam-role"></a>

EKS Auto Mode에서 새 EC2 인스턴스 프로비저닝과 같은 작업을 AWS 계정에서 수행하려면 클러스터 IAM 역할이 필요합니다. EKS에 필요한 권한을 부여하려면 이 역할을 생성해야 합니다. AWS는 클러스터 IAM 역할에 다음 AWS 관리형 정책을 연결할 것을 권장합니다.
+  [AmazonEKSComputePolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEKSComputePolicy) 
+  [AmazonEKSBlockStoragePolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEKSBlockStoragePolicy) 
+  [AmazonEKSLoadBalancingPolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEKSLoadBalancingPolicy) 
+  [AmazonEKSNetworkingPolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEKSNetworkingPolicy) 
+  [AmazonEKSClusterPolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-amazoneksclusterpolicy) 

### 노드 IAM 역할
<a name="auto-roles-node-iam-role"></a>

EKS Auto Mode 클러스터를 생성할 때 노드 IAM 역할을 지정합니다. EKS Auto Mode가 보류 중인 워크로드를 처리할 노드를 생성하면 각 새 EC2 인스턴스 노드에 노드 IAM 역할이 할당됩니다. 이 역할은 노드가 EKS와 통신하도록 허용하지만 일반적으로 노드에서 실행되는 워크로드에서는 액세스하지 않습니다.

노드에서 실행되는 워크로드에 권한을 부여하려면 EKS Pod Identity를 사용합니다. 자세한 내용은 [EKS Pod Identity가 포드에 AWS 서비스에 대한 액세스 권한을 부여하는 방법 알아보기](pod-identities.md) 섹션을 참조하세요.

이 역할을 생성하고 다음 AWS 관리형 정책을 연결해야 합니다.
+  [AmazonEKSWorkerNodeMinimalPolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEKSWorkerNodeMinimalPolicy) 
+  [AmazonEC2ContainerRegistryPullOnly](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonEC2ContainerRegistryPullOnly) 

또한 EKS Auto Mode에는 AWS에서 자동으로 생성 및 구성하는 서비스 연결 역할이 필요합니다. 자세한 내용은 [AWSServiceRoleForAmazonEKS](using-service-linked-roles-eks.md)를 참조하세요.

## EKS Auto Mode 클러스터 IAM 역할 생성
<a name="_create_an_eks_auto_mode_cluster_iam_role"></a>

### 1단계: 신뢰 정책 생성
<a name="_step_1_create_the_trust_policy"></a>

Amazon EKS 서비스가 이 역할을 수임하도록 허용하는 신뢰 정책을 생성합니다. 정책을 `trust-policy.json`으로 저장합니다.

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow", 
      "Principal": {
        "Service": "eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
```

### 2단계: IAM 역할 생성
<a name="_step_2_create_the_iam_role"></a>

신뢰 정책을 사용하여 클러스터 IAM 역할을 생성합니다.

```
aws iam create-role \
    --role-name AmazonEKSAutoClusterRole \
    --assume-role-policy-document file://trust-policy.json
```

### 3단계: 역할 ARN 기록
<a name="_step_3_note_the_role_arn"></a>

다음 단계에서 사용할 새 역할의 ARN을 검색하고 저장합니다.

```
aws iam get-role --role-name AmazonEKSAutoClusterRole --query "Role.Arn" --output text
```

### 4단계: 필수 정책 연결
<a name="_step_4_attach_required_policies"></a>

다음 AWS 관리형 정책을 클러스터 IAM 역할에 연결하여 필요한 권한을 부여합니다.

 **AmazonEKSClusterPolicy**:

```
aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy
```

 **AmazonEKSComputePolicy**:

```
aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSComputePolicy
```

 **AmazonEKSBlockStoragePolicy**:

```
aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSBlockStoragePolicy
```

 **AmazonEKSLoadBalancingPolicy**:

```
aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSLoadBalancingPolicy
```

 **AmazonEKSNetworkingPolicy**:

```
aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSNetworkingPolicy
```

## EKS Auto Mode 노드 IAM 역할 생성
<a name="_create_an_eks_auto_mode_node_iam_role"></a>

### 1단계: 신뢰 정책 생성
<a name="_step_1_create_the_trust_policy_2"></a>

Amazon EKS 서비스가 이 역할을 수임하도록 허용하는 신뢰 정책을 생성합니다. 정책을 `node-trust-policy.json`으로 저장합니다.

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

#### 2단계: 노드 IAM 역할 생성
<a name="_step_2_create_the_node_iam_role"></a>

이전 단계의 **node-trust-policy.json** 파일을 사용하여 역할을 수임할 수 있는 엔터티를 정의합니다. 다음 명령을 실행하여 노드 IAM 역할을 만듭니다.

```
aws iam create-role \
    --role-name AmazonEKSAutoNodeRole \
    --assume-role-policy-document file://node-trust-policy.json
```

#### 3단계: 역할 ARN 기록
<a name="_step_3_note_the_role_arn_2"></a>

역할을 생성한 후 노드 IAM 역할의 ARN을 검색하고 저장합니다. 이후 단계에서 이 ARN이 필요합니다. 다음 명령을 사용하여 ARN을 가져옵니다.

```
aws iam get-role --role-name AmazonEKSAutoNodeRole --query "Role.Arn" --output text
```

#### 4단계: 필수 정책 연결
<a name="_step_4_attach_required_policies_2"></a>

다음 AWS 관리형 정책을 노드 IAM 역할에 연결하여 필요한 권한을 제공합니다.

 **AmazonEKSWorkerNodeMinimalPolicy**:

```
aws iam attach-role-policy \
    --role-name AmazonEKSAutoNodeRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodeMinimalPolicy
```

 **AmazonEC2ContainerRegistryPullOnly**:

```
aws iam attach-role-policy \
    --role-name AmazonEKSAutoNodeRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly
```

## EKS Auto Mode 클러스터 생성
<a name="_create_an_eks_auto_mode_cluster"></a>

### 개요
<a name="_overview"></a>

AWS CLI를 사용하여 EKS Auto Mode 클러스터를 생성하려면 다음 파라미터가 필요합니다.
+  `cluster-name`: 클러스터의 이름입니다.
+  `k8s-version`: Kubernetes 버전(예: 1.31)입니다.
+  `subnet-ids`: 이전 단계에서 식별된 서브넷 ID입니다.
+  `cluster-role-arn`: 클러스터 IAM 역할의 ARN입니다.
+  `node-role-arn`: 노드 IAM 역할의 ARN입니다.

#### 기본 클러스터 구성
<a name="_default_cluster_configurations"></a>

클러스터를 생성하기 전에 다음 기본값과 기능을 검토합니다.
+  `nodePools`: EKS Auto Mode에는 범용 및 시스템 기본 노드 풀이 포함됩니다. [노드 풀](create-node-pool.md)에 대해 자세히 알아봅니다.

 **참고:** EKS Auto Mode의 노드 풀은 Amazon EKS 관리형 노드 그룹과 다르지만 동일한 클러스터에 공존할 수 있습니다.
+  `computeConfig.enabled`: EC2 인스턴스 생성 및 삭제와 같은 일상적인 컴퓨팅 작업을 자동화합니다.
+  `kubernetesNetworkConfig.elasticLoadBalancing.enabled`: Elastic Load Balancer 생성 및 삭제와 같은 로드 밸런싱 작업을 자동화합니다.
+  `storageConfig.blockStorage.enabled`: Amazon EBS 볼륨 생성 및 삭제와 같은 스토리지 작업을 자동화합니다.
+  `accessConfig.authenticationMode`: EKS 액세스 항목이 필요합니다. [EKS 인증 모드](grant-k8s-access.md)에 대해 자세히 알아봅니다.

#### 명령 실행
<a name="_run_the_command"></a>

다음 명령을 사용하여 클러스터를 생성합니다.

```
aws eks create-cluster \
  --region ${AWS_REGION} \
  --cli-input-json \
  "{
      \"name\": \"${CLUSTER_NAME}\",
      \"version\": \"${K8S_VERSION}\",
      \"roleArn\": \"${CLUSTER_ROLE_ARN}\",
      \"resourcesVpcConfig\": {
        \"subnetIds\": ${SUBNETS_JSON},
        \"endpointPublicAccess\": true,
        \"endpointPrivateAccess\": true
      },
      \"computeConfig\": {
        \"enabled\": true,
        \"nodeRoleArn\":\"${NODE_ROLE_ARN}\",
        \"nodePools\": [\"general-purpose\", \"system\"]
      },
      \"kubernetesNetworkConfig\": {
        \"elasticLoadBalancing\": {
          \"enabled\": true
        }
      },
      \"storageConfig\": {
        \"blockStorage\": {
          \"enabled\": true
        }
      },
      \"accessConfig\": {
        \"authenticationMode\": \"API\"
      }
    }"
```

### 클러스터 상태 확인
<a name="_check_cluster_status"></a>

#### 1단계: 클러스터 생성 확인
<a name="_step_1_verify_cluster_creation"></a>

다음 명령을 실행하여 클러스터의 상태를 확인합니다. 클러스터 생성에는 일반적으로 15분 정도 걸립니다.

```
aws eks describe-cluster --name "${CLUSTER_NAME}" --output json
```

#### 2단계: kubeconfig 업데이트
<a name="_step_2_update_kubeconfig"></a>

클러스터가 준비되면 `kubectl`이 클러스터와 통신할 수 있도록 로컬 kubeconfig 파일을 업데이트합니다. 이 구성은 인증에 AWS CLI를 사용합니다.

```
aws eks update-kubeconfig --name "${CLUSTER_NAME}"
```

#### 3단계: 노드 풀 확인
<a name="_step_3_verify_node_pools"></a>

다음 명령을 사용하여 클러스터의 노드 풀을 나열합니다.

```
kubectl get nodepools
```

## 다음 단계
<a name="_next_steps"></a>
+ 새 EKS Auto Mode 클러스터에 [샘플 워크로드를 배포](automode-workload.md)하는 방법을 알아봅니다.