개발 · 프로그래밍

/

데브옵스 · 인프라

99% J형 엔지니어와 함께하는 AWS EKS와 GitLab CI/CD 기초 완벽 정복

이론적인 내용만 학습하는 것 보다 현업 CI/CD 업무의 전체적인 큰 틀을 직접 구성해보면서 본질을 보는 역량을 키울 수 있는 강의입니다.

(5.0) 수강평 2

수강생 32

Thumbnail

중급자를 위해 준비한
[데브옵스 · 인프라, 클라우드] 강의입니다.

이런 걸
배워요!

  • Gitlab CI/CD 파이프라인 구성에 필요한 컴포넌트들을 제공 받는 걸 그대로 쓰지 않고 직접 커스텀하고 프로젝트에 적용하는 방법

  • 쿠버네티스 환경에서 프로젝트 단위 별 신경 써야 할 중요한 환경 변수 값들을 .env가 아닌 IRSA를 통해 안전하고 스마트 하게 보안을 향상 시키는 방법

  • 쿠버네티스 환경에서 프로젝트 로깅을 모니터링하고 특정 로그 발생 시 슬랙 알림을 보내는 방법

  • 쿠버네티스 환경에서 노드들의 리소스들을 모니터링하고 임계치 값을 초과하면 슬랙 알림을 보내는 방법

  • Nest.js 프로젝트에 CI/CD 적용하는 방법

  • 파이프라인 모니터링


자기소개

안녕하세요.

데브옵스,인프라,클라우드 파트 첫 강의를 제작하게 된 Meiko 라고 합니다.

현재 EKS 클러스터와 Gitlab이 통합된 클라우드 네이티브 환경에서 실제 서비스를 배포하는 환경을 구축하고 관리 및 운영하는 업무 그리고 DevOps 조직 확장에 대비한 업무 요청 통합 계획을 세우며 플랫폼 엔지니어링 측면의 자동화 업무를 하고 있습니다.


강의 참고 사항 ( 기술을 이해하는 가장 빠른 방법은 직접 구현 해보는 것 )

제가 생각하는 핵심 이론을 제외한 나머지 설명은 최소화 하고 실습 위주로 진행합니다.

레시피만 전달해드리고 끝나는 것이 아닌 직접 만든 아키텍처 구성도 및 시퀀스 다이어그램을 바탕으로 인프라 구조와 동작 흐름의 본질을 최대한 쉽게 이해하실 수 있도록 강의를 준비하였습니다.

EKS provisioningEKS Best Practice 문서를 기반으로 구성하는 것 에 초점을 맞추었습니다.

AWS, K8S, Git, Docker 에 대해서 지식 및 실제 사용 경험이 없으시다면 조금 벅찰 수 있습니다.

또한 AWS 서비스들을 통해 실습을 진행하기 때문에 부득이하게 과금이 발생할 수 밖에 없습니다.

꼭 강의 소개 영상을 보시고 난 후 수강 여부를 판단해주시면 감사하겠습니다.


강의 수강에 도우미 역할을 해줄 직접 만든 노션 템플릿 제공

여러 가지 CLI 툴 설치, Gitlab, Slack, DB, Domain 구매 등 실습 전에 설치 및 준비해야 할 것도 많고 다루는 내용도 많을 것 입니다.
그래서! 파워 J 성향을 가진 사람으로써 강의를 수강 시 도우미 역할을 해줄 노션 템플릿을 준비하였습니다!

각자 템플릿을 복사하셔서 Private 하게 사용하세요.

( 강의자료 참조 )

위 템플릿과 함께 강의를 들으며 한번 정리하면서 인프라 작업에 대한 계획을 세워보세요!

그리고 추후에 각자 개인 블로그에 정리하시면서 나만의 지식으로 만들어 보시는 걸 추천드립니다.

강의를 보며 실습을 진행 하기 전에 어디까지 준비가 되어야 하는 지 명시된 해당 티켓들이 완료 처리가 되면 AWS 인프라를 구축하실 수 있도록 준비하였습니다.


실습 순서

  1. 실습에 필요한 필수적인 툴 설치 및 설정을 진행합니다.

  2. AWS Elastic Kubernetes Service ( EKS ) 클러스터 및 필요한 AWS service들을 eksctl 명령어로 제공받은 yaml 파일들을 실행시키면서 빠르게 provisioning 하는 실습을 진행합니다.

    1. AWS 콘솔에서 생성하는 것은 최소화 하였습니다.

  3. kubectl, helm, aws-cli 등 핵심 명령어들을 익히면서 클러스터에 필수적인 설정 진행

  4. Gitlab Pipeline 커스텀

    1. Gitlab Runner ( shared runner 사용 )

    2. Gitlab AutoDevOps

    3. Gitlab AutoDeploy Image

    4. Gitlab Kubernetes Agent

  5. NestJS 프로젝트를 4번에서 구성한 Gitlab Pipeline을 통해 직접 provisioning EKS에 배포

  6. NestJS 프로젝트에 IRSA 와 AWS Secrets Manager를 통한 보안이 향상된 환경변수 다루는 실습


먼저 직접 클러스터에 기본적인 설정과 필수적인 오픈소스 프로젝트들(Loki, Grafana, Prometheus, Istio 등) 을 직접 배포 해본 후 , Ansible이나 Terraform 같은 IAC에 대한 개념 및 실습을 진행해보면 왜 편리한 지 그리고 왜 사용하는 지 아시게 될 것 입니다. (이번 강의가 잘 된다면(?) 계속 후속 심화 강의를 만들 생각입니다)


Slack에 Pipeline 모니터링 알림 전송


다뤄볼 수 있는 AWS 서비스들


아키텍처 구성도


파이프라인 흐름


위와 같이 EKS 클러스터 및 파이프라인 구축 뿐만 아니라 쿠버네티스 환경에서 중요한 모니터링도 구성해보고 쿠버네티스에서 IAM을 어떻게 주입하는 지 그리고 트래픽 흐름에 대해서도 살펴봅니다.

강의를 듣고 나면, 데브옵스 업무 흐름에 대한 깊이 있는 이해를 하실 수 있을 것 입니다.


이번 강의에서 다루지 않는 내용



실제 운영에서 필요한 AutoScaling 설정,백업 전략, HPA 구성 및 동작 원리 그리고 어플리케이션 부하 테스트에 대한 내용은 본 강의의 목표인 클러스터를 좋은 구조로 구성하고 운영 단계 전 필수적인 세팅까지 해보는 것을 달성하기 위해 다루지 않고 다음 심화 강의에서 다루려고 합니다.


또한 인프라 provisioning 및 configuration 세팅에 필요한 IAC 인 테라폼이나 앤서블도 사용하지 않습니다.


마지막으로 비용적인 측면과 실습 복잡도를 고려하여 아래와 같은 AWS 서비스는 사용하지 않습니다. 비싸지 않은 것도 있지만 최대한 필수적인 서비스들만 고려하였습니다.

  1. Bastion-Host ( EC2 ) 를 퍼블릭 서브넷에 배치시키고 해당 인스턴스에 SSH 접속을 하여 이를 경유해 클러스터에 접근하는 것이 옳지만, 인프라 구성에 초점이 맞추어져 있기 때문에 불필요하다고 판단하여 구성하지 않고 로컬에서 IAM을 통해 클러스터 Control Plane 에 있는 API Server에 요청을 보내는 식으로 진행합니다.

  1. DB는 RDS를 사용하지 않고 Superbase 에서 제공하는 무료 DB ( Postgres) 를 사용합니다

    1. 이 DB endpoint 에 대한 정보를 env가 아니라 AWS Secrets Manager에 Secret으로 하나만 생성하여 어플리케이션 파드가 뜰 때 값을 받아와서 사용하는 방식의 실습을 할 예정입니다.

  2. Registry도 ECR을 사용하지 않고 Gitlab Registry를 사용합니다.

이런 내용을 배워요

Gitlab CI/CD 파이프라인 커스텀에 대한 내용

Gitlab에서 기본적으로 제공하는 컴포넌트들(Gitlab auto devops, auto deploy ) 을 그대로 사용하지 않고 직접 커스텀 하여 요구사항에 맞게 파이프라인을 구성할 수 있는 방법에 대해서 학습하고 적용 해보는 실습을 할 수 있습니다.

쿠버네티스 모니터링 및 알림 시스템 구축에 대한 내용

쿠버네티스 환경의 Obsability의 대표적인 PLG stack ( Prometheus, Loki, Grafana )을 세팅해볼 것 입니다.

EFS CSI 드라이버를 사용하여 Amazon EFS(EFS)Persistent Volume(PV)으로 설정한 후, Persistent Volume Claim(PVC)을 통해 생성된 PV에 바인딩하여 데이터 손실을 방지하는 실습을 할 수 있습니다.

프로젝트에서 에러 또는 중요한 로그들을 모니터링하고 바로 대응이 필요할 수 있도록 슬랙 알림 설정 그리고 노드의 컴퓨팅 리소스들을 모니터링 하고 설정한 임계치 값을 넘었을 때 슬랙 알림 설정 등 의 실습을 할 수 있습니다.

환경변수 관리를 env 파일이 아니라 비밀값들을 안전하게 관리하는 방법에 대한 내용

먼저 AWS 에서 중요한 내용인 장기 자격 증명임시 자격 증명에 대한 내용을 학습합니다.

AWS SecretsManagersecret을 생성하고 쿠버네티스 리소스 중 하나인 Service Account를 활용하여 최소 권한 원칙을 적용하고 파드 별 역할을 안전하게 분리하는 실습을 할 수 있습니다.


수강 전 참고 사항

실습 환경

  • 운영 체제 및 버전(OS): MacOS M2 Pro 14


  • IDE : Webstorm

  • 인프라 환경 : AWS, AWS EKS, GItlab

학습 자료

  • 제공하는 학습 자료 형식: Notion 템플릿에 강의 자료 제공

  • 분량 및 용량: 각 섹션별로 자료 제공

선수 지식 및 유의사항

  • AWS , NestJS, k8s, docker

    기본 이해


  • AWS를 사용하기 때문에 실습 후 리소스를 잘 삭제하여 과금에 주의하세요


  • 코드 무단 배포 및 복제를 금지합니다. 학습 자료 역시 저작권이 있으며, 개인적인 학습 목적 외 사용을 금합니다.

이런 분들께
추천드려요!

학습 대상은
누구일까요?

  • Gitlab CI/CD 파이프라인을 프로젝트에 적용해보고 싶은 사람

  • 인프라 문서화에 많은 시간을 쓰는 바람에 좀 더 효율적으로 시간을 쓰고 싶은 개발자

  • 현업에서 자주 사용하는 CI/CD 파이프라인 구축이 무엇인지 궁금한 사람

  • 수동 배포 경험을 통해 자동 배포에 대한 니즈가 있는 사람

  • 기존의 CI/CD 환경 개선을 통해 회사에 기여하고 싶은 사람

선수 지식,
필요할까요?

  • Kubernetes

  • NestJS

  • AWS

  • Linux basic command

  • Docker

  • Git

안녕하세요
Meiko입니다.

자기소개

 

백엔드 엔지니어로 근무할 때부터 자동화를 통해 업무 프로세스를 효율화하고 개선 하는 것 에 관심이 많았습니다. 업무 생산성을 향상시키고 보다 효율적인 업무 환경에 기여하다보니 데브옵스 엔지니어로 일할 수 있는 기회를 얻었습니다. 저는 좋은 사수분들 밑에서 성장하고 있습니다. 그 과정에서 얻은 경험과 지식을 함께 나누고자 강의를 찍게 되었습니다.

경력

[前] Blockchain Backend / Contract Developer

[] Blockchain Mainnet DevOps Engineer

 

커리큘럼

전체

70 ∙ 4시간 20분

강의 게시일: 2024년 08월 21일
마지막 업데이트일: 2024년 08월 21일

수강평

아직 충분한 평가를 받지 못한 강의입니다.
모두에게 도움이 되는 수강평의 주인공이 되어주세요!