

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

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

# 자체 관리형 Bottlerocket 노드 생성
<a name="launch-node-bottlerocket"></a>

**참고**  
관리형 노드 그룹은 사용 사례에 대한 몇 가지 이점을 제공할 수 있습니다. 자세한 내용은 [관리형 노드 그룹을 사용한 노드 수명 주기 간소화](managed-node-groups.md) 섹션을 참조하세요.

이 주제에서는 Amazon EKS 클러스터에 등록하는 [Bottlerocket](https://aws.amazon.com/bottlerocket/) 노드의 Auto Scaling 그룹을 시작하는 방법을 설명합니다. Bottlerocket은 가상 머신 또는 베어메탈 호스트에서 컨테이너를 실행하는 데 사용할 수 있는 AWS의 Linux 기반 오픈 소스 운영 체제입니다. 노드가 클러스터에 조인한 이후 Kubernetes 애플리케이션을 배포할 수 있습니다. Bottlerocket에 대한 자세한 내용은 GitHub의 [Using a Bottlerocket AMI with Amazon EKS](https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-EKS.md)와 `eksctl` 설명서의 [사용자 정의 AMI 지원](https://eksctl.io/usage/custom-ami-support/)을 참조하세요.

현재 위치 업그레이드에 대한 자세한 내용은 GitHub의 [Bottlerocket Update Operator](https://github.com/bottlerocket-os/bottlerocket-update-operator)를 참조하세요.

**중요**  
Amazon EKS 노드는 표준 Amazon EC2 인스턴스이고, 일반 Amazon EC2 인스턴스 가격을 기반으로 비용이 청구됩니다. 자세한 설명은 [Amazon EC2 요금](https://aws.amazon.com/ec2/pricing/)을 참조하세요.
Bottlerocket 노드를 AWS Outposts의 Amazon EKS 확장 클러스터에서 시작할 수 있지만 AWS Outposts의 로컬 클러스터에서는 시작할 수 없습니다. 자세한 내용은 [AWS Outposts를 사용한 Amazon EKS 온프레미스 배포](eks-outposts.md) 섹션을 참조하세요.
`x86` 또는 Arm프로세서가 있는 Amazon EC2 인스턴스에 배포할 수 있습니다. 그러나 Inferentia 칩이 있는 인스턴스에는 배포할 수 없습니다.
Bottlerocket은 AWS CloudFormation과 호환됩니다. 그러나 Amazon EKS용 Bottlerocket 노드를 배포하기 위해 복사할 수 있는 공식 CloudFormation 템플릿은 없습니다.
Bottlerocket 이미지는 SSH 서버나 쉘과 함께 제공되지 않습니다. 대역 외 액세스 방법을 사용하여 SSH가 관리 컨테이너를 사용 설정하고 사용자 데이터와 함께 일부 부트스트래핑 구성 단계를 전달하도록 할 수 있습니다. 자세한 내용은 GitHub의 [bottlerocket Readme.md](https://github.com/bottlerocket-os/bottlerocket)에 있는 관련 섹션을 참조하세요.  
 [탐색](https://github.com/bottlerocket-os/bottlerocket#exploration) 
 [관리자 컨테이너](https://github.com/bottlerocket-os/bottlerocket#admin-container) 
 [Kubernetes 설정](https://github.com/bottlerocket-os/bottlerocket#kubernetes-settings) 

이 절차에는 `eksctl` 버전 `0.215.0` 이상이 필요합니다. 버전은 다음 명령을 통해 확인할 수 있습니다.

```
eksctl version
```

`eksctl`을 설치하거나 업그레이드하는 방법에 대한 지침은 `eksctl` 문서의 [설치](https://eksctl.io/installation)를 참조하세요.참고: 이 절차는 `eksctl`로 생성한 클러스터에서만 작동합니다.

1. 다음 콘텐츠를 디바이스에 복사합니다. *my-cluster*를 해당 클러스터의 이름으로 바꿉니다. 이름에는 영숫자(대소문자 구분)와 하이픈만 사용할 수 있습니다. 영숫자로 시작해야 하며 100자 이하여야 합니다. 이름은 클러스터를 생성하는 AWS 리전과 AWS 계정 내에서 고유해야 합니다. *no-bottlerocket*을 노드 그룹의 이름으로 바꿉니다. 노드 그룹 이름은 63자를 초과할 수 없습니다. 문자나 숫자로 시작하되, 나머지 문자의 경우 하이픈과 밑줄을 포함할 수 있습니다. Arm 인스턴스에 배포하려면 *m5.large*을 Arm 인스턴스 유형으로 바꿉니다. *my-ec2-keypair-name*을 시작 이후 SSH를 사용하여 노드에 연결하는 데 사용할 수 있는 Amazon EC2 SSH 키 페어 이름으로 변경합니다. Amazon EC2 키 페어가 아직 없는 경우 AWS Management Console에서 새로 생성할 수 있습니다. 자세한 내용을 알아보려면 *Amazon EC2 key pairs*의 [Amazon EC2 키 페어](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)를 참조하세요. 나머지 예제 값을 자신의 값으로 바꿉니다. 다 바꾼 후 수정된 명령을 실행하여 `bottlerocket.yaml` 파일을 생성합니다.

   Arm Amazon EC2 인스턴스 유형을 지정하는 경우 배포하기 전에 [Amazon EKS 최적화 Arm Amazon Linux AMI](eks-optimized-ami.md#arm-ami)의 고려 사항을 검토하세요. 사용자 정의 AMI를 사용하여 배포하는 방법에 대한 지침은 GitHub의 [Building Bottlerocket](https://github.com/bottlerocket-os/bottlerocket/blob/develop/BUILDING.md)과 `eksctl` 문서의 [사용자 정의 AMI 지원](https://eksctl.io/usage/custom-ami-support/)을 참조하세요. 관리형 노드 그룹을 배포하려면 시작 템플릿을 사용하여 사용자 정의 AMI를 배포합니다. 자세한 내용은 [시작 템플릿을 사용한 관리형 노드 사용자 지정](launch-templates.md) 섹션을 참조하세요.
**중요**  
노드 그룹을 AWS Outposts, AWS Wavelength 또는 AWS Local Zones 서브넷에 배포하려면 클러스터를 생성할 때 AWS Outposts, AWS Wavelength 또는 AWS 로컬 영역 서브넷을 전달하지 마세요. 다음 예에서는 서브넷을 지정해야 합니다. 자세한 내용은 `eksctl` 문서에서 [구성 파일을 사용하여 nodegroup 생성](https://eksctl.io/usage/nodegroups/#creating-a-nodegroup-from-a-config-file) 및 [구성 파일 스키마](https://eksctl.io/usage/schema/) 부분을 참조하세요. *region-code*를 클러스터가 있는 AWS 리전으로 바꿉니다.

   ```
   cat >bottlerocket.yaml <<EOF
   ---
   apiVersion: eksctl.io/v1alpha5
   kind: ClusterConfig
   
   metadata:
     name: my-cluster
     region: region-code
     version: '1.35'
   
   iam:
     withOIDC: true
   
   nodeGroups:
     - name: ng-bottlerocket
       instanceType: m5.large
       desiredCapacity: 3
       amiFamily: Bottlerocket
       ami: auto-ssm
       iam:
          attachPolicyARNs:
             - arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy
             - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly
             - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
             - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
       ssh:
           allow: true
           publicKeyName: my-ec2-keypair-name
   EOF
   ```

1. 다음 명령을 사용하여 노드를 배포합니다.

   ```
   eksctl create nodegroup --config-file=bottlerocket.yaml
   ```

   예제 출력은 다음과 같습니다.

   노드가 생성되는 동안 여러 줄이 출력됩니다. 출력의 마지막 줄 중 하나는 다음 예제 줄과 유사합니다.

   ```
   [✔]  created 1 nodegroup(s) in cluster "my-cluster"
   ```

1. (선택 사항) [Amazon EBS CSI 플러그 인](https://github.com/kubernetes-sigs/aws-ebs-csi-driver)을 사용하여 Bottlerocket 노드에 Kubernetes [영구 볼륨](https://kubernetes.io/docs/concepts/storage/persistent-volumes/)을 생성합니다. 기본 Amazon EBS 드라이버는 Bottlerocket에 포함되지 않은 파일 시스템 도구에 의존합니다. 드라이버를 사용하여 스토리지 클래스를 생성하는 방법에 대한 자세한 내용은 [Amazon EBS와 함께 Kubernetes 볼륨 스토리지 사용](ebs-csi.md) 부분을 참조하세요.

1. (선택 사항) 기본적으로 `kube-proxy`는 Bottlerocket이 부팅 시에 원래 설정한 것과 다를 수 있는 기본값으로 `nf_conntrack_max` 커널 파라미터를 설정합니다. Bottlerocket의 [기본 설정](https://github.com/bottlerocket-os/bottlerocket-core-kit/blob/develop/packages/release/release-sysctl.conf)을 유지하려면 다음 명령을 사용하여 `kube-proxy` 구성을 편집합니다.

   ```
   kubectl edit -n kube-system daemonset kube-proxy
   ```

   `--conntrack-max-per-core` 및 `--conntrack-min`을 다음 예에 있는 `kube-proxy` 인수에 추가합니다. `0`으로 설정할 경우 변경하지 않음을 나타냅니다.

   ```
         containers:
         - command:
           - kube-proxy
           - --v=2
           - --config=/var/lib/kube-proxy-config/config
           - --conntrack-max-per-core=0
           - --conntrack-min=0
   ```

1. (선택 사항) [샘플 애플리케이션](sample-deployment.md)을 배포하여 Bottlerocket 노드를 테스트합니다.

1. 다음과 같은 조건에 해당하면 IMDS에 대한 포드 액세스를 차단하는 것이 좋습니다.
   + 포드에 필요한 최소 권한만 있도록 모든 Kubernetes 서비스 계정에 IAM 역할을 할당할 계획입니다.
   + 클러스터의 어떤 포드도 현재 AWS 리전 검색 등의 다른 이유로 Amazon EC2 인스턴스 메타데이터 서비스(IMDS)에 액세스할 필요가 없습니다.

   자세한 내용은 [워커 노드에 할당된 인스턴스 프로필에 대한 액세스 제한](https://aws.github.io/aws-eks-best-practices/security/docs/iam/#restrict-access-to-the-instance-profile-assigned-to-the-worker-node) 섹션을 참조하세요.