Kubernetes( 쿠버네티즈 이하 짧게 쿠베라고 호칭하겠음 )를 처음에 배우기 시작하게 된건 비용절감이었다.
docker를 쓰기 시작한 이후 docker가 많아져서 관리가 매우 불편해지는 상황이 왔고, (당시 내가 알기로는 ) 구글에서 gcp 위에 한개의 머신에 한개의 docker 컨테이너를 올려주는 서비스는 있었지만, 하나의 서버에 여러개의 docker 컨테이너를 올려주는 서비스가 없어서 아쉬워 하던 찰나에 누군가 쿠베를 알려주어 알게 되었다. 사실, 개별적으로 관리하면 상관없는데, 쿠베와 같은 서비스를 이용하고 싶었던 이유는 "비용 절감"이었다. 각각의 docker 컨테이너들이 항상 풀로드가 걸리는것도 아니고, 많은 메모리를 사용하는것도 아닌데, 저렴한 비용으로 많은 docker 컨테이너를 돌리고 싶었던것.
더구나 우리 회사는 챗봇이라는 서비스를 하는데, 챗봇의 특성상 항상 균일하게 서버에 로드가 걸리지 않는다. 쿠베를 알고 난뒤, 이건 정말 나를 위한 서비스구나..하는 생각을 하게 되었다.
쿠베를 알기전 하나의 서버에서 도커를 운용하기 위해서 자체적으로 shell script와 node를 이용해서 관리시스템을 만들었었다.
하나의 명령어로 서버의 도커들을 업데이트하고 최신 버전으로 유지하고 등등을 하기 위한, 그러나 쿠베를 알고 보니 참 부질없는 짓이었..
쿠버네티즈는 그리스어로 "키잡이"를 의미한다.
구글이 Go 언어를 이용해 만들었으며 2014년 중반쯤 발표된 시스템이다.
구글이 처음 만들었지만 오픈소스형태로 기부되었고, 구글에서는 GKE ( https://cloud.google.com/kubernetes-engine/?hl=ko )라는 이름으로 서비스 중이고, AWS에서는 EKS ( https://aws.amazon.com/ko/eks/ ) 라는 이름의 서비스. Azure 에서는 그냥 원래의 이름대로 ( https://azure.microsoft.com/ko-kr/services/container-service/kubernetes/ ) 서비스가 되고 있다.
( 링크의 사이트를 한번씩 방문해보는것도 좋을듯 )
쿠베의 장점과 특징은 여러가지가 있지만, 간략히 말하자면 앞에서 말한듯이 "여러대의 서버가 돌아가는 시스템에서 , 각각의 도커 컨테이너들이 각각의 서버에서 하나의 서비스로 돌아갈 수 있도록 유기적으로 연결해주는것"이다.
오케스트레이션이라는 용어를 사용하는데, 용어는 인터넷에서 찾음 될꺼고, 예를들자면 이런것이다.
우선 서버를 3대 세팅한다. 3대의 서버에서는 nginx 를 이용하는 컨테이너가 3개가 돌아가고, 각각의 nginx는 그 뒤에 여러개의 다양한 node.js 컨테이너들을 다양하게 구동한다고 치자. 각각의 node.js 컨테이너들은 각각 다른 url을 라우팅한다.
이런 경우 단일 서버에서 운영하는것도 쉽지 않은데, 심지어 서버가 여러대가 되면 더욱 답이 없다.
이러한 문제를 쿠베가 해결해준다. 서버 3대를 각각 개별 node 라고 부른다. ( node.js의 node 가 아니다! )
각각의 nginx 컨테이너를 하나로 묶어 하나의 pod 라고 부른다. 개별적인 pod에는 여러개의 컨테이너가 동시에 돌아간다.
pod안의 컨테이너들은 node에 분산되어 돌아가게 된다.
즉, 하나의 시스템에는 node라고 부르는 물리적인 서버 ( 물론 클라우드 일수도 있다. ) 가 있고, 각각의 node에는 pod라고 부르는 가상화 된 컨테이너 묶음들이 운영되게 된다.
이러한 시스템을 활용하면 GCP의 경우 선점형( preemptible ) 서버를 활용해 비용을 줄 일 수도 있다.( 현재는 베타임 )
아직은 초짜인 상황이라.. 아직은 잘 모르는게 많지만, 공부를 해나가면서 포스팅을 더 해야 할듯.
이글은 여기까지..