Block 4: 배치, GPU, 관측성, 망분리 검토, 비용과 도입 판단
Hybrid 노드에는 eks.amazonaws.com/compute-type=hybrid label이 자동으로 붙습니다. 위치 label(example.com/location)은 노드 소유자가 직접 부여합니다.
Hybrid taint는 선택 사항입니다. 자동으로 붙지 않으며, 추가 전에 CNI, DNS, GPU 인프라 Pod의 toleration부터 확인합니다.
NoSchedule은 새 스케줄링에만 영향을 줍니다. label이나 required affinity를 바꿔도 이미 실행 중인 Pod는 자동으로 이동하지 않습니다.
ScheduleAnyway는 점수 선호이며 maxSkew를 넘을 수 있습니다. zone label은 실제 장애 도메인에만 부여하고, 모든 Hybrid 호스트를 AWS AZ로 표시하지 않습니다.
| 경로 | 할당 방식 |
|---|---|
| 독립 NVIDIA device plugin | nvidia.com/gpu 등 확장 리소스 게시 |
| 독립 DRA driver | ResourceSlice 게시, DeviceClass/ResourceClaim으로 할당 |
GPU Operator + ClusterPolicy | Operator가 관리하는 device-plugin 방식 |
GPU Operator 26.7 + GPUCluster | 신규 설치용 Operator 관리 DRA, ClusterPolicy와 상호 배타적 |
MIG는 GPU를 하드웨어 기반 compute, memory 인스턴스로 나눕니다. 아래는 A100 40 GB profile입니다.
| Profile | 명목 메모리 | 최대 인스턴스 |
|---|---|---|
1g.5gb | 5 GB | 7 |
2g.10gb | 10 GB | 3 |
3g.20gb | 20 GB | 2 |
4g.20gb | 20 GB | 1 |
7g.40gb | 40 GB | 1 |
4g.40gb는 A100 80 GB의 profile입니다. MIG 활성화, 재구성은 GPU 워크로드를 중단할 수 있는 유지보수 작업이며, Pod 요청만 nvidia.com/mig-1g.5gb로 바꿔도 인스턴스가 생기지 않습니다.
renameByDefault: true이면 nvidia.com/gpu.shared로 게시됩니다. replica 4개는 독립 메모리 영역 4개가 아니며, replica 사이에 메모리, 장애 격리가 없습니다.
| NVIDIA 사양 | H100 SXM | H200 SXM |
|---|---|---|
| GPU 메모리 | 80 GB HBM3 | 141 GB HBM3e |
| 메모리 대역폭 | 3.35 TB/s | 4.8 TB/s |
| MIG | 최대 7개 | 최대 7개 |
공급자 사양이며 이 환경의 실측값이 아닙니다. NVL/PCIe variant는 값이 다르므로 SXM 행을 모든 H100에 일반화하지 않습니다.
node_cpu_seconds_total 등 호스트 지표는 kubelet이 아니라 Node Exporter가 제공합니다. DCGM exporter는 별도로 설치되어 있어야 합니다.
Hybrid에서는 cluster, workload, Pod, container 지표를 지원합니다. node-level 지표는 EC2 IMDS에 의존하는데 Hybrid 호스트에는 없어서 제공되지 않습니다. 호스트 CPU, 메모리는 Node Exporter와 Prometheus로 보완합니다.
Pod Identity 환경에서도 Hybrid 호환을 위해 RUN_WITH_IRSA 변수가 필요합니다. 기존 AmazonCloudWatchAgent의 spec.env 목록에 추가하고 기존 항목은 보존합니다.
| 애드온 | 이 설계의 배치 |
|---|---|
| AWS Load Balancer Controller | cloud node (webhook 접근, routable Hybrid IP target) |
| CloudWatch agent/operator | agent는 지원 노드, operator webhook은 cloud 권장 |
| cert-manager | webhook cloud 권장, routable이면 Hybrid 가능 |
| Metrics Server | cloud 또는 도달 가능한 Hybrid Pod endpoint |
| Cilium/Calico | Hybrid Node (cloud node는 VPC CNI 유지) |
호환 기준이며 설치 target 버전이 아닙니다.
| Add-on | Hybrid 호환 기준 |
|---|---|
| Node monitoring agent | 1.2.0-eksbuild.1 |
| External DNS | 0.19.0-eksbuild.1 |
| FSx CSI | 1.7.0-eksbuild.1 |
| Secrets Store provider | 2.1.1-eksbuild.1 |
| Pod Identity Agent | 1.3.3-eksbuild.1 (Bottlerocket 1.3.7-eksbuild.2) |
적격 노드에 location 값 cloud 또는 onprem을 부여합니다. 한 도메인에 용량이 없으면 새 replica가 Pending일 수 있어 가용성 절충이며 failover 보장이 아닙니다.
자체 관리형 AWS Load Balancer Controller는 도달 가능한 Hybrid Pod IP를 target으로 등록할 수 있습니다. ALB는 alb.ingress.kubernetes.io/target-type: ip, NLB는 service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip와 loadBalancerClass: service.k8s.aws/nlb를 사용합니다.
route, 반환 경로, security group/firewall, remote Pod network 구성이 맞아야 합니다. 컨트롤러는 cloud node에 두는 설계를 권장합니다.
예시 CIDR은 인벤토리에서 예약한 비중복 대역으로 바꿉니다. IP 할당이 라우터 광고나 통신 성공을 보장하지는 않습니다.
CiliumBGPClusterConfig, CiliumBGPPeerConfig와 함께 구성합니다. 세션, 수락된 라우트, next hop, 반환 경로를 확인해야 완성입니다.
cilium.io/v2 BGP CRD는 Cilium 1.18 기준입니다. 1.17.x 클러스터는 Block 2 예제처럼 v2alpha1을 사용합니다.
Cilium Ingress와 Gateway API는 L7 proxy가 필요합니다. 그러나 Hybrid Nodes Gateway의 필수 설정은 vtep.enabled=true, l7Proxy=false이므로 같은 Cilium 설치에 함께 적용할 수 없습니다. 기능을 켜기 전에 네트워크 설계를 먼저 선택합니다.
nodeadm init을 다시 실행 (한 호스트씩 검증)--enable-credentials-file=true, DaemonSet 키는 hybrid-bottlerocketeks-auth 서비스 경로 + 노드 역할의 eks-auth:AssumeRoleForPodIdentity 권한| 고객 요구 | 이 설계의 판단 |
|---|---|
| 인터넷 비노출, 승인된 사설 관리 통신 허용 | 검토 가능한 후보 (증명 필요) |
| 물리 단절, 외부 CP와 실시간 연결 불가 | 연결 전제와 충돌 |
| 클라우드발 신규 연결 전면 금지 | kubelet, webhook 흐름과 충돌 |
| 업무 영역별 관리 주체, 권한 독립 | 공통 cluster 관리자 범위 심사, 필요 시 cluster 분리 |
| K8s 객체, Secret, 로그까지 온프레미스에만 | AWS control plane 구성과 충돌 가능 |
Direct Connect는 기본적으로 전송 중 암호화를 제공하지 않습니다. Kubernetes API, kubelet의 TLS와 인증을 유지하고, 회선 구간 암호화가 필요하면 IPsec over DX 또는 MACsec 적용 범위를 검토합니다.
MACsec은 지원 DX 연결의 링크 보호이며 종단 간 TLS와 범위가 다릅니다. Hybrid Nodes Gateway(VXLAN)도 자체 암호화가 없습니다.
get nodes/proxy를 단순 조회 권한으로 분류하지 않습니다. kubelet API를 통한 컨테이너 명령 실행이 가능할 수 있고, Kubernetes audit, admission 경로를 우회할 수 있습니다.
pods/log, pods/exec, pods/attach, pods/portforward, nodes/proxy와 workload 생성 권한을 함께 검토합니다.
다음은 준비할 증거 목록이며 점검 결과가 아닙니다.
| 심사 질문 | 증거 |
|---|---|
| private-only가 실제 적용됐는가 | endpoint 설정, DNS 응답, DX 경로, 경계 flow 기록 |
| AWS에서 어디까지 접근 가능한가 | ENI/subnet, remote CIDR, route, SG, firewall 대응표 |
| 누가 어떤 API 작업을 했는가 | EKS audit 로그, CloudTrail |
| 무엇이 망을 통과했는가 | VPC Flow Logs, 방화벽 기록 |
| 월 사용량 구간 (vCPU-hour) | 요금 |
|---|---|
| 처음 576,000 | $0.020 |
| 다음 576,000 | $0.014 |
| 다음 4,608,000 | $0.010 |
| 다음 5,760,000 | $0.008 |
| 11,520,000 초과 | $0.006 |
| 노드 | 월 vCPU-h | 연환산 노드 요금 | + 클러스터 1개 |
|---|---|---|---|
| 10 | 233,600 | $56,064 | $56,940 |
| 50 | 1,168,000 | $236,928 | $237,804 |
| 100 | 2,336,000 | $377,088 | $377,964 |
가정: 노드당 32 vCPU, 월 730시간, 같은 월을 12번 반복, 표준 지원 클러스터 1개($0.10/시간) 포함. 청구서나 실측이 아닌 계산 모델입니다.