기술 단어장/Kubernetes

[네트워크] 쿠버네티스(Kubernetes)는 어디에 사용할까?

MFDO 2021. 7. 8. 03:21

 

 

 

 

컨테이너의 지휘자


>> 쿠버네티스(Kubernetes)는 왜 필요할까?

도커(Docker)는 서로 격리된 컨테이너들을 실행하고 관리한다.

하나의 컨테이너를 이용해 모든 작업이 수행된다면 컨테이너 관리에 한해서는 신경쓸 것이 많이 없다.

그런데 여러개의 컨테이너가 수행된다면, 다음과 같이 꽤나 신경 쓰이는 일이 발생한다.

 

 

 case-1 어떻게 하면 애플리케이션을 최적으로 배치하지?

 case-2 1번 노드에 있는 프로그램 하나가 다운됐어! 어쩜좋아!

 case-3 노드 1번이 죽어도 2번이 구동이 잘 되도록, 2개 모두 프로그램을 배치하자!

 case-4 이 테스트는 10개로 확장을 하고, 저 테스트는 2개로 축소를 해야겠어!

...

 

 

위와 같은 상황에 올바르게 동작을 "지휘(Orchestration)" 해줄 수 있는 프로그램이 있다면 편할 것이다.

이 때 도커 컨테이너를 쉽고 빠르게 배포/확장/관리하는 역할 즉,

컨테이너를 지휘하는 일(Container Orchestration)의 자동화를 지원하는 것중 하나가 쿠버네티스다.

 

 

 

>> 쿠버네티스의 특징

 1. 워크로드의 분리

쿠버네티스는 컨테이너를 *파드내에 배치하고 노드 에서 실행함으로 워크로드를 구동한다.

이 때 노드는 *클러스터에 따라 가상 또는 물리적 머신일 수 있는데,

각 노드는 컨트롤 플레인에 의해 관리되며 파드를 실행하는 데 필요한 서비스를 가진다.

 

  1.  쿠버네티스는 마스터라는 모든 지휘를 하는 노드가 있다.
  2.  마스터는 워커노드라는 노동자에게 테스크를 할당한다.
  3.  컨테이너들을 '파드'라는 단위로 분리시켜 관리된다.
  4.  워커노드는 마스터가 내린 테스크에 따라 파드들을 관리한다.
  5.  컨테이너들은 분리되어 있음에도, 통해 서로간의 통신이 원활하게 이루어진다.

 

 * 파드(Pod) : 실행 중인 컨테이너 집합

 * 클러스터(Cluster) : 컨테이너화된 애플리케이션 실행을 위한 노드 머신. (쿠버네티스 실행==클러스터 실행)

 * 컨트롤 플레인 : 컨테이너의 라이프사이클을 정의, 배포, 관리하기 위한 API와 인터페이스들을 노출하는 컨테이너 오케스트레이션 레이어

 

 

 

 

 2. 어디서나 실행 가능

온프레미스로 실행될 수 있으며, 이를 AKS, EKS, GKE와 같은 퍼블릭 클라우드로 가져가서

별도 설정없이 그대로 이용이 가능하다는 장점이 있다.

 

 - 온프레미스 : 자체적으로 보유한 전산실 서버에 직접 설치해 운영하는 방식

 - 퍼블릭 클라우드 : 타사 공급 업체가 소유하고 관리하는 하드웨어에서 개발된 가상 리소스 풀

 

 

 

 3. API

 쿠버네티스의 핵심적인 특징이다. 외부/내부 요청을 처리하게 되는데,
 이를 통해 노드, 오브젝트, 파드 등등을 관리하게된다.

 이렇게 다양한 동작을 돕기 때문에 쿠버네티스를 OS라고 하기도 한다.

 

ex) -> 선언적 API : 나 컨테이너 5개 돌릴거야!

    -> 즉각적으로 최적으로 5개를 돌림 : 1번 노드에 1개 / 2번 노드에 2개 / 3번 노드에 2개 구동

    -> 변칙적인 상황 대응(2번 노드가 죽음) : 1번 노드에 2개 / 3번 노드에 3개 구동 

 

 

 

 

>> 쿠버네티스의 동작 Flow

  1. 개발자가 도커를 통해 컨테이너를 빌드한다.
  2. 만들어진 컨테이너를 클라우드에 업로드(Push)한다.

  3. yaml파일 혹은 CLI를 통해 쿠버네티스에 1에서 개발한 컨테이너 실행을 명령한다.
  4. 적절한 마스터 노드(Control Plane)의 REST API 서버에 쿠버네티스 요청을 전송한다.

  5. 스케쥴러(Scheduler)에서 컨테이너 동작에 최적인 노드를 선택한다.
  6. 선택된 최적의 노드의 kubelt에게 명령을 전송한다.

  7. Kubelet는 도커에게 컨테이너를 실행하도록 명령한다.
  8. 도커는 클라우드에서 파일을 찾아와 컨테이너를 동작시킨다.
  9. 쿠버네티스는 실행된 컨테이너를 파드(Pod)단위로 분리해 관리를 시작한다.

 

컴포넌트 관련 보강 필요

 

 

>> 추천 참고 리스트

- 공식문서 : https://kubernetes.io/ko/docs/home/

- 상세 정리가 되어있음 : https://subicura.com/2019/05/19/kubernetes-basic-1.html

- 기능 정리가 쉽게 됨 : https://www.redhat.com/ko/topics/containers/what-is-kubernetes

- 동작원리 : https://www.youtube.com/watch?v=Iue9TC13vPQ

 

 

 

>> 다음엔 뭘 하면 좋을까?

 자동화에 자동화에 자동화에 자동화... 언제까지 자동화 하는 지 궁금한 나!

 오늘은 컨테이너 관리를 자동화 했다! 그 다음은 CI/CD를 자동화 해볼까?

 젠킨스, Travis CI, Github Actions, aws codepipeline 등을 공부해보자!