멋쟁이사자처럼 오늘 공부 후기 챌린지 - 클라우드 엔지니어링 편
이런 고민을 하고 있다면, 지금 이 순간에도 멋쟁이사자처럼에서 클라우드 엔지니어링 부트캠프를 수강하며 자신만의 속도로 성장 중인 수강생들을 주목해보세요.
배우고 잊어버리는 건 누구나 겪는 일이에요. 하지만 멋쟁이사자처럼 부트캠프는 단순히 배우는 것에 그치지 않고, 배운 내용을 내 것으로 만드는 방법까지 고민하고 있어요. 그렇다면, 배운 것을 가장 효과적으로 습득하는 방법은 무엇일까요? 바로 기록하고 정리하는 것이죠. 배운 내용을 정리하고 기록하면, 기억은 오래 남고 실전에서도 활용할 수 있으니까요!
멋쟁이사자처럼 부트캠프는 수강생들이 배운 내용을 정리하고 공유할 수 있도록 TIL (Today I Learned) 블로그 챌린지를 진행하고 있어요. 그래서 오늘, 강사님과 멘토님에게 배운 내용을 체계적으로 기록하며 성장하고 있는 수강생의 이야기를 가져왔어요. 작고 사소해 보일지라도 배운 내용을 정리하고, 기록하면서 성장한 이들의 소중한 경험을 지금 확인해 보세요.
AWS가 Kubernetes Control Plane을 관리하는 완전관리형 서비스.
사용자는 Worker Node(Data Plane) 와 애플리케이션 관리에 집중.
고가용성을 위한 멀티-AZ Control Plane 배포, 장애 복구 및 자동 크기 조정 지원.
EKS는 기존 Kubernetes와 동일한 방식으로 애플리케이션을 배포하고 관리.
구성 요소
설명
Control Plane
AWS가 관리. Kubernetes API 서버, etcd, 컨트롤러 매니저, 스케줄러 포함. 사용자 접근 불가
Data Plane
사용자가 관리. EC2 기반 또는 Fargate 기반 Worker Node 구성 가능
Nodegroup
동일한 설정을 가진 Worker Node 집합. EC2 인스턴스 기반 또는 Fargate 기반으로 구성 가능
EKS는 기본적으로 AWS VPC CNI 플러그인을 사용하여 pod에 VPC 서브넷의 IP를 직접 할당.
장점: pod가 VPC 수준에서 통신 가능 (보안 그룹, 라우팅 활용 가능)
단점: 서브넷의 IP 개수 제한 → pod 수 제한
해결 방안
VPC CNI 설정 변경 (prefix delegation 등)
다른 CNI (예: Calico)와 혼합 사용
L4 수준에서 Kubernetes Service 리소스를 외부와 연결
높은 성능, 정적 IP 제공, 낮은 지연 시간
서비스 어노테이션으로 NLB 설정 가능
Ingress, Service 기반으로 ALB (Application Load Balancer) 및 NLB 자동 생성
Ingress 리소스를 통해 Path-based, Host-based 라우팅 가능
Helm 등을 통해 설치 후 IAM 역할 및 정책 필요
스토리지 | 설명 |
|---|---|
EBS CSI | 블록 스토리지. Pod에만 마운트 가능. 상태 저장 워크로드에 적합 |
EFS CSI | 파일 스토리지. 여러 Pod에서 동시에 마운트 가능. 공유 데이터에 적합 |
FSx CSI | 고성능 파일 시스템 옵션 (Lustre, Windows File Server 등) |
PVC (PersistentVolumeClaim)로 Pod에 동적 스토리지 바인딩 지원
Fargate 사용 시 관리할 EC2 인스턴스가 없으며, pod 단위로 요금 발생. 짧은 수명 pod에 유용.
Auto Scaling
Cluster Autoscaler: node 수 조정
Horizontal Pod Autoscaler: pod 수 조정
IRSA (IAM Roles for Service Accounts)
Pod에 AWS 리소스 접근 권한 부여 가능 (보안성 향상)
클라우드 인프라를 코드(JSON/YAML)로 정의하고 배포할 수 있는 IaC(Infrastructure as Code) 서비스.
IaC 기반으로 인프라 자동화
템플릿 재사용을 통한 생산성 및 일관성 향상
리소스 생성/삭제 자동 처리
스택 삭제 시 의존된 리소스 자동 정리
생성할 AWS 리소스를 정의
구조:
AWS::서비스명::리소스타입
템플릿의 동적 입력값 정의
사용자 입력 또는 내부 참조 가능
정적
동적
정적 값(지역별 AMI 등)을 정의할 때 사용
스택 실행 결과를 다른 템플릿과 공유할 수 있게 내보냄
Outputs:
SSHSecurityGroup:
Description: SSH 전용 보안그룹
Value: !Ref CompanySSHSecurityGroup
Export:
Name: SSHSecurityGroupResources:
MyInstance:
Type: AWS::EC2::Instance
Properties:
SecurityGroups:
- !ImportValue SSHSecurityGroup특정 조건에 따라 리소스 생성 여부 결정
Parameters:
Environment:
Type: String
Default: Production
Conditions:
IsDev: !Equals [!Ref Environment, Development]
Resources:
DevOnlyResource:
Condition: IsDev
Type: AWS::S3::Bucket템플릿 설명 또는 리소스 관련 부가 정보 정의
Metadata:
Instances:
Description: EC2 인스턴스 정보템플릿에서 동적 처리를 위한 함수들
함수 | 설명 |
|---|---|
Ref | 리소스 이름 또는 매개변수 값 참조 |
Fn::GetAtt | 리소스 속성(예: ARN, IP 등) 가져오기 |
Fn::FindInMap | Mapping 값 참조 |
Fn::ImportValue | 다른 스택에서 Export한 값 가져오기 |
Fn::Join | 문자열 연결 (예: |
Fn::Sub | 문자열 템플릿 치환 ( |
EKS를 CloudFormation을 통해 생성하는데 강사님과 같은 yaml 파일을 작성했음에도 Version 오류가 났다.
이 AWS::EKS::Cluster 리소스가 CREATE_FAILED 상태입니다Properties validation failed for resource ControlPlane with message: [#/Version: string [] does not match pattern 1.\d\d]
해당 에러메세지는 버전이 맞지 않아서 발생하는 문제라고 한다.강사님은 따로 버전 수정을 하지 않으셨던 거 같은데...
여하튼? 내가 해결했던 방법은 버전을 추가 해줬다.yaml 파일에 공백이 있어도 정상실행 되지 않을 수도 있다고 한다..
해결방법
스택 생성 시에 내용을 보면 EKSClusterVersion이 있는데 이 부분과 YAML 파일의 버전이 동일해야 한다.
yaml 파일에는 버전이 기재 되어있지 않았다.
홈 : 멋사 부트캠프
멋쟁이사자처럼의 13년 교육 노하우로 IT 취업의 꿈을 현실로!
