본문 바로가기

Docker

[특집] container orchestration 쿠버네티스(Kubernetes) ( 쿠베르네테스 )

제목을 잘 써야 검색이 잘되니... 

Kubernetes 는 한국어 발음으로 뭔가 애매한가 보다 "쿠버네티스" 라고 하는데도 있고, "쿠베르네테스" 라고 하는데도 있더라


사실 이 내용을 다루려고 했던건 아닌데 오늘 Kubernetes 

( https://gongjak.me/2016/08/31/meet-up-google-scalr-joint-meet-up/ )

관련된 세미나가 있어서 여기 간다고 신청은 해놨는데...


아무것도 모르고 가는건 예의가 아닌것 같아 수박 겉핥기 식으로라도 

여러 블로그를 뒤적거리며 이해한 내용을 적어보려고 한다.



Kubernetes 란?

 - Kubernetes는 구글에서 공개한 리눅스 컨테이너 관리 시스템입니다. 일반적으로 Docker Orchestrator라고 표현합니다.

 - 아래 설명이 가장 심플하게 잘 된거 같은( 개인적인 의견 ^^;; ) 느낌이라 올려봅니다.

 - 사용자가 볼때는 Kubernetes Cluster 안에 보면 여러개의 노드 그리고 그 노드 안에는 여러개의 Docker Containers ( 여기선 Pod 이라고 부름! ) 이 돌고 있습니다. 이게 Node 가 여러대이고 또 돌아가는 Container 가 여러개일때 어떻게 관리 할까요?? 그걸 해주는 것이 바로 Kubernetes 입니다 :)


 ( 출처 : http://kubernetes.io/docs/hellonode/ )




Why Kubernetes?

 Single Machine 에서 Docker 를 운영할 경우 Orchestration을 쓸 필요가 없습니다. Docker client의 command를 사용하여 모든 관리가 가능하기 때문입니다.


 하지만 Docker 를 실제로 운영하는 경우 당연히 Single Machine 에서만 Docker 를 사용할 리가 없죠... 두대 이상의 Host상에서 Docker를 관리해야 할 때 그것을 쉽게해주는 것이 바로 Kubernetes 입니다. 사용자가 요청한 Docker 컨테이너를 어느 Host에 설치해야할까? 어디가 지금 Resource 가 여유롭지? 어디 서버가 죽었지? 살았지? 하는 등등의 고민을 쉽게 해결해주는 일들을 합니다. 


 물론 이러한 프로젝트는 Docker Swarm, Mesus 등 여러가지가 존재합니다. 제가 언뜻 보기엔 Docker 공식 홈페이지에서는 Docker swarm 을 밀고 있는듯 하네요~




용어 설명

클러스터(cluster)

 - 어플리케이션 컨테이너들이 배치되고 실행되는 컴퓨팅 자원

파드(pod)

 - 어플리케이션 실행에 필요한 도커 컨테이너들의 집합

 - 생명주기를 같이 하는 컨테이너들의 그룹

 - Kubernetes를 통한 배포(deploy) 및 실행의 최소 단위

리플리케이션(replication) 컨트롤러

 - pod들의 라이프사이클 관리자

 - 사용자의 선언(JSON 파일)에 따라 Pod 숫자(replica 숫자)를 관리

 - Pod들의 health status를 체크

서비스(service)

 - 관련 pod 집합을 대표하는 단일한/안정적인 이름 (IP Addr, ...)

 - 로드밸런서

레이블(label)

 - pod들의 그룹핑/조직화를 위해 관리하는 key-value pair/메타데이터




특징

Multiple Docker Pool

Interface사용자는 Docker Daemon의 대수를 알 필요가 없고, “N개의 Container가 필요하니 A이미지로 생성해줄래?”라는 명령만 내리면 Kubernetes가 Multiple Docker Daemon에 알아서 Container를 생성해줍니다.


다른 서버 Container와의 Interface

Docker Container는 Docker Daemon이 있는 Host내의 Private IP를 가지고 있는데, A 호스트의 Container와 B 호스트의 Container가 서로 통신을 하기가 어렵습니다.

위의 문제점을 Kube-proxy, flanneId의 sub tool로 가능하게 해줍니다.


Container fail 처리

Container가 fail 상태일 경우, 동일한 Container를 생성해서 지속적인 서비스가 가능하게 합니다.


Load Balance

Round-robin 형태의 로드밸런싱을 제공하여 Cluster로 묶인 Container에 접근이 가능하게 해줍니다.

출처 : https://giljae.com/kubernetes%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80-c836675c5c7#.lqtsncue7 



Kubernetes에 대해서 간략하게 알아보았습니다. 아마 실제 사용할만한 일이 생긴다면 재밌을것 같네요 :) 세미나 가기전에 가볍게 정리한거라 여러 블로그들 참조해서 작성하느라 내용이 자세하지 않은점, 부족한 점 양해 부탁드려요.. ㅋㅋ ( 끄적끄적... =_= )