[네트워크] 쿠버네티스(Kubernetes)는 어디에 사용할까?
컨테이너의 지휘자
>> 쿠버네티스(Kubernetes)는 왜 필요할까?
도커(Docker)는 서로 격리된 컨테이너들을 실행하고 관리한다.
하나의 컨테이너를 이용해 모든 작업이 수행된다면 컨테이너 관리에 한해서는 신경쓸 것이 많이 없다.
그런데 여러개의 컨테이너가 수행된다면, 다음과 같이 꽤나 신경 쓰이는 일이 발생한다.
case-1 어떻게 하면 애플리케이션을 최적으로 배치하지?
case-2 1번 노드에 있는 프로그램 하나가 다운됐어! 어쩜좋아!
case-3 노드 1번이 죽어도 2번이 구동이 잘 되도록, 2개 모두 프로그램을 배치하자!
case-4 이 테스트는 10개로 확장을 하고, 저 테스트는 2개로 축소를 해야겠어!
...
위와 같은 상황에 올바르게 동작을 "지휘(Orchestration)" 해줄 수 있는 프로그램이 있다면 편할 것이다.
이 때 도커 컨테이너를 쉽고 빠르게 배포/확장/관리하는 역할 즉,
컨테이너를 지휘하는 일(Container Orchestration)의 자동화를 지원하는 것중 하나가 쿠버네티스다.
>> 쿠버네티스의 특징
1. 워크로드의 분리
쿠버네티스는 컨테이너를 *파드내에 배치하고 노드 에서 실행함으로 워크로드를 구동한다.
이 때 노드는 *클러스터에 따라 가상 또는 물리적 머신일 수 있는데,
각 노드는 컨트롤 플레인에 의해 관리되며 파드를 실행하는 데 필요한 서비스를 가진다.
- 쿠버네티스는 마스터라는 모든 지휘를 하는 노드가 있다.
- 마스터는 워커노드라는 노동자에게 테스크를 할당한다.
- 컨테이너들을 '파드'라는 단위로 분리시켜 관리된다.
- 워커노드는 마스터가 내린 테스크에 따라 파드들을 관리한다.
- 컨테이너들은 분리되어 있음에도, 통해 서로간의 통신이 원활하게 이루어진다.
* 파드(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
- 개발자가 도커를 통해 컨테이너를 빌드한다.
- 만들어진 컨테이너를 클라우드에 업로드(Push)한다.
- yaml파일 혹은 CLI를 통해 쿠버네티스에 1에서 개발한 컨테이너 실행을 명령한다.
- 적절한 마스터 노드(Control Plane)의 REST API 서버에 쿠버네티스 요청을 전송한다.
- 스케쥴러(Scheduler)에서 컨테이너 동작에 최적인 노드를 선택한다.
- 선택된 최적의 노드의 kubelt에게 명령을 전송한다.
- Kubelet는 도커에게 컨테이너를 실행하도록 명령한다.
- 도커는 클라우드에서 파일을 찾아와 컨테이너를 동작시킨다.
- 쿠버네티스는 실행된 컨테이너를 파드(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 등을 공부해보자!