03. AWS CDK를 사용하여 모범 사례 기반 Amazon EKS
AWS에서 제공하는 IaC툴인 CDK.
AWS Cloud Development Kit (AWS CDK)
IaC란 InfraStructure AS Code
<1> CDK 란?
<2> AWS CDK의 주요 구성요소?
<3> CDK 모범 사례
<4> API 서버 엔드포인트 접근 모범 사례
<5> 데이터 플레인 모범 사례
<6> 네임 스페이스를 활용한 쿼터 설정
<7> 네트워크 모범사례
<10> 개인 요약
<1> CDK 란?
1
AWS에서 제공하는 IaC툴
IaC란 InfraStructure AS Code의 약자
코드로 인프라를 정의한다.
2
구성파일, 코드로 인프라를 관리한다.
리포지토리를 이용해 인프라 구성 파일을 관리한다.
이전 버전으로 변경을 할 수도 있게 된다.
3
AWS CDK는 익숙한 언어로 정의할 수 있는 오픈소스이다.
<2> AWS CDK의 주요 구성요소?
Allication , Stack, Construct
1
Allication?
Stack들의 모음
2
Stack?
최소 배포 단위
3
Construct?
리소스 정의 단위
1개 이상의 자원을 대표한다.
Allication의 빌딩 블록이다.
4
CDK를 지원하는 언어들은 다양하다.
5
Construct 라이블러리?
Construct에 리소스를 정의하기 위해 , 각 AWS 서비스를 추상화해서 클래스로 제공하는 것
6
Construct 라이브러리의 3가지 레벨?
L1 = CloudFormation , cfn
L2 = AWS Construct , AWS 서비스 추상화
L3 = Purpose-built constructs , 여러 AWS 서비스들을 조합해 추상화하여 랩 칭한 형태 , 예) ECS와 ALB 생성하는 것이 예가 될 수 있다.
7
AWS CDK CLI를 사용한다.
init - 새로운 프로젝트 생성
code - 코드로 정의
synth - Cloudformation으로 변경될 내용 확인
deploy - 배포
cdk diff로 변경 사항 확인도 가능하다.
8
다양한 CDK 제공?
AWS CDK 사용
CDK for 테라폼
CDK for 쿠버 네티스
9
CDK , CDKtf , CDK8 s는 Construct 가 핵심이다.
10
Construct 허브 사이트?
Construct 라이브러리를 찾아 사용하자~
Solutions Construct 도 찾아 사용하자.
11
CDK v2?
CDK v1은 ?
라이브러리를 불러와야 했다.
의존성으로 문제가 됨.
컴파일 에러 발생하기도 함
CDK v2는 ?
aws cdk lib이라는 통합 모듈을 사용한다.
12
cdk watch 기능- 설치 내용 모니터링
롤 백 비활성화하는 옵션 사용해보자 - 클라우드 포메인션의 리테인과 같은 옵션도 있다.
<3> CDK 모범 사례
1
파일 역할 구분?
인프라 정의 , 설정값, 테스트, 애플리케이션 코드 등에 맞게 디렉터리 정의하자.
2
리소스 특징에 맞게 스택 정의?
// 테라폼에서 compute , network 이렇게 파일을 정의하는 거와 비슷한 거 같다.
<4> API 서버 엔드포인트 접근 모범 사례
1
API 서버 엔드포인트 접근 유형?
Public (기본값)
Public and Private
Private
2
엔드포인트의 접근을 제한하는 CIDR블록을 지정하라!!!
3
구성?
Public only
Private only
Public and Private
4
Private only 구성시?
API 서버는 인터넷에서 접근 불가능하다.
ECR, S3와 같은 필요한 VPC엔드포인트 생성이 필요하다!!
<5> 데이터 플레인 모범 사례
1
Horizontal Pod Autoscaling (HPA)?
2
Vertical Pod Autoscaling (VPA)?
3
Cluster Autosaler (CAS)?
Pod가 Pending 되면 EC2 인스턴스를 클러스터에 추가한다.
워커 노드가 올라오는데 지연 발생을 방지하기 위해
추가적으로 검토하는 메커니즘이 Overprovisoning
4
Karpenter 카펜터라는 오픈 소스 유틸로 AWS 쿠버 네티스 사용 가능.
스케일링
<6> 네임 스페이스를 활용한 쿼터 설정
네임스페이스 활용하자.
네임스페이스 개체수, 리소스 양을 제한.
리소스로 인한 장애가 전체 장애로 이어지는 부분을 방지한다.
<7> 네트워크 모범사례
1
VPC CNI 사용한다.
2
사용 시 VPC IP를 소모한다.
추후 확장 시를 고려해 IP를 충분히 준비하자.
3
IP주소 인벤토리를 확인하기 위해
CNI Metrics Helper 툴을 사용하자.
4
CloudWatch 알람을 설정해서 서브넷의 주소가 부족할 경우 알람을 받을 수 있다.
<10> 개인 요약
1
CDK로 인프라를 구성해보자.
AWS doc과 유튜브 자료 등 참고
2
카펜터로 스케일링 관리해보자.
3
같이 보기 좋은 자료
CDK Labs at AWS has 36 repositories available. Follow their code on GitHub.
github.com
https://github.com/aws/aws-eks-best-practices
https://github.com/aws-samples/aws-ecs-devops-using-aws-cdk
https://brunch.co.kr/@topasvga/2466
https://brunch.co.kr/@topasvga/2439
https://brunch.co.kr/@topasvga/1769
https://brunch.co.kr/@topasvga/1758
감사합니다.