AWS CloudFormation 노드 스택 업데이트
AWS CloudFormation 노드 스택 업데이트
기존 AWS CloudFormation 자체 관리형 노드 스택을 새 AMI로 업데이트하는 방법을 설명합니다.
출처: 문서
본문
이 주제는 기존 AWS CloudFormation 자체 관리형 노드 스택을 새 AMI로 업데이트하는 방법을 설명합니다. 이 절차를 사용해 클러스터 업데이트 후 노드를 새 버전의 Kubernetes로 업데이트할 수 있습니다. 그렇지 않으면 기존 Kubernetes 버전에 대한 최신 Amazon EKS 최적화 AMI로 업데이트할 수 있습니다.
중요: 이 주제는 자체 관리형 노드의 노드 업데이트를 다룹니다. 관리형 노드 그룹 사용에 대한 정보는 "클러스터용 관리형 노드 그룹 업데이트"를 참고하세요.
최신 기본 Amazon EKS 노드 AWS CloudFormation 템플릿은 이전 인스턴스를 제거하기 전에 새 AMI가 있는 인스턴스를 한 번에 하나씩 클러스터에 시작하도록 구성되어 있습니다. 이 구성은 롤링 업데이트 중에 항상 Auto Scaling 그룹의 원하는 수의 활성 인스턴스가 클러스터에 있도록 보장합니다.
참고: 이 방법은
eksctl로 생성된 노드 그룹에는 지원되지 않습니다. 클러스터나 노드 그룹을eksctl로 만들었다면 "새 노드 그룹으로 애플리케이션 마이그레이션"을 참고하세요.
- 클러스터의 DNS 공급자를 확인합니다.
kubectl get deployments -l k8s-app=kube-dns -n kube-system
예제 출력은 다음과 같습니다. 이 클러스터는 DNS 확인에 CoreDNS를 사용하고 있지만, 클러스터가 대신 kube-dns를 반환할 수 있습니다. 사용 중인 kubectl 버전에 따라 출력이 다를 수 있습니다.
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
coredns 1 1 1 1 31m
현재 배포가 2개 미만의 레플리카를 실행 중이면 두 레플리카로 확장합니다. 이전 명령 출력에서 kube-dns가 반환되었다면 coredns를 kube-dns로 바꾸세요.
kubectl scale deployments/coredns --replicas=2 -n kube-system
- (선택 사항) Kubernetes Cluster Autoscaler를 사용한다면 충돌하는 스케일링 작업을 피하기 위해 배포를 0(0)개 레플리카로 축소합니다.
kubectl scale deployments/cluster-autoscaler --replicas=0 -n kube-system
- 현재 노드 그룹의 인스턴스 유형과 원하는 인스턴스 수를 확인합니다. 이 값은 나중에 그룹의 AWS CloudFormation 템플릿을 업데이트할 때 입력합니다.
- https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.
- 왼쪽 탐색 창에서 Launch Configurations를 선택하고 기존 노드 시작 구성의 인스턴스 유형을 기록해 둡니다.
- 왼쪽 탐색 창에서 Auto Scaling Groups를 선택하고 기존 노드 Auto Scaling 그룹의 Desired instance count를 기록해 둡니다.
- AWS CloudFormation 콘솔을 엽니다.
- 노드 그룹 스택을 선택한 다음 Update를 선택합니다.
- Replace current template을 선택하고 Amazon S3 URL을 선택합니다.
- Amazon S3 URL에 다음 URL을 텍스트 영역에 붙여넣어 최신 버전의 노드 AWS CloudFormation 템플릿을 사용하고 있는지 확인합니다. 그런 다음 Next를 선택합니다.
https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2022-12-23/amazon-eks-nodegroup.yaml
- Specify stack details 페이지에서 다음 매개변수를 채우고 Next를 선택합니다.
- NodeAutoScalingGroupDesiredCapacity – 이전 단계에서 기록한 원하는 인스턴스 수를 입력합니다. 또는 스택이 업데이트될 때 확장할 새 원하는 노드 수를 입력합니다.
- NodeAutoScalingGroupMaxSize – 노드 Auto Scaling 그룹이 확장할 수 있는 최대 노드 수를 입력합니다. 이 값은 원하는 용량보다 최소한 한 개의 노드가 더 많아야 합니다. 이는 업데이트 중 노드 수를 줄이지 않고 노드의 롤링 업데이트를 수행할 수 있도록 하기 위함입니다.
- NodeInstanceType – 이전 단계에서 기록한 인스턴스 유형을 선택합니다. 또는 노드에 다른 인스턴스 유형을 선택합니다. 다른 인스턴스 유형을 선택하기 전에 "최적의 Amazon EC2 노드 인스턴스 유형 선택"을 검토하세요. 각 Amazon EC2 인스턴스 유형은 최대 수의 탄력적 네트워크 인터페이스(네트워크 인터페이스)를 지원하고, 각 네트워크 인터페이스는 최대 수의 IP 주소를 지원합니다. 각 워커 노드와 Pod에 자체 IP 주소가 할당되므로, 각 Amazon EC2 노드에서 실행하려는 최대 Pod 수를 지원할 인스턴스 유형을 선택하는 것이 중요합니다. 인스턴스 유형이 지원하는 네트워크 인터페이스와 IP 주소 수 목록은 "인스턴스 유형별 네트워크 인터페이스당 IP 주소"를 참고하세요. 예를 들어
m5.large인스턴스 유형은 워커 노드와 Pod에 최대 30개의 IP 주소를 지원합니다.
참고: 최신 버전의 Amazon VPC CNI plugin for Kubernetes가 지원하는 인스턴스 유형은 GitHub의 vpc_ip_resource_limit.go에 표시됩니다. 최신 지원 인스턴스 유형을 사용하려면 Amazon VPC CNI plugin for Kubernetes 버전을 업데이트해야 할 수 있습니다. 자세한 내용은 "Amazon VPC CNI로 Pod에 IP 할당"을 참고하세요.
중요: 일부 인스턴스 유형은 모든 AWS 리전에서 사용하지 못할 수 있습니다.
- NodeImageIdSSMParam – 업데이트하려는 AMI ID의 Amazon EC2 Systems Manager 매개변수. 다음 값은 Kubernetes 버전
1.36에 대한 최신 Amazon EKS 최적화 AMI를 사용합니다.
/aws/service/eks/optimized-ami/1.36/amazon-linux-2/recommended/image_id
1.36을 같은 플랫폼 버전으로 바꿀 수 있습니다. 또는 컨트롤 플레인에서 실행 중인 Kubernetes 버전보다 최대 한 버전 이전이어야 합니다. 노드를 컨트롤 플레인과 같은 버전으로 유지할 것을 권장합니다. 또한 amazon-linux-2를 다른 AMI 유형으로 바꿀 수 있습니다. 자세한 내용은 "권장 Amazon Linux AMI ID 검색"을 참고하세요.
참고: Amazon EC2 Systems Manager 매개변수를 사용하면 AMI ID를 찾아 지정하지 않고도 장래에 노드를 업데이트할 수 있습니다. AWS CloudFormation 스택이 이 값을 사용한다면, 템플릿에서 값을 변경하지 않더라도 모든 스택 업데이트는 항상 지정한 Kubernetes 버전에 대한 최신 권장 Amazon EKS 최적화 AMI를 시작합니다.
- NodeImageId – 자체 사용자 지정 AMI를 사용하려면 사용할 AMI의 ID를 입력합니다.
중요: 이 값은 NodeImageIdSSMParam에 지정된 모든 값을 재정의합니다. NodeImageIdSSMParam 값을 사용하려면 NodeImageId 값이 비어 있는지 확인하세요.
- DisableIMDSv1 – 기본적으로 각 노드는 Instance Metadata Service Version 1(IMDSv1)과 IMDSv2를 지원합니다. 하지만 IMDSv1을 비활성화할 수 있습니다. 노드 그룹에 스케줄된 어떤 노드나 Pod도 IMDSv1을 사용하지 않게 하려면 true를 선택합니다. IMDS에 대한 자세한 내용은 "인스턴스 메타데이터 서비스 구성"을 참고하세요. 서비스 계정용 IAM 역할을 구현했다면 AWS 서비스에 액세스해야 하는 모든 Pod에 필요한 권한을 직접 할당하세요. 이렇게 하면 클러스터의 어떤 Pod도 현재 AWS 리전 검색 같은 다른 이유로 IMDS에 액세스할 필요가 없습니다. 그러면 호스트 네트워킹을 사용하지 않는 Pod의 IMDSv2 액세스도 비활성화할 수 있습니다. 자세한 내용은 "워커 노드에 할당된 인스턴스 프로파일 액세스 제한"을 참고하세요.
- (선택 사항) Options 페이지에서 스택 리소스에 태그를 지정합니다. Next를 선택합니다.
- Review 페이지에서 정보를 검토하고, 스택이 IAM 리소스를 만들 수 있음을 확인한 다음 Update stack을 선택합니다.
참고: 클러스터의 각 노드 업데이트는 몇 분이 걸립니다. 다음 단계를 수행하기 전에 모든 노드의 업데이트가 완료될 때까지 기다리세요.
- 클러스터의 DNS 공급자가
kube-dns라면kube-dns배포를 한 레플리카로 축소합니다.
kubectl scale deployments/kube-dns --replicas=1 -n kube-system
- (선택 사항) Kubernetes Cluster Autoscaler를 사용한다면 배포를 원하는 레플리카 수로 다시 확장합니다.
kubectl scale deployments/cluster-autoscaler --replicas=1 -n kube-system
- (선택 사항) 최신 버전의 Amazon VPC CNI plugin for Kubernetes를 사용하고 있는지 확인합니다. 최신 지원 인스턴스 유형을 사용하려면 Amazon VPC CNI plugin for Kubernetes 버전을 업데이트해야 할 수 있습니다. 자세한 내용은 "Amazon VPC CNI로 Pod에 IP 할당"을 참고하세요.