잡다한 IT 지식

AWS self managed kubernetes 구축 아이디어 본문

AWS

AWS self managed kubernetes 구축 아이디어

가나무마 2025. 7. 16. 21:55

1. Custom Controller 기반 Cluster Autoscaling

  • Unschedulable 이벤트가 발생하면 custom controller 또는 watcher가 이를 감지(현재 트래픽 기반으로 추가 개수 설정)
  • AWS CLI 또는 SDK를 통해 EC2 인스턴스를 생성 (Auto Scaling Group 또는 직접)
  • EC2는 User Data를 통해 kubeadm join을 자동 실행하여 클러스터에 등록
  • Pod가 정상적으로 스케줄됨

고려사항

  • kubeadm join을 어떤 방식으로 구성할 것인지 결정 필요
    • 인증서 기반: /etc/kubernetes/pki를 S3 등에 저장 → 보안 문제 발생 가능성
    • 토큰 기반: kubeadm token create → EC2 인스턴스에 안전하게 전달하는 방식 필요
  • 토큰 만료 방지 (장기 토큰 또는 주기적 재발급 필요)
  • EC2 생성 후 ALB Target Group에 자동 등록 필요

2. kubeadm 환경에서 AWS Load Balancer Controller 사용

  • Ingress 리소스를 감시하여 ALB 생성, 삭제, Target Group 생성 및 자동 관리
  • EC2 오토스케일링 시 새로운 노드가 Target Group에 자동 등록됨
  • Pod 단위 IAM 역할 부여는 불가능하므로 EC2 Role에 의존해야 함

필요 구성

  • Controller Pod가 사용할 수 있는 AWS IAM 권한
    • EC2 Instance Profile 또는 IRSA equivalent
  • Helm 또는 manifest를 이용한 aws-load-balancer-controller 배포

3. Pod 단위 IAM Role이 불가능하므로 Node Pool + Namespace 분리 전략

  • IAM Role을 기능별로 나누고, Node Pool을 그에 따라 분리 (예: S3 접근용, RDS 접근용)
  • Pod에는 NodeAffinity와 toleration 설정을 통해 특정 Node에만 배치
  • 네임스페이스를 기반으로 RBAC 및 네트워크를 분리하여 보안성 향상

효과

  • EC2 IAM Role이 모든 Pod에 공유되는 구조에서 최소 권한 원칙 일부 유지 가능
  • IRSA를 사용할 수 없는 kubeadm 환경에서 현실적인 권한 분리 수단

4. Ingress 기반 서비스 분리 (검색, 주문 등)

  • Ingress 리소스를 path 또는 host 기반으로 구성하여 여러 서비스로 라우팅
  • ALB 도메인을 통해 외부 요청 수신
  • 각 요청은 Ingress Controller를 통해 Kubernetes Service로 전달
  • Service는 Pod의 IP가 유동적이더라도 안정적인 라우팅을 보장

핵심 개념

  • Pod IP는 유동적이지만, Service가 이를 추상화하여 항상 접근 가능하게 유지

5. VPC CNI 기반 target-type: ip와 kubeadm 구조 비교

  • kubeadm 환경에서는 ALB → NodePort → kube-proxy → Pod 구조로 hop 수가 많음
  • EKS에서 VPC CNI를 사용하면 Pod에 직접 ENI가 부여되어 ALB가 바로 Pod로 트래픽 전달 (hop이 적고 성능이 좋음)
  • kubeadm에서는 이 구조가 구현 불가능하므로, 성능 민감한 서비스는 노드 배치 최적화가 필요

배치 최적화 예시

  • 서로 자주 호출하는 서비스는 동일 노드 또는 동일 가용 영역에 배치
  • NodeAffinity, TopologySpreadConstraints 등을 활용하여 네트워크 hop 최소화

5. kubeflow 기반 재학습 파이프라인 구축

  • 현재 파이프라인이 없어 재학습이 안됨.
  • kubeflow 사용하여 지속적 학습 구축

필요 구성

  • kubeflow 설치 시에 istio가 필수
  • 인스턴스 크기: 최소 xlarge
  • 인스턴스 개수: 최소 xlarge
  • taint나 nodeaffinity 필수

고려사항

  • 데이터 수집 방법
    • s3 -> lambda -> SQS -> lambda -> kubeflow
    • s3 -> lambda -> SQS -> kubeflow polling 
    • s3 -> kinesis -> kubeflow(실시간성, 제일 비쌈)

 

'AWS' 카테고리의 다른 글

AWS Route53 - CNAME vs Alias  (0) 2025.07.04
CloudFront VPC Origin - 퍼블릭 노출 피하기  (0) 2025.05.19