자체 관리형 Bottlerocket 노드 생성
자체 관리형 Bottlerocket 노드 생성
Amazon EKS 클러스터에 등록되는 Bottlerocket 노드의 Auto Scaling 그룹을 시작하는 방법을 설명합니다.
출처: 문서
본문
참고: 관리형 노드 그룹이 사용 사례에 몇 가지 이점을 제공할 수 있습니다. 자세한 내용은 "관리형 노드 그룹으로 노드 라이프사이클 간소화"를 참고하세요.
이 주제는 Amazon EKS 클러스터에 등록되는 Bottlerocket 노드의 Auto Scaling 그룹을 시작하는 방법을 설명합니다. Bottlerocket은 가상 머신이나 베어메탈 호스트에서 컨테이너를 실행하는 데 사용할 수 있는 AWS의 Linux 기반 오픈 소스 운영 체제입니다. 노드가 클러스터에 가입한 후 Kubernetes 애플리케이션을 배포할 수 있습니다. Bottlerocket에 대한 자세한 내용은 GitHub의 "Amazon EKS에서 Bottlerocket AMI 사용" 및 eksctl 문서의 "Custom AMI support"를 참고하세요.
인플레이스 업그레이드에 대한 자세한 내용은 GitHub의 "Bottlerocket Update Operator"를 참고하세요.
중요: Amazon EKS 노드는 표준 Amazon EC2 인스턴스이며, 일반적인 Amazon EC2 인스턴스 가격에 따라 요금이 부과됩니다. 자세한 내용은 Amazon EC2 요금을 참고하세요.
AWS Outposts의 Amazon EKS 확장 클러스터에서는 Bottlerocket 노드를 시작할 수 있지만, AWS Outposts의 로컬 클러스터에서는 시작할 수 없습니다. 자세한 내용은 "AWS Outposts로 Amazon EKS 온프레미스 배포"를 참고하세요.
x86 또는 Arm 프로세서가 있는 Amazon EC2 인스턴스에 배포할 수 있습니다. 하지만 Inferentia 칩이 있는 인스턴스에는 배포할 수 없습니다.
Bottlerocket은 AWS CloudFormation과 호환됩니다. 그러나 Amazon EKS용 Bottlerocket 노드를 배포하기 위해 복사할 수 있는 공식 CloudFormation 템플릿은 없습니다.
Bottlerocket 이미지에는 SSH 서버나 셸이 제공되지 않습니다. 관리 컨테이너(admin container)를 활성화해 SSH를 허용하고 사용자 데이터로 일부 부트스트래핑 구성 단계를 전달하는 대역 외(out-of-band) 액세스 방법을 사용할 수 있습니다. 자세한 내용은 GitHub의 bottlerocket README.md에서 다음 섹션을 참고하세요.
- Exploration
- Admin container
- Kubernetes settings
이 절차는 eksctl 버전 0.215.0 이상이 필요합니다. 다음 명령으로 버전을 확인할 수 있습니다.
eksctl version
eksctl 설치 또는 업그레이드 방법은 eksctl 문서의 "Installation"을 참고하세요.
참고: 이 절차는
eksctl로 생성된 클러스터에만 적용됩니다.
다음 내용을 기기에 복사합니다. my-cluster를 클러스터 이름으로 바꾸세요. 이름에는 영숫자(대소문자 구분)와 하이픈만 포함할 수 있습니다. 영숫자로 시작해야 하며 100자를 넘을 수 없습니다. 이름은 클러스터를 만드는 AWS 리전과 AWS 계정 내에서 고유해야 합니다. ng-bottlerocket을 노드 그룹 이름으로 바꾸세요. 노드 그룹 이름은 63자를 넘을 수 없습니다. 문자나 숫자로 시작해야 하며, 나머지 문자에는 하이픈과 밑줄을 포함할 수 있습니다. Arm 인스턴스에 배포하려면 m5.large를 Arm 인스턴스 유형으로 바꾸세요. my-ec2-keypair-name을 노드가 시작된 후 SSH로 노드에 연결하는 데 사용할 수 있는 Amazon EC2 SSH 키 페어 이름으로 바꾸세요. Amazon EC2 키 페어가 없다면 AWS Management Console에서 만들 수 있습니다. 자세한 내용은 Amazon EC2 사용 설명서의 "Amazon EC2 키 페어"를 참고하세요. 나머지 모든 예제 값을 자신의 값으로 바꾸세요. 바꾼 후 수정된 명령을 실행해 bottlerocket.yaml 파일을 만듭니다.
Arm Amazon EC2 인스턴스 유형을 지정한다면 배포 전에 "Amazon EKS 최적화 Arm Amazon Linux AMI"의 고려 사항을 검토하세요. 사용자 지정 AMI를 사용한 배포 방법은 GitHub의 "Building Bottlerocket" 및 eksctl 문서의 "Custom AMI support"를 참고하세요. 관리형 노드 그룹을 배포하려면 런치 템플릿을 사용해 사용자 지정 AMI를 배포하세요. 자세한 내용은 "런치 템플릿으로 관리형 노드 사용자 지정"을 참고하세요.
중요: AWS Outposts, AWS Wavelength 또는 AWS Local Zone 서브넷에 노드 그룹을 배포하려면 클러스터를 만들 때 AWS Outposts, AWS Wavelength 또는 AWS Local Zone 서브넷을 전달하지 마세요. 다음 예제에서 서브넷을 지정해야 합니다. 자세한 내용은
eksctl문서의 "구성 파일에서 노드 그룹 생성" 및 "Config file schema"를 참고하세요.region-code를 클러스터가 있는 AWS 리전으로 바꾸세요.
cat >bottlerocket.yaml
Amazon EBS CSI Plugin을 사용해 Bottlerocket 노드에 영구 볼륨을 생성할 수 있습니다. 기본 Amazon EBS 드라이버는 Bottlerocket에 포함되지 않은 파일 시스템 도구에 의존합니다. 드라이버를 사용한 스토리지 클래스 생성에 대한 자세한 내용은 "Amazon EBS와 함께 Kubernetes 볼륨 스토리지 사용"을 참고하세요.
(선택 사항) 기본적으로 kube-proxy는 nf_conntrack_max 커널 매개변수를 Bottlerocket이 부팅 시 원래 설정하는 값과 다를 수 있는 기본값으로 설정합니다. Bottlerocket의 기본 설정을 유지하려면 다음 명령으로 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
(선택 사항) Bottlerocket 노드를 테스트할 샘플 애플리케이션을 배포합니다.
다음 조건이 모두 참이라면 Pod의 IMDS 액세스 차단을 권장합니다.
- 모든 Kubernetes 서비스 계정에 IAM 역할을 할당하여 Pod가 필요한 최소 권한만 갖도록 계획 중인 경우.
- 클러스터의 어떤 Pod도 현재 AWS 리전 검색 같은 다른 이유로 IMDS에 액세스할 필요가 없는 경우.
자세한 내용은 "워커 노드에 할당된 인스턴스 프로파일 액세스 제한"을 참고하세요.