자체 관리형 Bottlerocket 노드 시작 - Amazon EKS

자체 관리형 Bottlerocket 노드 시작

이 주제는 Amazon EKS 클러스터에 등록하는 보틀로켓 노드의 Auto Scaling 그룹을 시작하는 데 도움이 됩니다. Bottlerocket은 Linux 기반 오픈 소스 운영 체제로, AWS가 가상 머신 또는 베어 메탈 호스트에서 컨테이너를 실행하기 위해 특별히 개발됐습니다. 노드가 클러스터에 조인한 이후 Kubernetes 애플리케이션을 배포할 수 있습니다. 보틀로켓에 대한 자세한 내용은 GitHub의 문서를 참조하세요.

중요

Amazon EKS 노드는 표준 Amazon EC2 인스턴스이고, 일반 Amazon EC2 인스턴스 가격을 기반으로 비용이 청구됩니다. 자세한 내용은 Amazon EC2 요금을 참조하세요.

중요
  • x86 또는 Arm 프로세서가 있는 Amazon EC2 인스턴스에는 배포할 수 있지만 GPU 또는 Inferentia 칩이 있는 인스턴스에는 배포할 수 없습니다.

  • 중국(베이징)(cn-north-1), 중국(닝샤)(cn-northwest-1), AWS GovCloud(미국 동부)(us-gov-east-1) 또는 AWS GovCloud (미국 서부)(us-gov-west-1) 리전에는 배포할 수 없습니다.

  • 노드를 배포하는 데 사용할 AWS CloudFormation 템플릿은 없습니다.

  • Bottlerocket 이미지는 SSH 서버나 쉘과 함께 제공되지 않습니다. SSH가 관리 컨테이너를 활성화하고 사용자 데이터와 함께 일부 부트스트래핑 구성 단계를 전달하려면 대역 외 액세스 방법을 사용해야 합니다. 자세한 내용은 GitHub의 bottlerocket Readme.md에 있는 관련 섹션을 참조하세요.

eksctl을 사용하여 Bottlerocket 노드를 시작하기

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

eksctl version

eksctl 설치 또는 업그레이드에 대한 자세한 내용은 eksctl 설치 또는 업그레이드 단원을 참조하십시오.

참고

이 방법은 eksctl로 생성된 클러스터에만 사용할 수 있습니다.

  1. 다음 콘텐츠를 통해 bottlerocket.yaml이라는 파일을 생성합니다. example values를 사용자의 고유한 값으로 교체합니다. Arm 인스턴스에 배포하려는 경우 m5.large을 Arm 인스턴스 유형으로 바꿉니다. Arm Amazon EC2 인스턴스 유형을 지정하는 경우 배포하기 전에 Amazon EKS 최적화 Arm Amazon Linux AMI의 고려 사항을 검토하세요. 사용자 지정 AMI를 사용하여 배포하려는 경우 GitHub의 Bottlerocket 구축eksctl 문서의 사용자 지정 AMI 지원 섹션을 참조하세요. 관리형 노드 그룹을 배포하려면 시작 템플릿을 사용하여 사용자 지정 AMI를 배포해야 합니다. 자세한 내용은 섹션을 참조하세요시작 템플릿 지원

    중요

    AWS Outposts, AWS Wavelength 또는 AWS Local Zones 서브넷에 노드 그룹을 배포하려면 클러스터를 생성할 때 AWS Outposts, AWS Wavelength 또는 AWS Local Zones 서브넷이 전달되지 않은 상태여야 하고, 다음 예의 서브넷을 지정해야 합니다. 자세한 내용은 eksctl 문서에서 구성 파일을 사용하여 nodegroup 생성구성 파일 스키마 섹션을 참조하세요.

    --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: us-west-2 version: '1.21' 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 ssh: allow: true publicKeyName: YOUR_EC2_KEYPAIR_NAME
  2. 다음 명령을 사용하여 노드를 배포합니다.

    eksctl create cluster --config-file=bottlerocket.yaml

    결과:

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

    [✔] created 1 nodegroup(s) in cluster "my-cluster"
  3. (선택 사항) Amazon EBS CSI 플러그인을 사용하여 Bottlerocket 노드에 Kubernetes 영구 볼륨을 생성합니다. 기본 Amazon EBS 드라이버는 Bottlerocket에 포함되지 않은 파일 시스템 도구에 의존합니다. 드라이버를 사용하여 스토리지 클래스를 생성하는 방법에 대한 자세한 내용은 Amazon EBS CSI 드라이버 섹션을 참조하세요.

  4. (선택 사항) 기본적으로 kube-proxy는 Bottlerocket이 부팅 시에 원래 설정한 것과 다를 수 있는 기본값으로 nf_conntrack_max 커널 파라미터를 설정합니다. Bottlerocket의 기본 설정을 유지하려는 경우 다음 명령을 사용하여 kuber-proxy 구성을 편집합니다.

    kubectl edit -n kube-system daemonset kube-proxy

    다음 예제에 표시된 대로 --conntrack-max-per-core--conntrack-min to the kube-proxy 인수를 추가합니다. 0으로 설정할 경우 변경하지 않음을 나타냅니다.

    containers: - command: - kube-proxy - --v=2 - --config=/var/lib/kube-proxy-config/config - --conntrack-max-per-core=0 - --conntrack-min=0
  5. (선택 사항) 샘플 애플리케이션을 배포하여 Bottlerocket 노드를 테스트합니다.

  6. (선택 사항) 모든 Kubernetes 서비스 계정에 IAM 역할을 할당하여 포드에 필요한 최소 권한만 부여하고 클러스터의 포드가 현재 리전 검색과 같은 다른 이유로 Amazon EC2 인스턴스 메타데이터 서비스(IMDS)에 액세스할 필요가 없는 경우는 IMDS에 대한 포드 액세스를 차단할 것을 권장합니다. 자세한 내용은 서비스 계정에 대한 IAM 역할IMDS 및 Amazon EC2 인스턴스 프로파일 자격 증명에 대한 액세스 제한 단원을 참조하십시오.