그림(참고2)

Untitled

쿠버네티스는 여러 대의 물리서버(참고1, 참고5)에 걸쳐 퍼진 컨테이너들(from1:쿠버네티스의 등장배경)이 의도한 상태(desired state)를 유지하도록 만드는 도구이다(참고2). 여기서 말하는 의도된 상태가 무엇인지는 잠시 후에 이해하도록 하자.

그림(참고3)

쿠버네티스는 여러 개의 물리서버 어디에든 컨테이너가 실행되도록 돕기때문에 하나의 컴퓨터처럼 느껴진다.

쿠버네티스는 여러 개의 물리서버 어디에든 컨테이너가 실행되도록 돕기때문에 하나의 컴퓨터처럼 느껴진다.

컨테이너를 어느 서버에나 띄울 수 있도록 돕는 하나의 추상화 레이어처럼 작동하는 덕분에 컨테이너를 실행하는 서버가 한 개의 물리 서버에만 머물러 있을 필요가 없다는 점이 특히 재미있다(참고3). 그래서 가성비 좋은 라즈베리파이를 잔뜩 연결해두고 쿠버네티스로 묶어 슈퍼컴퓨터 클러스터를 만드는 변태들도 있다. 물론 클라우드 환경에서도 여러 개의 컴퓨팅 인스턴스를 묶어 하나의 거대한 클러스터처럼 사용할 수 있다(참고4).

컴퓨팅 인스턴스를 하나의 노드(Node)라고 한다. 만약 나의 노트북 한 대에서 쿠버네티스를 구동한다면 노드는 1개이다. 만약 AWS EC2 4개를 구매하고 이들 각각에 쿠버네티스를 설치하여 묶는다면 노드는 4개이다. 실습을 위해 로컬 컴퓨터에 가상환경 2개를 동시에 구동하고 이들 각각에 쿠버네티스를 설치하여 묶는다면 노드는 2개이다. 라즈베리파이4를 10개 구매하고 이들 각각에 VM을 2개씩 설치한 뒤 각각의 가상환경에 쿠버네티스를 설치하여 묶는다면 노드는 20개이다. 이 노드들을 쿠버네티스라는 소프트웨어를 이용해 묶은 것을 쿠버네티스 클러스터라고 부른다. 굉장히 직관적인 이름이다. 클러스터는 컨트롤 플레인(마스터)이 컨트롤한다.

컨트롤 플레인에서 내려오는 명령에 맞게 일사분란히 움직인 노드의 파드들

컨트롤 플레인에서 내려오는 명령에 맞게 일사분란히 움직인 노드의 파드들

함선의 핸들이라고도 할 수 있는 키를 메인로고로 삼는 쿠버네티스의 이름에 걸맞게 이순신 장군의 함선에 비유를 해 보도록 하자(from2). 12척에 이르는 함선들의 클러스터에서 이순신 장군(컨트롤 플레인)은 함선(노드)들을 적절한 목적에 맞게 활용한다. 당연히 각 배들에도 각 배를 통솔하는 장군들이 있을테다. 이순신장군은 이 장군들과만 소통한다. 이 장군들에게 붙은 별명은 큐블렛(Kublet)이다.

누군가는 눈치채었겠지만 지금 이 논의에 컨테이너라는 개념이 아직 등장하지 않았다. 컨테이너 개념을 설명하기 위해서는 포드(Pod)라는 개념이 필요하다. 흔히들 포드는 쿠버네티스 환경에서의 최소단위라고 부른다. 이를 이해하기 위해 이순신 장군과 함선의 이야기를 다시 해 보자. 함선에는 사람들이 타고 있다. 함선은 수십 개의 거대한 대포를 붙이고 있다. 이 대포를 쏘려면 포를 고정하는 사람 하나, 포에 불을 지피는 사람 하나, 포에 탄환을 넣는 사람 하나, 총 세 명이 필요하다. 포를 쏘기 위한 최소 구성원 세명 중 한명이라도 없으면 포를 발사시킬 수 없을 것이다. 사람 각각을 컨테이너라고 한다면, 컨테이너 여럿이 묶여 포를 발사하는 기능을 수행할 수 있는 최소 단위가 포드이다. 이 세 가지의 역할을 하는 사람의 집합은 포드라는 단위로 묶어 다룬다면, 이들이 제각기 흩어져 다른 함선(워커 노드)에 배정되는 불상사를 막을 수 있다.

그냥 용어만 냅다 들여다보는 것은 하등 도움이 안 되지만 이제 쿠버네티스 클러스터의 구성 요소들에 대해 더욱 재미있게 이해할 수 있다. 이를 쿠버네티스 컴포넌트(참고11)라고 한다. 쿠버네티스 실행에 필수적인 컴포넌트를 제외한 것들은 애드온(참고13)이라고 부른다. 이들 중 일부는 쿠버네티스 설치 시 기본적으로 설치된다(참고12).

이쯤이 되면 쿠버네티스의 각 컴포넌트들이 무섭거나 외워야 할 것으로 느껴지지 않고, 각 요소들이 어떤 역할을 가지고 임무를 수행하는 조직체의 일원들처럼 느껴질 것이다. 이런 내막을 이해하고 나면, 저마다의 명확한 역할을 가지고 쿠버네티스 클러스터에서 일어나는 다양한 일들을 제어하는 것이 컴포넌트라는 말이 이해되기 시작한다.


컨트롤 플레인과 컨트롤러에는 어떤 차이가 있는가?


parse me : 언젠가 이 글에 쓰이면 좋을 것 같은 재료들.

  1. 1:50, desired state 라는 개념은 쿠버네티스의 근간을 이룬다. 처음에 상태 체크를 한다. 예를 들어, 컨테이너 하나가 떠 있어야 하는데 떠 있는 것이 맞는지 상태 체크를 하는 것이다. 차이점이 발견되면(Diff) 뭔가 조치를 취해야 할 것이다. 이를 Act 라고 한다. 쿠버네티스는 내부적으로 이것을 계속 반복하는 루프를 돈다.
  2. 3:50, 아까 전에는, 컨테이너 하나가 떠 있었는지 아닌지만 체크했었다. 그것만 체크하는 전문가를 뽑을 수 있다. 이를 ‘컨트롤러’ 라고 표현해 보자. 이번에는 여러 대의 물리서버가 있고, 컨테이너를 적절한 서버에 띄우기 위해 어떤 서버에 여유가 있는지를 확인하는 전문가가 필요할 수도 있다. 단순히 컨테이너 말고 네트워크를 체크하는 전문가가 필요할수도 있다. 또 이들을 ‘컨트롤러’ 라는 이름으로 뽑을 수 있는 것이다. Desired state 가 정말 많은 것이다.
  3. 5:30, Desired state 를 체크하거나 어떤 명령을 실행하는 부분을 ‘마스터’ 라고 하고, 컨테이너가 실행되는 영역을 노드라고 부른다. 컨트롤러들 중심에서 교통 정리를 하는 역할은 ‘api server’ 현재 상태와 desired state 를 저장하는 데이터베이스를 엣씨디(etcd)라고 한다.
  4. 10:45, now optionally … I’m going to set up another server again and that server I’m going to install rancher. Now just to avoid confusion, rancher labs produced k3s rancher. Rancher labs also produces an open source application called rancher. Rancher is kind of amazing it’s a gui. A beautiful gui that gives us a ton of tools to manage our kubernetes cluster.

이제 의도된 상태가 무엇인지 이해해볼 차례이다. … 노를 젓는 사람이 필요할수도 있잖아.

3:50, 아까 전에는, 컨테이너 하나가 떠 있었는지 아닌지만 체크했었다. 그것만 체크하는 전문가를 뽑을 수 있다. 이를 ‘컨트롤러’ 라고 표현해 보자. 이번에는 여러 대의 물리서버가 있고, 컨테이너를 적절한 서버에 띄우기 위해 어떤 서버에 여유가 있는지를 확인하는 전문가가 필요할 수도 있다. 단순히 컨테이너 말고 네트워크를 체크하는 전문가가 필요할수도 있다. 또 이들을 ‘컨트롤러’ 라는 이름으로 뽑을 수 있는 것이다. Desired state 가 정말 많은 것이다.

  1. 10:45, now optionally … I’m going to set up another server again and that server I’m going to install rancher. Now just to avoid confusion, rancher labs produced k3s rancher. Rancher labs also produces an open source application called rancher. Rancher is kind of amazing it’s a gui. A beautiful gui that gives us a ton of tools to manage our kubernetes cluster.