Outpost에서 로컬 클러스터 생성
이 주제에서는 Outpost에서 로컬 클러스터를 실행할 때 고려할 내용의 개요를 제공합니다. 이 주제에서는 Outpost에 로컬 클러스터를 배포하는 방법에 대한 지침도 제공합니다.
고려 사항
-
이러한 고려 사항은 관련 Amazon EKS 설명서에 나와 있지 않습니다. 기타 Amazon EKS 설명서 주제가 여기의 고려 사항과 충돌하는 경우 여기의 고려 사항을 따릅니다.
-
이러한 고려 사항은 변경될 수 있으며 자주 변경될 수 있습니다. 따라서 이 주제를 정기적으로 검토하는 것이 좋습니다.
-
AWS 클라우드에서 클러스터를 생성하기 위한 고려 사항과 많은 고려 사항이 다릅니다.
-
로컬 클러스터는 Outpost 랙만 지원합니다. 단일 로컬 클러스터는 단일 논리적 Outpost를 구성하는 여러 물리적 Outpost 랙에서 실행할 수 있습니다. 단일 로컬 클러스터는 여러 논리적 Outposts에서 실행할 수 없습니다. 각 논리적 Outpost에는 단일 Outpost ARN이 있습니다.
-
로컬 클러스터는 Outpost의 계정에서 Kubernetes 컨트롤 플레인을 실행하고 관리합니다. Kubernetes 컨트롤 플레인 인스턴스에 대한 워크로드를 실행하거나 Kubernetes 컨트롤 플레인 구성 요소를 수정할 수 없습니다. 이러한 노드는 Amazon EKS 서비스에서 관리합니다. Kubernetes 컨트롤 플레인에 대한 변경 사항은 패치와 같은 자동 Amazon EKS 관리 작업 시 유지되지 않습니다.
-
로컬 클러스터는 자체 관리형 추가 기능 및 자체 관리형 Amazon Linux 2 노드 그룹을 지원합니다. Amazon VPC CNI plugin for Kubernetes, kube-proxy 및 CoreDNS 추가 기능은 로컬 클러스터에 자동으로 설치됩니다.
-
로컬 클러스터는 Outposts에서 Amazon EBS를 사용해야 합니다. Outpost에는 Kubernetes 컨트롤 플레인 스토리지에 사용할 수 있는 Amazon EBS가 있어야 합니다.
-
로컬 클러스터는 Outposts에서 Amazon EBS를 사용합니다. Outpost에는 Kubernetes 컨트롤 플레인 스토리지에 사용할 수 있는 Amazon EBS가 있어야 합니다. Outposts는 Amazon EBS
gp2
볼륨만 지원합니다. -
Amazon EBS 지원 Kubernetes
PersistentVolumes
은 Amazon EBS CSI 드라이버를 사용하여 지원됩니다.
사전 조건
-
Outposts 배포 옵션, 용량 고려 사항 및 Amazon EKS 로컬 클러스터 VPC 및 서브넷 요구 사항과 고려 사항을 숙지합니다.
-
기존 Outpost. 자세한 내용은 AWS Outposts란 무엇인가요?를 참조하세요.
-
컴퓨터 또는 AWS CloudShell에 설치된
kubectl
명령줄 도구. 버전은 클러스터의 Kubernetes 버전과 동일하거나 최대 하나 이전 또는 이후의 마이너 버전일 수 있습니다. 예를 들어 클러스터 버전이1.21
인 경우kubectl
버전1.20
,1.21
또는1.22
를 함께 사용할 수 있습니다.kubectl
을 설치하거나 업그레이드하려면 kubectl 설치 또는 업데이트 섹션을 참조하세요. -
AWS CLI 버전
2.9.20
이상 또는1.27.63
이상이 디바이스나 AWS CloudShell에 설치되고 구성되어 있습니다.aws --version | cut -d / -f2 | cut -d ' ' -f1
을 사용하여 현재 버전을 확인할 수 있습니다. macOS용yum
,apt-get
또는 Homebrew와 같은 패키지 관리자는 최신 버전의 AWS CLI보다 여러 버전 이전인 경우가 많습니다. 최신 버전을 설치하려면 AWS Command Line Interface 사용 설명서의 최신 버전의 AWS CLI 설치 또는 업데이트와aws configure
를 통한 빠른 구성을 참조하세요. AWS CloudShell에 설치된 AWS CLI 버전도 최신 버전보다 여러 버전 이전일 수도 있습니다. 업데이트하려면 AWS CloudShell 사용 설명서의 홈 디렉터리에 AWS CLI 설치를 참조하세요. -
Amazon EKS 클러스터를
create
및describe
할 수 있는 권한이 있는 IAM 보안 주체. 자세한 정보는 Outpost에서 로컬 Kubernetes 클러스터 생성 및 모든 클러스터 나열 또는 설명 섹션을 참조하세요.
로컬 Amazon EKS 클러스터가 생성될 때 클러스터를 생성하는 IAM 보안 주체가 영구적으로 추가됩니다. 보안 주체는 특히 Kubernetes RBAC 권한 부여 표에 관리자로 추가됩니다. 이 엔터티에는 system:masters
권한이 있습니다. 이 엔터티의 ID는 클러스터 구성에 표시되지 않습니다. 따라서 클러스터를 생성한 엔터티를 기록하고 절대로 삭제하지 않도록 하는 것이 중요합니다. 처음에는 서버를 생성한 보안 주체만 kubectl
를 사용하여 Kubernetes API 서버를 호출할 수 있습니다. 콘솔을 사용하여 클러스터를 생성하는 경우 클러스터에서 kubectl
명령을 실행할 때 동일한 IAM 보안 인증 정보가 AWS SDK 보안 인증 정보 체인에 있어야 합니다. 클러스터가 생성되면 클러스터에 대한 액세스 권한을 다른 IAM 보안 주체에 부여할 수 있습니다.
로컬 Amazon EKS 로컬 클러스터 생성
eksctl
, AWS Management Console, AWS CLI, Amazon EKS API, AWS SDK
-
로컬 클러스터를 생성합니다.
-
클러스터가 생성된 후 생성된 Amazon EC2 컨트롤 플레인 인스턴스를 볼 수 있습니다.
aws ec2 describe-instances --query 'Reservations[*].Instances[*].{Name:Tags[?Key==`Name`]|[0].Value}' | grep
my-cluster-
control-plane출력 예는 다음과 같습니다.
"Name": "
my-cluster
-control-plane-id1
" "Name": "my-cluster
-control-plane-id2
" "Name": "my-cluster
-control-plane-id3
"컨트롤 플레인 인스턴스에서 워크로드가 예약되지 않도록 각 인스턴스는
node-role.eks-local.amazonaws.com/control-plane
으로 테인트됩니다. 테인트에 대한 자세한 내용을 알아보려면 Kubernetes 문서의 테인트(Taints)와 톨러레이션(Tolerations)을 참조하세요. Amazon EKS는 로컬 클러스터의 상태를 지속적으로 모니터링합니다. 보안 패치 및 비정상 인스턴스 복구와 같은 자동 관리 작업을 수행합니다. 로컬 클러스터가 클라우드에서 연결 해제되면 재연결 시 클러스터가 정상 상태로 복구되도록 조치를 완료합니다. -
eksctl
을 사용하여 클러스터를 생성한 경우 이 단계를 건너뛸 수 있습니다.Eksctl
에서 자동으로 이 단계를 완료합니다.kubectl
config
파일에 새 컨텍스트를 추가하여kubectl
이 클러스터와 통신하도록 사용 설정합니다. 파일 생성 설치 및 업데이트 방법에 대한 지침은 Amazon EKS 클러스터용 kubeconfig 파일 생성 또는 업데이트 섹션을 참조하세요.aws eks update-kubeconfig --region
region-code
--namemy-cluster
출력 예는 다음과 같습니다.
Added new context arn:aws:eks:
region-code
:111122223333
:cluster/my-cluster
to/home/username/
.kube/config -
로컬 클러스터의 Kubernetes API 서버에 연결하려면 서브넷의 로컬 게이트웨이에 액세스하거나 VPC 내에서 연결해야 합니다. Outpost 랙을 온프레미스 네트워크에 연결하는 방법을 자세히 알아보려면 AWS Outposts 사용 설명서의 랙용 로컬 게이트웨이 작동 방식을 참조하세요. Direct VPC Routing을 사용하며 Outpost 서브넷에 로컬 게이트웨이에 대한 경로가 있으면 Kubernetes 컨트롤 플레인 인스턴스의 프라이빗 IP 주소가 로컬 네트워크를 통해 자동으로 브로드캐스트됩니다. 로컬 클러스터의 Kubernetes API 서버 엔드포인트는 Amazon Route 53(Route 53)에서 호스팅됩니다. API 서비스 엔드포인트는 퍼블릭 DNS 서버에서 Kubernetes API 서버의 프라이빗 IP 주소로 확인할 수 있습니다.
로컬 클러스터의 Kubernetes 컨트롤 플레인 인스턴스는 클러스터 수명 주기 동안 변경되지 않는 고정 프라이빗 IP 주소를 사용하여 정적 탄력적 네트워크 인터페이스로 구성됩니다. Kubernetes API 서버와 상호 작용하는 머신은 네트워크 연결이 해제된 동안 Route 53에 연결되지 않을 수도 있습니다. 이 경우 계속되는 작업을 위해 고정 프라이빗 IP 주소로
/etc/hosts
를 구성하는 것이 좋습니다. 또한 로컬 DNS 서버를 설정하고 Outpost에 연결하는 것이 좋습니다. 자세한 내용은 AWS Outposts 설명서를 참조하세요. 다음 명령을 실행하여 클러스터와 설정된 통신을 확인합니다.kubectl get svc
출력 예는 다음과 같습니다.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 28h
-
(선택 사항) 로컬 클러스터가 AWS 클라우드에서 연결 해제된 상태일 때 인증을 테스트합니다. 지침은 네트워크 연결 해제 준비 단원을 참조하세요.
내부 리소스
Amazon EKS는 클러스터에 다음 리소스를 생성합니다. 리소스는 Amazon EKS 내부용입니다. 클러스터가 제대로 작동하려면 이러한 리소스를 편집하거나 수정하지 않습니다.
-
다음 미러 포드
: -
aws-iam-authenticator-
node-hostname
-
eks-certificates-controller-
node-hostname
-
etcd-
node-hostname
-
kube-apiserver-
node-hostname
-
kube-controller-manager-
node-hostname
-
kube-scheduler-
node-hostname
-
-
다음 자체 관리형 추가 기능:
-
kube-system/coredns
-
kube-system/
kube-proxy
(첫 번째 노드를 추가할 때까지 생성되지 않음) -
kube-system/aws-node
(첫 번째 노드를 추가할 때까지 생성되지 않음). 로컬 클러스터는 클러스터 네트워킹에 Amazon VPC CNI plugin for Kubernetes 플러그인을 사용합니다. 컨트롤 플레인 인스턴스(aws-node-controlplane-*
라는 포드)의 구성을 변경하지 않습니다. 플러그인에서 새 네트워크 인터페이스를 생성할 때 기본값 변경에 사용할 수 있는 구성 변수가 있습니다. 자세한 내용을 알아보려면 GitHub의 설명서를 참조하세요.
-
-
다음 서비스:
-
default/kubernetes
-
kube-system/kube-dns
-
-
이름이
eks.system
인PodSecurityPolicy
-
이름이
eks:system:podsecuritypolicy
인ClusterRole
-
이름이
eks:system
인ClusterRoleBinding
-
클러스터 보안 그룹 외에도 Amazon EKS에서는 AWS 계정에 이름이
eks-local-internal-do-not-use-or-edit-
인 보안 그룹을 생성합니다. 이 보안 그룹을 사용하면 컨트롤 플레인 인스턴스에서 실행되는 Kubernetes 구성 요소 간에 트래픽이 자유롭게 흐를 수 있습니다.cluster-name
-uniqueid
권장되는 다음 단계:
-
클러스터를 생성한 IAM 보안 주체에 AWS Management Console에서 Kubernetes 리소스를 볼 수 있는 필요한 권한 부여
-
클러스터에 IAM 엔터티에 액세스 권한 부여 엔터티가 Amazon EKS 콘솔에서 Kubernetes 리소스를 보도록 하려면 엔티티에 필요한 권한을 부여합니다.
-
네트워크 연결 해제 중 어떤 일이 발생하는지 숙지합니다.
-
etcd
에 대한 백업 계획 설정을 고려합니다. Amazon EKS는 로컬 클러스터에 대한etcd
의 자동 백업 및 복원을 지원하지 않습니다. 자세한 내용은 Kubernetes 설명서의etcd
클러스터 백업을 참조하세요. 두 가지 주요 옵션은 etcdctl
을 사용하여 스냅샷 생성 또는 Amazon EBS 스토리지 볼륨 백업 사용을 자동화합니다.