- 최신
- 최다 투표
- 가장 많은 댓글
안녕하세요.
eksctl 및 'ClusterConfig' kind의 yaml 파일을 사용하여 Amazon EKS 클러스터를 생성할 때, 'availabilityZones' 키에 대하여 희망하시는 가용 영역 (Availability Zone)을 정의하셨음에도 불구 실제로 생성된 EKS 클러스터가 정의하신 내용과 다른 가용 영역을 사용하도록 정의되는 상황을 경험하셨습니다.
이에 'availabilityZones' 키 및 값 (가용 영역)을 'managedNodeGroups' 키 하위에만 정의하지 않고 상위 키에도 추가하시어 다시 eksctl 을 통해 EKS 클러스터 생성을 시도하신 바, 이번에는 정의하신 대로 EKS 클러스터의 가용 영역이 생성된 것을 확인하셨으며, 이 두 결과의 차이점에 대한 확인을 요청하신 것으로 이해하였습니다.
혹시 제가 'dataengineer' 사용자님께서 질문하신 내용과 다르게 이해하였다면 댓글 등의 방법으로 알려주세요.
'dataengineer' 사용자님의 질문에 대하여 우선 간략히 답변 드리자면, 'managedNodeGroups' 키 하위에 정의하신 'availabilityZones' 키의 값은 EKS 클러스터의 관리형 노드 그룹이 사용할 가용 영역을 정의하는 내용이며, 반대로 'managedNodeGroups' 위에 따로 정의하셨던 'availabilityZones' 키의 값은 EKS 클러스터가 구동될 VPC 환경 내 서브넷이 사용할 가용 영역을 정의하게 됩니다.
이해를 돕기 위해 두 yaml 파일의 내용을 eksctl이 처리한 결과를 함께 공유드리겠습니다.
아래 'dataengineer' 사용자님이 처음 공유해주신 것과 같은 yaml 파일을 사용하는 경우 eksctl이 자동으로 생성하는 정보는 아래와 같습니다:
- cluster.yaml 파일 내용
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: CLUSTER_NAME
region: ap-northeast-2
version: "EKS_VERSION"
managedNodeGroups:
- name: workers
instanceType: t3.medium
privateNetworking: true
minSize: 1
maxSize: 3
availabilityZones: ["ap-northeast-2a", "ap-northeast-2c"]
- eksctl이 위 내용을 기반으로 자동 생성한 yaml 데이터
{
"kind": "ClusterConfig",
"apiVersion": "eksctl.io/v1alpha5",
"metadata": {
"name": "CLUSTER_NAME",
"region": "ap-northeast-2",
"version": "EKS_VERSION"
},
...
"vpc": {
...
"subnets": { <-- eksctl에서 자동으로 'ap-northeast-2b', 'ap-northeast-2c', 'ap-northeast-2d'를 사용하도록 정의
"private": {
"ap-northeast-2b": {
"az": "ap-northeast-2b",
"cidr": "192.168.96.0/19"
},
"ap-northeast-2c": {
"az": "ap-northeast-2c",
"cidr": "192.168.128.0/19"
},
"ap-northeast-2d": {
"az": "ap-northeast-2d",
"cidr": "192.168.160.0/19"
}
},
"public": {
"ap-northeast-2b": {
"az": "ap-northeast-2b",
"cidr": "192.168.0.0/19"
},
"ap-northeast-2c": {
"az": "ap-northeast-2c",
"cidr": "192.168.32.0/19"
},
"ap-northeast-2d": {
"az": "ap-northeast-2d",
"cidr": "192.168.64.0/19"
}
}
},
...
"managedNodeGroups": [
{
"name": "workers",
"amiFamily": "AmazonLinux2",
"instanceType": "t3.medium",
"availabilityZones": [ <-- 'managedNodeGroups.availabilityZones' 키에 정의된 가용 영역인 'ap-northeast-2a', 'ap-northeast-2c'를 사용하도록 정의
"ap-northeast-2a",
"ap-northeast-2c"
],
...
],
"availabilityZones": [ <-- eksctl에서 자동으로 'ap-northeast-2b', 'ap-northeast-2c', 'ap-northeast-2d'를 사용하도록 정의
"ap-northeast-2b",
"ap-northeast-2c",
"ap-northeast-2d"
]
}
반면 'dataengineer' 사용자님이 두 번째로 공유해주신 (수정사항 반영) yaml 파일을 사용하는 경우 eksctl이 자동으로 생성하는 정보는 아래와 같습니다:
- cluster.yaml 파일 내용
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: CLUSTER_NAME
region: ap-northeast-2
version: "EKS_VERSION"
availabilityZones: ["ap-northeast-2a", "ap-northeast-2c"]
managedNodeGroups:
- name: workers
instanceType: t3.medium
privateNetworking: true
minSize: 1
maxSize: 3
availabilityZones: ["ap-northeast-2a", "ap-northeast-2c"]
- eksctl이 위 내용을 기반으로 자동 생성한 yaml 데이터
{
"kind": "ClusterConfig",
"apiVersion": "eksctl.io/v1alpha5",
"metadata": {
"name": "CLUSTER_NAME",
"region": "ap-northeast-2",
"version": "EKS_VERSION"
},
...
"vpc": {
...
"subnets": { <-- 'ap-northeast-2a', 'ap-northeast-2c'를 사용하도록 정의
"private": {
"ap-northeast-2a": {
...
},
"ap-northeast-2c": {
...
}
},
"public": {
"ap-northeast-2a": {
...
},
"ap-northeast-2c": {
...
}
}
},
...
"managedNodeGroups": [
{
...
"availabilityZones": [ <-- 'ap-northeast-2a', 'ap-northeast-2c'를 사용하도록 정의
"ap-northeast-2a",
"ap-northeast-2c"
],
...
}
],
"availabilityZones": [ <-- 'ap-northeast-2a', 'ap-northeast-2c'를 사용하도록 정의
"ap-northeast-2a",
"ap-northeast-2c"
]
}
참고로, 위와 같이 eksctl이 처리한 yaml 내용은 아래와 같이 '--verbose' 플래그 (디버깅 레벨)를 조정하여 확인하실 수 있으니 희망하시는 경우 참고하시길 바랍니다.
$ eksctl create cluster -f cluster.yaml --verbose 5
이상 'dataengineer' 사용자님께서 질문주신 내용에 대하여 제가 답해드린 내용이 도움이 되기를 바랍니다.
감사합니다.
관련 콘텐츠
- AWS 공식업데이트됨 2년 전
- AWS 공식업데이트됨 2년 전
그러면 결국 managedNodeGroup은 제가 정의 한 가용영역에 생성되는 것이 맞겠네요. 답변 감사합니다.
managedNodeGroup 위에 az 값은 클러스터 내에서 사용할 수 있는 가용영역의 전체 범위를 정하는 것이다. 제가 이해한게 맞을까요?
실례가 안된다면, EKS 에서 관리하는 Control Plane 은 어느 영역에서 생성이 되는지 여쭈어 봐도 될까요? 컨트롤 플레인 자체는 AWS가 자동으로 여러 가용 영역에 걸쳐 배포하고 관리한다고 저는 이해하고있고, 이를 따로 정할수는 없다고 알고있습니다.
안녕하세요, 'dataengineer' 사용자님. 사용자님께서 이해하신 사실이 맞습니다.
다시 한번 간단히 말씀드리면,
이어서 EKS 클러스터의 CP (Control Plane)에 관한 내용은 AWS의 정책에 의해 자세히 답변드리기가 어렵습니다만, 사용자님의 EKS 클러스터에서 사용하도록 정의된 AZ를 모두 불편함 없이 활용하실 수 있도록 AWS에서 자동으로 관리되고 있음을 알려드립니다.