Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
Amazon EKS 클러스터의 업그레이드를 계획하려면 어떻게 해야 합니까?
Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터를 업그레이드할 때 모범 사례를 따르고 싶습니다.
해결 방법
업그레이드 영향 이해
새로운 Kubernetes 버전은 Amazon EKS 클러스터에 중대한 변화를 가져올 수 있습니다. 클러스터를 업그레이드한 후에는 다운그레이드할 수 없습니다.
최신 Kubernetes 버전으로 업그레이드하는 경우 인플레이스 클러스터 업그레이드를 수행할 필요가 없습니다. 대신 새 클러스터로 마이그레이션할 수 있습니다. 새 클러스터로 마이그레이션하는 경우 Velero와 같은 클러스터 백업 및 복원 도구를 사용하는 것이 좋습니다. 자세한 내용은 GitHub 웹 사이트의 Velero를 참조하십시오.
현재 및 이전 버전의 Kubernetes는 Amazon EKS Kubernetes 릴리스 캘린더를 참조하십시오.
업그레이드 요구 사항 충족
클러스터를 업그레이드하려면 다음 요구 사항을 충족해야 합니다.
- 클러스터를 만들 때 지정한 서브넷에서 최대 5개의 사용 가능한 IP 주소가 있어야 합니다.
- 클러스터의 AWS Identity and Access Management(IAM) 역할 및 보안 그룹이 AWS 계정에 있어야 합니다.
- 보안 정보 암호화를 활성화하는 경우 클러스터 IAM 역할에 AWS Key Management Service(AWS KMS) 키에 대한 권한이 있어야 합니다.
Amazon EKS 및 Kubernetes의 주요 업데이트 검토
다음 작업을 수행하십시오.
- 업그레이드 버전에 대해 문서화된 모든 변경 사항을 검토하고 필요한 업그레이드 단계를 기록해 둡니다.
- Amazon EKS 관리형 클러스터와 관련된 요구 사항이나 절차를 검토합니다.
Amazon EKS 클러스터 플랫폼 버전 및 Kubernetes 버전의 주요 업데이트에 대한 자세한 내용은 다음 문서를 참조하십시오.
- Amazon EKS의 Kubernetes 버전 수명 주기 이해
- 각 Kubernetes 버전의 Amazon EKS 플랫폼 버전 보기
- 기존 클러스터를 새 Kubernetes 버전으로 업데이트
Kubernetes 업스트림 버전 및 주요 업데이트에 대한 자세한 내용은 다음 문서를 참조하십시오.
- Kubernetes 웹 사이트의 Kubernetes 릴리스 노트
- GitHub 웹 사이트의 Kubernetes 변경 로그
중단된 API 이해 및 확인
Kubernetes가 API를 업그레이드할 때 이전 API도 제거합니다.
중단된 API를 관리하려면 다음 작업을 수행하십시오.
- Kubernetes가 이후 버전의 Kubernetes에서 API를 중단하는 방법을 이해하려면 Kubernetes 웹 사이트의 Kubernetes 지원 중단 정책을 참조합니다.
- 클러스터에서 중단된 API 버전이 있는지 확인하려면 Kube No Trouble(kubent) 도구를 사용합니다. 자세한 내용은 GitHub 웹 사이트에서 kube-no-trouble을 참조하십시오. 중단된 API 버전을 사용하는 경우, 워크로드를 업그레이드한 후 Kubernetes 클러스터를 업그레이드합니다.
- 서로 다른 API 버전 간에 Kubernetes 매니페스트 파일을 변환하려면 kubectl convert 플러그인을 사용합니다. 자세한 내용은 Kubernetes 웹 사이트에서 kubectl convert 플러그인 설치를 참조하십시오.
Kubernetes 업그레이드 중 예상되는 사항 이해
클러스터를 업그레이드하면 Amazon EKS는 기존 노드를 대체하기 위해 업그레이드된 Kubernetes 버전으로 새 API 서버 노드를 시작합니다. 또한 Amazon EKS는 일련의 내부 검사를 실행합니다. 검사에 실패하면 Amazon EKS는 인프라 배포를 롤백하고 클러스터는 이전 Kubernetes 버전으로 유지됩니다. 롤백은 실행 중인 애플리케이션에 영향을 주지 않으며, 사용자가 클러스터를 복구할 수 있습니다.
참고: 업그레이드 프로세스 중에 사소한 서비스 중단이 발생할 수 있습니다.
컨트롤 플레인 및 데이터 플레인 업그레이드
클러스터를 업그레이드하려면 컨트롤 플레인과 데이터 플레인을 업데이트해야 합니다.
플레인을 업데이트하려면 다음 방법 중 하나를 선택합니다.
- 인플레이스 클러스터 업그레이드
- 블루/그린 또는 카나리 업그레이드
- 관리형 노드 그룹 업그레이드
인플레이스 클러스터 업그레이드
중요: 인플레이스 업그레이드의 경우 Kubernetes의 다음 최신 마이너 버전으로만 업그레이드할 수 있습니다. 현재 클러스터 버전과 대상 버전 사이에 여러 버전이 있는 경우 각 버전으로 순차적으로 업그레이드해야 합니다.
각 인플레이스 Kubernetes 클러스터 업그레이드에 대해 다음 단계를 완료하십시오.
- Kubernetes 매니페스트와 중단된 API를 업데이트합니다.
- 클러스터 컨트롤 플레인을 업그레이드합니다.
- 클러스터의 노드를 업그레이드합니다.
- Kubernetes 추가 기능 및 사용자 지정 컨트롤러를 업데이트합니다.
자세한 내용은 Amazon EKS로 Kubernetes 업그레이드 계획에서 Amazon EKS에서 Kubernetes 버전 업그레이드 계획 및 실행 섹션을 참조하십시오. 또한 클러스터 업그레이드 모범 사례를 참조하십시오.
블루/그린 또는 카나리 업그레이드
블루/그린 또는 카나리 업그레이드를 완료하려면 상태 비저장 ArgoCD 워크로드를 위한 블루/그린 또는 카나리 Amazon EKS 클러스터 마이그레이션을 참조하십시오.
관리형 노드 그룹 업그레이드
중요: 노드의 kubelet은 kube-apiserver보다 최신일 수 없습니다. 또한 kubelet은 kube-apiserver보다 두 마이너 버전 이하일 수 없습니다. 예를 들어 kube-apiserver가 버전 1.24인 경우, Amazon EKS는 버전 1.24, 1.23 및 1.22에서만 kubelet을 지원합니다.
관리형 노드 그룹을 업그레이드하려면 관리형 노드 그룹에서 노드를 업데이트하십시오.
Amazon EKS 관리형 노드 그룹으로 마이그레이션
자체 관리형 노드 그룹을 사용하는 경우 가동 중지 시간 없이 워크로드를 Amazon EKS 관리형 노드 그룹으로 마이그레이션할 수 있습니다.
다운스트림 종속성 식별 및 업그레이드
클러스터에는 인그레스 컨트롤러, 지속적 전송 시스템, 모니터링 도구 및 기타 워크플로와 같은 타사 추가 기능 및 도구가 포함될 수 있습니다. 클러스터를 업데이트하는 경우 추가 기능 및 타사 도구도 업데이트해야 합니다. 추가 기능이 클러스터에서 작동하는 방식과 추가 기능의 업데이트 방식을 이해해야 합니다.
참고: 자체 관리형 추가 기능 대신 관리형 추가 기능을 사용하는 것이 가장 좋습니다.
다음의 일반적인 추가 기능 및 업그레이드 설명서 예를 검토하십시오.
- 각 클러스터 버전에 사용할 Amazon Virtual Private Cloud Container Network Interface(Amazon VPC CNI) 추가 기능을 결정합니다. 자세한 내용은 Amazon VPC CNI를 사용하여 포드에 IP 주소 할당을 참조하십시오. 또한 서비스 계정에 IAM 역할을 사용하도록 Amazon VPC CNI 플러그인 구성(IRSA)을 참조하십시오.
- 자체 관리형 kube-proxy 추가 기능의 경우 각 클러스터 버전에 사용 가능한 최신 kube-proxy 컨테이너 이미지 버전으로 업데이트합니다. 자세한 내용은 Amazon EKS 클러스터에서 kube-proxy 관리를 참조하십시오.
- CoreDNS의 경우 각 클러스터 버전에 사용 가능한 최신 CoreDNS 컨테이너 이미지 버전으로 업데이트합니다. 자세한 내용은 Amazon EKS 클러스터에서 DNS용 CoreDNS 관리를 참조하십시오.
- AWS Load Balancer Controller 버전 2.5.0 이상에는 Kubernetes 버전 1.22 이상이 필요합니다. 자세한 내용은 GitHub 웹 사이트에서 AWS Load Balancer Controller 릴리스를 참조하십시오. 설치 정보는 AWS Load Balancer Controller를 사용하여 인터넷 트래픽 라우팅을 참조하십시오.
- Amazon Elastic Block Store(Amazon EBS) CSI 드라이버 버전 1.25.0 이상에는 Kubernetes 버전 1.23 이상이 필요합니다. 자세한 내용은 GitHub 웹 사이트에서 aws-ebs-csi-driver를 참조하십시오. 설치 및 업그레이드 정보는 2단계: Amazon EBS CSI 드라이버 가져오기를 참조하십시오.
- Amazon Elastic File System(Amazon EFS) CSI 드라이버 버전 1.5.8 이상에는 Kubernetes 버전 1.22 이상이 필요합니다. 자세한 내용은 GitHub 웹 사이트에서 aws-efs-csi-driver를 참조하십시오. 설치 및 업그레이드 정보는 Amazon EFS와 함께 탄력적 파일 시스템 스토리지 사용을 참조하십시오.
Fargate 노드 업그레이드
AWS Fargate 노드를 업데이트하려면 다음 단계를 완료하십시오.
- 노드가 나타내는 포드를 삭제합니다.
- 컨트롤 플레인을 업데이트합니다.
- 포드를 재배포합니다.
Fargate에서 시작하는 새 포드는 이제 클러스터 버전과 일치하는 kubelet 버전을 갖습니다. 업그레이드는 기존 Fargate 포드에 영향을 주지 않습니다.
참고: Amazon EKS는 포드의 보안을 유지하기 위해 Fargate 포드에 주기적으로 패치를 적용해야 합니다. 포드를 업데이트할 때 Amazon EKS는 패치의 영향을 최소화합니다. Amazon EKS에서 포드를 제거할 수 없는 경우 Amazon EKS는 포드를 삭제합니다. 중단을 최소화하려면 AWS Fargate OS 패치 적용 이벤트에 대한 작업 설정을 참조하십시오.
Karpenter가 생성한 비관리형 노드 업그레이드
ttlSecondsUntilExpired로 설정한 값은 노드 만료를 활성화합니다. 노드가 지정된 기간(초)에 도달하면 Amazon EKS는 노드를 삭제합니다. 삭제는 Amazon EKS 워크로드 또는 애플리케이션이 노드를 사용하는 경우에도 발생합니다. ttlSecondsUntilExpired를 사용하여 노드를 새로 프로비저닝된 인스턴스로 교체하면 인스턴스를 업그레이드할 수 있습니다. Karpenter는 교체된 노드에 대해 최신 Amazon EKS에 최적화된 Amazon Machine Image(AMI)를 사용합니다. Karpenter가 노드를 중단하는 방법에 대한 자세한 내용은 Karpenter 웹 사이트의 중단을 참조하십시오.
다음 예제는 ttlSecondsUntilExpired를 사용하여 프로비저닝을 해제하고 업그레이드된 인스턴스로 교체한 노드를 보여줍니다.
apiVersion: karpenter.sh/v1alpha5kind: Provisioner metadata: name: default spec: requirements: - key: karpenter.sh/capacity-type # optional, set to on-demand by default, spot if both are listed operator: In values: ["spot"] limits: resources: cpu: 1000 # optional, recommended to limit total provisioned CPUs memory: 1000Gi ttlSecondsAfterEmpty: 30 # optional, but never scales down if not set ttlSecondsUntilExpired: 2592000 # optional, nodes are recycled after 30 days but never expires if not set provider: subnetSelector: karpenter.sh/discovery/CLUSTER_NAME: '*' securityGroupSelector: kubernetes.io/cluster/CLUSTER_NAME: '*'
참고: Karpenter는 ttlSecondsUntilExpired 값에 지터를 자동으로 추가하지 않습니다. 짧은 시간 내에 여러 인스턴스를 만들면 인스턴스가 동시에 만료됩니다. 과도한 워크로드 중단을 방지하려면 포드 중단 예산을 설정하십시오. 자세한 내용은 Kubernetes 웹 사이트에서 애플리케이션의 중단 예산 지정을 참조하십시오.
- 언어
- 한국어

관련 콘텐츠
AWS 공식업데이트됨 2년 전