Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- CHECK
- lambda
- amazonqcli
- terraform
- Validation
- aws
- rds
- cloudwatch
- SageMaker
- serverless
- kubernetes
- 병목
- IaC
- fcm
- Lamda
- sns
Archives
- Today
- Total
잡다한 IT 지식
AWS self managed kubernetes 구축 아이디어 본문
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 |