[Udemy] Docker & Kubernetes : 실전 가이드 수강 후기

lango·2024년 3월 28일
1
post-thumbnail

들어가며

 지난 2023년 4분기 마지막 즈음, 글또 9기에 합류하여 지금까지 글을 작성해오고 있어요. 이번 글또 9기에서는 유데미와의 협업을 통해 무료로 강의를 제공받을 수 있었는데요. 마침 쿠버네티스 학습이 필요하다고 느껴서 [한글자막] Docker & Kubernetes : 실전 가이드 강의를 신청해서 수강하게 되었답니다.

이 강의를 신청한 이유

 저는 클라우드 도메인 업계에서 개발자로 업무를 진행하고 있는데요. 백엔드 위주의 개발을 주로 하다가 실무 인프라 환경에서 쿠버네티스를 활용할 줄 알아야 하다보니 자연스럽게 쿠버네티스를 학습해야 한다는 필요성을 느끼게 되었고, 마침 글또와 유데미에서 좋은 기회를 주셔서 쿠버네티스와 관련된 전반적인 핵심 개념들을 제공하는 강의를 수강하고자 했어요.

 강의 이름에 Docker & Kubernetes라는 내용이 포함된 것처럼, 쿠버네티스만 다루는 것이 아니라 도커로 시작해서 쿠버네티스로 마무리가 되는 커리큘럼으로 제공되기 때문에 온전히 쿠버네티를 다루지는 않는다는 아쉬움과 함께, 도커를 통해서 쿠버네티스의 필요성을 느낄 수 있겠다는 마음으로 신청하게 되었어요. 사실 쿠버네티스와 관련된 강의 선택지는 이 강의밖에 없었던 것도 선택한 이유 중 하나가 되겠네요.

 게다가 해당 강의를 제작하신 Maximilian Schwarzmüller 강사님의 이력이 눈에 띄었는데요. 200만명 이상의 수강생을 보유하셨고, AWS 인증 및 프로페셔널 웹 개발자 및 교육자로 활동하고 계셨다는 점도 중요했지만 쿠버네티스가 무엇이고, 왜 사용해야 하는 지 소개하는 커리큘럼이 깊은 인상을 주었어요. 유튜브도 운영하시는 걸 보니 개발 관련 교육에 정말 진심으로 활동하고 계신 것 같아요.




강의를 들으며 좋았던 점

 사실 저는 해당 강의의 커리큘럼을 기준으로 초반부 섹션인 도커 챕터들은 수강하지 않았고, 후반부 섹션인 쿠버네티스 챕터 위주로 수강하게 되었는데요. 쿠버네티스를 입문하여 배우기 시작하는 수준에 상태에서 이 강의를 통해 아래와 같은 내용들을 접하고 이해할 수 있어서 만족스럽게 수강했어요.

  • 왜 쿠버네티스를 사용해야 하는지?
  • 명령형 접근방식 vs 선언형 접근방식
  • Liveness Probe와 Readiness Probe의 공존 여부

왜 쿠버네티스를 사용해야 하는지

 사실 여러 자료나 문서에서 컨테이너 스케일링, 모니터링과 같은 강력한 기능과 더불어 자동 배포, 오토 스케일링, 로드밸런싱 작업의 효율을 높일 수 있기 때문에 쿠버네티스를 사용해야 한다고 많은 곳에서 소개하고 있지만, 처음에 쿠버네티스와 관련된 원론적인 내용을 접할 때는 잘 와닿지가 않았어요. 쿠버네티스 공식 문서나 다앙한 자료와 문서를 살펴봐도, 일시적인 이해도를 늘려줄 뿐, 오래 기억에 남지 않았기도 했구요.

 그런데 이 강의를 들으며 쿠버네티스의 등장배경에 대한 히스토리를 듣고나니, 잘 와닿지 않았던 쿠버네티스의 기초 지식들이 조금씩 이해되기 시작했어요. 모든 컨테이너를 수동으로 배포하고 관리하기보다는 AWS ECS와 같은 서비스를 사용해야 하는 것이 당연하게도 생산성이 높아지는데, 클라우드 프로바이더의 유동성에 따라 개발자에게 발생하는 러닝 커브를 줄이기 위해서도 쿠버네티스의 필요성을 강조해주고 있더라구요. 이와 더불어, 컨테이너 오케스트레이션을 위한 기술들을 다루기 위해서는 Docker를 아는 것만으로는 충분하지 않다고 언급해주신 강사님의 말씀이 기억에 남습니다.


명령형 접근방식 vs 선언형 접근방식

 쿠버네티스를 필요한 순간마다 조금씩 찍먹하다보니, 명령형 접근법과 선언형 접근법을 잘 구분하지 못했어요. kubectl을 통한 리소스를 추가하거나 수정, 또는 삭제하는 명령의 경우는 명령을 죄다 외우거나 찾아보고 커맨드로 입력하여 명령을 수행하는데 반해 선언형 접근법의 경우는 kubectl apply 커맨드 하나만으로 일괄적인 수행이 가능하기에 선언형 접근법을 지향하고 익숙해져야 한다는 정도로만 알고 있었죠.

 이러한 부분도 이 강의를 통해서 어느 정도 의문점을 해소할 수 있었는데요. yaml 형태로 정의한 리소스 파일을 가지고 클러스터 환경을 어떻게(how) 만드는 지에 집중하는 명령형 접근방식과는 달리 요구되는 클러스터 환경이 무엇인가(what)에 초점을 두는 선언형 접근방식을 기반으로 원하는 상태 그 자체를 선언하는 방식으로 활용되도록 권장하고 있다는 사실을 알게 되었어요. 여기서 명령형 접근방식을 고집하는 것은 docker run 명령만을 사용하는 것과 같으며, 선언형 접근방식을 활용하는 것은 Docker-Compose를 사용하는 것과 같다는 예시를 들어 설명해주니 보다 쉽게 이해할 수 있었네요.

 그리고 명령형 접근방식과 선언형 접근방식이라는 두 가지 다른 방법으로 리소스를 생성하는 등의 작업을 할 수 있는데 명령형 접근방식을 활용하는 것이 결코 나쁘다는 것이 아니라는 것을 알려주었어요. 단지 꽤 많은 양의 타이핑이 요구된다는 것 뿐이지요. 그럼에도 원하는 상태를 선언한다 라는 선언적 구성 설계 사상을 가진 쿠버네티스와 같이 관리자가 선언한 상태를 시스템이 알아서 파악하고 반영해주는 선언형 접근방식을 보다 활용할 수 있어야겠다 정도로 생각해볼 수 있었답니다.


Liveness Probe와 Readiness Probe의 공존 여부

 Probe를 통해 Pod의 상태를 주기적으로 파악한 후, Pod에 문제가 생겼다면 Pod를 재시작하는 livenessProbe 설정과, 반대로 Pod를 재시작하지 않는 readinessProbe 설정에 대해서는 알고 있었지만, 이들을 함께 사용하는 것을 권장하는 이유를 제대로 이해하지 못하고 있었는데요. livenessProbe 설정과 readinessProbe 설정을 모두 사용할 경우, 하나의 Probe가 컨테이너의 생존성을 확인하는 동안, 다른 Probe는 컨테이너의 준비 상태를 동시에 파악할 수 있다는 엄청난 특장점을 알게되었고, 그래서 livenessProbe 설정과 readinessProbe 설정을 함께 사용하기를 권장하는 구나 이해하게 되었죠.

 또한, 컨테이너가 초기화 중이거나 일시적인 오류로 트래픽 처리가 불가능한 상태를 추적하는 것과 동시에 시스템이 자동으로 문제를 해결하고 회복할 수 있도록 컨테이너를 재시작해주는 메커니즘을 반영할 수 있다는 것은 결국, 쿠버네티스 클러스터가 자동으로 건강한 상태를 유지할 수 있도록 돕는 강력한 기능일 것이라고도 느껴졌네요.

😂 여담으로 실무에서도 배포된 쿠버네티스 리소스에 livenessProbe 설정과 readinessProbe 설정을 웬만하면 기본값으로 설정해두고 있었는데, 그 이유를 자연스레 알게되어 고개를 끄덕일 수 있었기도 합니다.




강의를 들으며 아쉬웠던 점

 앞에서 강의를 들으며 새롭게 알게되어 좋았던 점을 이야기 했었는데요. 좋았던 점도 분명 있었지만, 개인적으로 아쉬웠던 부분들도 몇가지 짚어보려 해요.

  • 컨트롤 플레인을 마스터 노드로 표현하고 있어서 헷갈림.
  • 도커(Docker)와의 비교
  • 번역본에 크게 의존하게 됨.

컨트롤 플레인을 마스터 노드로 표현하고 있어서 헷갈림.

 쿠버네티스의 마스터 노드를 최신 버전부터는 컨트롤 플레인으로 부르는 것으로 알고 있었는데요. 강의 내에서는 마스터 노드로 자주 표현되길래 무엇이 정확한 표현인지 조금 헷갈렸던 것 같아요. 이와 관련하여 조훈님의 컨트롤 플레인과 마스터 노드의 차이라는 유튜브 영상을 찾아보게 되었는데요. 1.24 버전부터 마스터 노드를 컨트롤 플레인으로 표현하는 것이 오피셜이라고 공지하는 것을 살펴볼 수 있었어요.

 직접 로컬 PC에 1.25 버전의 쿠버네티스로 구축된 클러스터에서도 control-plane으로 명시되고 있었고, 별 생각없이 알고 있던 마스터 노드에서 컨트롤 플레인으로의 명명 히스토리를 조금이나마 알아볼 수 있어서 재미있었어요. 아쉬운 내용이긴 했지만 결과가 놓고보면 컨트롤 플레인으로 불러야 할지, 마스터 노드로 불러야 할지 찾아보고 확실하게 알 수 있게 되어 후련했어요.


도커(Docker)와의 비교

 아무래도 도커로 시작하여 쿠버네티스로 마무리되는 강의다보니 쿠버네티스 위주로 딥다이브하는 내용보다는 도커의 한계점을 기반으로 쿠버네티스의 필요성을 상기시켜주고, 쿠버네티스의 핵심 요소들을 짧은 시간 내에 소개하고 간단히 다루는 내용이 대부분이었어요. 그럼에도 쿠버네티스 기초 원리를 학습하고 싶었던 목적 정도는 만족스럽게 달성해줬던 것 같아요.


번역본에 크게 의존하게 됨.

 영어로 녹음된 강의지만, 별도로 한글 자막과 스크립트를 제공해서 학습하는데 큰 이질감이 들지는 않았어요. 다만 번역된 내용이 완벽하고 자연스럽게 이어지지 않았던 순간들이 있어서 조금 아쉬웠어요.




강의 총평

 도커만으로는 감당할 수 없었던 수 많은 컨테이너의 관리 비용을 절감하기 위해 쿠버네티스를 통한 컨테이너 오케스트레이션의 필요성을 상기시켜주었다고 생각이 들어요. 게다가 쿠버네티스가 도커의 대체제가 아니며, 단지 컨테이너화된 애플리케이션을 관리하고 실행하기 위한 특정 부가기능이 포함된 docker-compose일 뿐이라고 담백하고 솔직하게 언급하는 것에서 깊게 공감할 수 있었어요.

 이 밖에도, Pod간의 내부 커뮤니케이션 원리에 대해서 소개하는 쿠버네티스 리소스의 핵심을 파고드는 내용이 있는가 하면, AWS EKS를 통해 클러스터를 배포하는 등 클라우드 프로바이더를 통해 쿠버네티스 클러스터를 직접 구축해보고 개발한 애플리케이션을 배포해보는 등의 실습 자료 구성이 포함되어 있어 커리큘럼의 완성도는 충분하다고 느껴졌어요.


이런 분들께 추천하고 싶어요.

  • 도커와 함께 쿠버네티스까지 핵심 요소 위주로 살펴보며 학습하고 싶었던 개발자 분에게
  • 많은 클라우드 프로바이더 중 AWS EKS를 통해 쿠버네티스 클러스터를 배포하고 싶었던 개발자 분에게




🙏 마지막으로 알려요!
이번 글은 글또와 유데미에서 후원을 받아 작성되었음을 다시 한번 알립니다.
귀한 강의를 제공해주신 글또 및 유데미 관계자분들에게도 감사를 전합니다!

참고자료

profile
찍어 먹기보단 부어 먹기를 좋아하는 개발자

0개의 댓글