brunch

You can make anything
by writing

C.S.Lewis

by Master Seo May 23. 2022

EKS 6탄-1. AWS CDK를 사용하여 모범

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  허브 사이트?

https://constructs.dev/

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

같이 보기 좋은 자료


https://github.com/cdklabs


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


감사합니다.


매거진의 이전글 6탄-3. 삼성엔지니어링의 마이크로 서비스 아키텍처
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari