클라우드 시장의 대세, 쿠버네티스란 무엇인가?
클라우드 시장의 대세, 쿠버네티스란 무엇인가?
Contents
1. DockerNetworking
2. 쿠버네티스
1) 쿠버네티스 구성
2) Why Contatiner orchestration tool?
3) 쿠버네티스 기능
1. DockerNetworking
1) VM vs Container
- 위의 그림의 큰 차이점은 Hypervisor 이다.
- Hypervisor : 실제로 물리 머신이 가지고 있는, VM이 사용할 수 있는 리소스로 변환해주는 레이어
- VM들은 Hypervisor 위에서 실행.
- Container는 하나의 격리된 프로세서 영역으로 실행됨. Image로 부팅되는데, Image 사이즈가 적기 때문에 부팅하는데 빠르다.
2) Docker Networking
- 도커를 설치하면 네트워크는 브릿지모드로 선택.
- 네이버 클라우드 플랫폼에서는 브릿지로 사용되어야 한다.
- 쿠버네티스를 사용하면 docker0 혹은 CNI0라는 리눅스 브릿지가 대체됨.
- 동일 호스트를 사용하면 네트워크 브릿지는 docker0 이다.
- East-West : 동일 호스트에서의 통신
- Linking이라는 컨셉이 있다. =>conatin
- Linking 개념 : Container 호스트 파일을 이용한 도메인을 이용한 통신
- 다수의 호스트에 Container를 스케줄링하여 사용하고 싶을 때 : Overlay Network add-on 도입 필요
- 쿠버네티스 도입과 연관있음
- Opensource를 기반으로 실제로 구축한 내용.
- docker0가 아닌 cni0(Container Network Interface)로 브릿지 생성 (docker0 동일한 역할을 함)
- port 오픈해서 사용하면 된다!
- pod : 쿠버네티스를 담을 수 있는 그릇.
- 서비스 오브젝트를 통해서 외부에 container 오픈. 팟을 외부에 오픈할 수 있도록 그릇을 제공하는 역할
- vm도 아래처럼 구성.
2. 쿠버네티스(Kubernetes)
1) 쿠버네티스 구성
쿠버네티스란?
- 오픈 소스인 컨테이너 오케스트레이션 시스템이다.
- host들을 자동으로 deploy 하거나 scaling 하는 역할
- 즉 한문장으로 정리하자면! 멀티 호스트에서 deployment된 컨테이너들을 자동으로 관리할 수 있는 플랫폼이다.
- 쿠버네티스는 마스터 노드와 Worker 노드로 구분되어 있다.
- 이 클러스터를 stand alone으로 구성할 수 있고, N:N으로도 구성가능하다. 하지만 프로덕트에서 구성할때는 N:N 환경으로 구성한다.
- 마스터 노드 (Master Node)
사용자들의 요청을 처리하는 Front/End가 존재
사전에 어느 노드에 위치시킬 것인지 역할을 하는 스케줄러
클러스터내의 여러 설정값들을 컨트롤 가능
제일 중요한 것은 etcd로 클러스터 전체의 상태값을 저장하는 key-value 저장소. 오픈소스로 쿠버네티스 구성시 etcd에 대한 관리포인트가 크다. etcd를 마스터 내에 둘것인지, 아니면 전용으로 따로 띄울 것인지. 보안 문제 등 관리 포인트가 많다. (네이버 클라우드 플랫폼을 사용하면.. 이런것은 생각하지 않아도 된다.)
- 워커 노드 (Worker Node)
kubelet : 마스터 노드와 연결 고리 역할을 해 줌.
kube-proxy : 컨테이너 팟을 외부와 소통할때 서비스오브젝트를 이용.
- 사용자
kube ctl : 쿠버네티스를 관리할 수 있는 명령어 셋
- 각 노드별 컴포넌트에 대한 설명 ① Master Ndoe
- 각 노드별 컴포넌트에 대한 설명 ② Worker Ndoe
2) Why Container orchestration tool?
단일 호스트에 서비스는 커지고, 컨테이너 갯수도 많아지면서 단일 호스트에 많은 컨테이너를 제공할 수 없게 된다. 멀티 호스트 컨테이너 개념을 통해 스케줄링하여 서비스 구성 필요. 도커로만은 멀티 호스트간의 유기적인 연결은 안된다. 네트워크 범위 자체가 host이다. 이런 한계를 극복하기 위한 오케스트레이션 툴이 쿠버네티스이다.
그래서 쿠버네티스를 사용하면 추가적으로 제공하는 플러그인을 통해 유기적인 통합 스케줄링이 가능하다.
멀티호스트에 컨테이너를 구성하면 어느 호스트에 내 컨테이너를 위치시킬 것이냐?
단일 호스트의 많은 컨테이너를 한번에 넣으면 당연히 성능적인 이슈나 해당 호스트에 이슈가 발생했을때, 장애에 대한 대처가 어렵다. 적절한 스케줄링 알고리즘을 가지고 호스트를 선정하는 것이 필요하다.
그래서 쿠버네티스를 사용하면 호스트 리소스 설정은 당연히 가능.
affinity 설정등 으로 선호하는 호스트에 넣거나, 내가 원하지 않는 호스트에 넣지 않게도 할 수 있다.
쉽게 죽을 수 있는 컨테이너에 대한 장애 복구는 컨테이너 하나가 죽었을때, 다른 서비스를 자동으로 띄운다.
노드가 죽은 경우 노드 안에 있는 컨테이너들을 다른 호스에 띄어준다.
배포 방법은 Rolling update말고도 많은 정책 제공.
대표적인 것이 Rolling update : 신규 팟을 먼저 생성하고 그 후에 올드 팟을 제거하는 방식을 사용하여 서비스에 대한 다운 없이 점진적으로 변경사항을 적용한다.
기존의 도커에서는 재 배포시에 서비스 다운이 불가피 했던 한계를 극복
3) 쿠버네티스 기능
마지막 마치며...
- 쿠버네티스 이해를 위해선 도커에 대한 이해가 필요하다.
- 도커로만 운영했을 때 만났던 한계를 쿠네티스라는 오케스트레이션 툴을 이용하여 해결할 수 있다.
'Programming > Server' 카테고리의 다른 글
[Youtube] 네이버 클라우드 플랫폼은 어디에 컨테이너를 쓸까? 3/3 (0) | 2020.04.21 |
---|---|
[Youtube] 넷플릭스 마이크로 서비스 가이드 3-4 (0) | 2020.04.20 |
[Linux] copy paste 활성화 (0) | 2020.04.20 |