kubernetes?
만약 단일 서버에서 도커를 사용한다면 쿠버네티스를 사용할 이유가 없다.
단일 서버에서는 간단한 명령어로 컨테이너를 만들기 때문에 사용상 어려울 것이 없다.
반면에 두 개 이상의 서버에서 도커 데몬을 사용하게 된다면 혹은 그 이상의 서버에서 도커를 사용하게 되면 어떤 시스템에 어떻게 컨테이너를 생성할 것인가 생각을 해야한다.
이럴때는 idle상태인 서버를 선택하여 해당 서버에 컨테이너를 생성하여 운용을 해야 한다.
하지만 그것을 일일이 각 서버에 접근하여 확인하는 것은 정말 비효율적이다.
그럴때 사용하는 것이 쿠버네티스와 같은 오케스트레이션 툴이다.
kubernetes 목적
다중 도커 서버를 하나의 Pool로 구성
쿠버네티스는 다중 서버의 도커 데몬에 연결하여 사용하는데, 사용자는 사용하는 서버에 서버가 몇 개인지 도커 컨테이너가 몇개 실행중인지 알 필요가 없다.
쿠버네티스 마스터에게 사용자가 필요한 컨테이너를 어떤 목저에 맞는 이미지로 몇개 만들지만 명령 하면 된다.
다중 서버에 분산되어 컨테이너 생성
두 개의 노드에 3개의 컨테이너를 생성하게 되면 쿠버네티스에서 알아서 컨테이너를 A서버와 B서버에게 할당하게 된다.
idle 서버를 직접 찾을 필요가 없게 되는 것이다.
A서버 B서버와의 컨테이너 통신
각 서버 컨테이너는 각각의 private ip가 존재하는데, A서버와 B서버에 있는 컨테이너 간의 통신을 kube-proxy등을 통해 통신이 가능하다.
컨테이너 재생성
단일 서버에서 도커 컨테이너를 생성하다 운영하다 보면 가끔은 서버가 다운되거나 컨테이너가 fail이 되어 exit 상태로 빠져나가는 경우가 생긴다.
쿠버네티스는 이 상황을 방지하여 동일한 컨테이너를 생성하고 서비스를 지속적으로 제공한다.
로드 밸런서
예를 들어 쿠버네티스로 생성된 웹사이트에 3개의 컨테이너가 동작하고 있는데 그 웹사이트의 public ip로 사용자가 접근할 때마다 순서대로 접근할 수 있도록 라운드 로빈 형태의 로드 밸런싱이 제공된다.
kubernetes 용어
- master
- 마스터 노드이다. 다중 도커데몬을 관리하는 일을한다.
- worker
- 도커가 설치되어 있으며 실제 컨테이너들이 생성되어 일하는 노드이다. 예전에는 minion이라는 이름을 가지기도 했다. 마스터의 관리를 받는다.
- pod
- 쿠버네티스의 기본 단위이다. 컨테이너 혹은 컨테이너의 묶음이라고 불리는 pod는 간단하게 컨테이너로 알고 있어도 된다.
- rc
- rc는 replication controller의 약자로 pod를 자동으로 생성 복제해주는 컨트롤러이다. 복제 개수 설정을 3으로 하게 되면 3개의 pod가 서비스상에 계속 활성화 상태가 된다.
- service
- pod의 그룹을 식별하는 라벨이라는 기준에 따라 pod들을 하나의 서비스로 외부에서 접근할 수 있도록 해준다.
- yaml
- 쿠버네티스에서 sevice, rc, pod등 기능을 설명한 데이터 형식 코드이다.
kubernetes 주요 도구
- kubeadm: init(join), 초기화(Bootstrap)
- kubernetes 구성과 초기화 그리고 노드 확장할 때 외에는 사용하지 않지만 중요한 요소이다.
- kubectl: cmd작업 수행, k8s object 생성, 관리
- k8s란 kubernetes를 간단하게 부르기 위한 줄임말이라고 보면 되는데, k와 s사이의 8개의 알파벳을 빼서 부르겠다 하여 k8s라고 지칭한다.
kubernetes components
Master Node
쿠버네티스의 주요 컨트롤 유닛으로서 woker nodes를 관리하는 주체인데, 클러스터에 관한 전반적인 결정을 하고 이벤트를 감지 및 반응하는 역할을 한다.
Worker Node
워커노드는 할당된 task를 요청대로 수행하는 시스템인데, 컨테이너들간의 네트워크 등 서비스에 필요한 전반적인 일을 마스터 노드와 통신하며 수행한다.
- Kubectl
- 마스터 노드와 통신하는 명령어로서 쿠버네티스 API를 사용해서 마스터노드와 상호작용을 한다.
- API Server
- REST-API 요청을 처리하고 쿠버네시트 클러스터를 구성하는 각 컴포넌트들과 통신을 담당한다.
- Scheduler
- 노드들의 리소스 상태를 파악하여 pod가 배치될 적절한 노드를 선택해주는 역할
- Controller Manager
- 쿠버네티스 클러스터 상태 감시, 설정한 상태로 유지하는 역할
- ETCD
- 오픈소스 키-밸류 저장소로서 쿠버네티스에서는 Master Node의 API Server가 HTTP/JSON API를 이용하여 접근 할 수 있는 구성 데이터를 저장하는 용도로 사용된다.
- Kubelet
- 쿠버네티스 마스터 노드간의 통신을 담당하는 에이전트로서 노드에서 동작하는 pod들을 관리한다.
- Kube-proxy
- 각 노드별로 탑재되며 네트워크 프록시 및 로드밸런서 역할을 해준다.
참고: 쿠버네티스(kubernetes)란 ? 기본 개념부터 알아보자