Amazon Elastic Kubernetes Service(Amazon EKS) Anywhere의 부트스트랩 과정을 이해하고 싶습니다.
해결 방법
부트스트랩 클러스터
초기 독립 실행형 클러스터나 관리 클러스터를 생성할 때 Amazon EKS Anywhere에서 부트스트랩 클러스터도 함께 생성합니다. 이는 메인 클러스터 생성을 용이하게 하기 위해 관리 시스템에 별도로 생성되는 임시 단일 노드 Kubernetes in Docker(KinD) 클러스터입니다.
EKS Anywhere에서 CAPI 및 CAPX 운영자를 호스팅하는 관리 시스템에 부트스트랩 클러스터를 생성합니다. 부트스트랩 클러스터를 생성하려면 EKS Anywhere에서 다음 단계를 따라야 합니다.
- KinD 노드 이미지 가져오기
- 노드 준비
- 구성 쓰기
- 컨트롤 플레인 시작
- CNI 설치
- KinD 기반 단일 노드 클러스터에 StorageClass 설치
클러스터 생성
부트스트랩 클러스터가 실행되고 관리 시스템에 제대로 구성되었으면 대상 클러스터 생성이 시작됩니다. EKS Anywhere에서는 kubectl을 사용하여 다음 절차에 따라 대상 클러스터 구성을 적용합니다.
-
etcd, 컨트롤 플레인, 워커 노드가 준비되면 대상 클러스터에서 네트워킹 구성을 수신합니다.
-
대상 클러스터가 기본 스토리지 클래스 설치를 수신합니다.
-
CAPI 제공자가 대상 클러스터에 구성됩니다. 이렇게 하면 대상 클러스터가 자체 관리에 필요한 구성 요소를 제어하고 실행할 수 있습니다.
-
대상 클러스터에서 CAPI가 실행되면 CAPI 개체가 부트스트랩 클러스터에서 대상 클러스터의 CAPI 서비스로 이동합니다. 이는 clusterctl 명령을 사용할 때 내부적으로 실행됩니다.
-
대상 클러스터가 Kubernetes CRD 및 EKS Anywhere에만 적용되는 기타 애드온을 수신합니다.
-
클러스터 구성이 저장됩니다.
부트스트래핑 프로세스 중 CLUSTER_NAME/generated/CLUSTER_NAME-eks-a-cluster.yaml. 위치에 YAML 파일이 생성됩니다.
부트스트랩이 성공하면 YAML 파일이 CLUSTER_NAME/CLUSTER_NAME-eks-a-cluster.yaml 위치로 이동합니다.
마찬가지로, Kubeconfig 또한 CLUSTER_NAME/generated/CLUSTER_NAME.kind.kubeconfig에서 CLUSTER_NAME/CLUSTER_NAME-eks-a-cluster.kubeconfig로 이동합니다.
etcd, 컨트롤 플레인, 워커 노드가 준비되면 워크로드 클러스터가 네트워킹 구성을 수신합니다. 클러스터가 활성화되고 CAPI 서비스가 새 클러스터에서 실행되면 부트스트랩 클러스터가 더 이상 필요 없습니다. 그러면 서비스가 부트스트랩 클러스터를 삭제합니다.
패키지 워크플로
부트스트랩 프로세스 중 EKS Anywhere에서는 대상 클러스터 생성, 클러스터 업그레이드, 클러스터 삭제에 다음 로직을 사용합니다.
클러스터 생성
클러스터 생성의 전체 패키지 워크플로는 GitHub에서 create.go를 참고하세요. 이 워크플로에서는 EKS Anywhere에서 다음 로직을 사용합니다.
- 설정 및 검증
참고: 이 단계가 실패하면 실행 전 항목에 실패했거나 레지스트리가 제대로 설정되지 않은 것입니다.
- 새 부트스트랩 클러스터 생성
새 KinD 클러스터 생성
부트스트랩 클러스터의 공급자별 pre-capi-install-setup
부트스트랩 클러스터에 cluster-api 공급자 설치
제공자별 사후 설정
- 새 워크로드 클러스터 생성
외부 etcd가 준비될 때까지 대기
컨트롤 플레인이 준비될 때까지 대기
워크로드 kubeconfig가 생성될 때까지 대기
워크로드 클러스터에 네트워킹 설치
부트스트랩 클러스터에 시스템 상태 확인 설치
컨트롤 플레인 및 작업자 시스템이 준비될 때까지 대기
- 관리에 리소스 설치
- eks-a 구성 요소 작업 설치
- Git ops 관리자 설치
- 클러스터 관리 이동
- ClusterConfig 쓰기
- 부트스트랩 클러스터 삭제
- 큐레이팅된 패키지 설치
클러스터 업그레이드
클러스터 업그레이드의 전체 패키지 워크플로는 GitHub에서 upgrade.go를 참고하세요. 이 워크플로에서는 EKS Anywhere에서 다음 로직을 사용합니다.
- 설정 및 검증
- 비밀 업데이트
- etcd CAPI 구성 요소가 존재하는지 확인
- 핵심 구성 요소 업그레이드
- 필요한 업그레이드 확인
- eks-a 조정 일시 중지
- 부트스트랩 클러스터 생성
- CAPI 설치
- 관리를 부트스트랩 클러스터로 이동
- 관리를 워크로드 클러스터로 이동
- 워크로드 클러스터 업그레이드
- 부트스트랩 클러스터 삭제
- 워크로드 클러스터 및 Git 리소스 업데이트
- eks-a 조정 재개
- ClusterConfig 쓰기
클러스터 삭제
클러스터 삭제의 전체 패키지 워크플로는 GitHub에서 delete.go를 참고하세요. 이 워크플로에서는 EKS Anywhere에서 다음 로직을 사용합니다.
- 설정 및 검증
- 관리 클러스터 생성
- CAPI 설치
- 클러스터 관리 이동
- 워크로드 클러스터 삭제
- Git 리포지토리 정리
- 패키지 리소스 삭제
- 관리 클러스터 삭제
클러스터 생성 중 오류
문제나 오류가 발생하면 관리 시스템와 capc-controller-manager에서 로그를 찾아보세요. capc-system 네임스페이스에서 kubectl을 사용하여 ccapc-controller-manager 로그를 확인하세요. 추가 문제 해결을 하려면 eksa-system 네임스페이스에 있는 클러스터의 CAPI 개체 상태를 확인하세요.
또 api-kubeadm-bootstrap-controller, capi-kubeadm-control-plane-controller, capi-controller-manager와 같은 CAPI 관리자 로그에서 오류 관련 정보를 찾을 수 있습니다. 이 같은 관리자는 다 함께 작동하며, kubectl get pods -A 명령을 사용하여 네임스페이스에서 각 관리자를 찾을 수 있습니다. 자세한 내용은 EKS Anywhere 문제 해결 가이드를 참고하세요.
부트스트래핑 프로세스 중 린팅 오류를 수정하는 스크립트는GitHub에서 bootstrapper.go를 참고하세요.
관련 정보
KinD 빠른 시작(KinD 웹 사이트)
클러스터 생성 워크플로