개발 이야기/쿠버네티스

쿠버네티스 소개 - 1

석구석구 2021. 5. 25. 00:44

회사에서 쿠버네티스 환경을 경험하면서, 이거 공부해보고 싶다는 매력을 느꼈다. (이유는 없고 단지 모르는 분야라서.. ㅎㅎ)

 

컨테이너 관련 지식이 전무한 상태라, 선행학습으로 도커 관련 책(Docker in practice)을 먼저 읽었다.(3개월 걸렸다... 별로 추천하지 않는다.)

 

직장인의 공부가 늘 그렇듯, 조금씩, 그러나 꾸준히 공부해볼 생각이다.

 

스타트!

 

사내 영상 강의와, 인프라 문서로 선행 학습을 했지만, 쿠버네티스 인 액션 도서를 읽으면서 느낀 내용을 주로 포스팅할 예정이다. 내용 정리도 훌륭하게 되어 있고, 이해도 잘 된다고 느껴, 쿠버네티스를 배워보고 싶은 분들에게 해당 도서를 강력 추천한다.

 

1. 왜 쿠버네티스인가.

 

과거 애플리케이션: 모놀리식 단일 프로세스

  1. 강한 결합.
  2. 작은 부분을 변경하더라도, 전체 재배포가 필요.
  3. 구성요소 간의 경계가 무너지고, 디펜던시가 강해짐.
  4. 전체 시스템의 복잡성이 증가함.
  5. 실행에 소수의 강력한 서버가 필요하며, 수평 확장이 어렵거나 불가능하다.

현재 애플리케이션: 마이크로 서비스

  1. 독립적인 프로세스로 실행된다.
  2. 인터페이스를 통해 다른 마이크로 서비스와 통신한다. (REST API, AMQP, gRPC, RSocket)
  3. 특정 개발 언어에 종속적이지 않아, 각 서비스에 가장 적합한 언어로 구현할 수 있다.
  4. 개별적으로 개발, 배포가 가능하다.
  5. 확장이 필요한 서비스를 확장하면 된다.
  6. 개별적으로 개발, 배포, 업데이트, 확장이 가능해 비즈니스 요구 사항에 빠르게 반응할 수 있다.

마이크로 서비스의 단점

서비스의 수가 많아짐에 따라, 이들 간의 관계를 관리, 유지하고 배포시스템을 구성하는 것은 복잡하다. 여러 서비스가 서로 통신해야 하고, 배포 시에 하나의 시스템처럼 동작할 수 있어야 한다. 각 서비스의 디펜던시를 관리하는 것은 어려운 일이다.

이러한 배경에서 쿠버네티스가 탄생하게 되었다.

 

개발 <-> 배포 주기를 개발자가 자주적으로 가져갈 수 있고, 운영팀은 애플리케이션 레벨의 운영이 아닌 쿠버네티스 인프라를 감독하고 관리하는 것으로 역할이 확장, 이동된다.

 

쿠버네티스는 분산 애플리케이션을 실행, 운영하는 표준이 되어가고 있다.

 

2. 쿠버네티스의 장점

- 개발환경과 운영 환경의 완벽한 일치

- 데브옵스의 실현

- 개발자가 운영팀을 거치지 않고, 배포가 가능해지는 노옵스의 실현

- 하드웨어를 가상화하여, 관심사의 분리

3. 컨테이너 기술의 이해

- 작은 크기의 수많은 요소마다, 가상 머신 환경을 제공하는 것은 자원, 인적의 낭비다

- 리눅스 컨테이너 기술을 이용해, 격리된 환경에서 프로세스를 실행할 수 있다.

- VM은 시스템 프로세스를 실행해야 하는 오버헤드가 있지만 프로세스는 호스트 OS에서 실행되는 격리된 프로세스에 지나지 않는다.