[Kubernetes] Overview
Kubernetes가 무엇이고 어떻게 구성되었는지 개략적으로 알아보려고 한다.
Kubernetes (k8s)
Kubernetes이 무엇인지 한 줄로 설명하자면 컨테이너화(Containerzied)된 작업 및 서비스*를 관리하는 플랫폼이다.
* 해당 의미가 애매 할 수 있겠지만 Docker로 구성된 각 컨테이너를 관리한다고 생각하면 조금 이해가 편하다.
한 번 생각해보면 컨테이너가 가진 장점을 최대한 활용하고 각 컨테이너의 관리 또한 사용자에게 맡기지 않고 전체 컨테이너를 Tool로 관리하는 것이다.
그래서 k8s는 실제로 computing, networking, stroage 등 컨테이너 중심으로 리소스를 제어한다.
추가적으로 이 플랫폼은 구글이 만든 오픈 소스 프로젝트로 다양한 환경에서 동작한다. (심시어 Raspberry Pi 에서도 동작이 가능하다.)
Cluster
그림 2. K8s cluster architecture
그림 2을 보면 확인 할 수 있듯이 해당 그림이 k8s의 클러스터 내부 아키텍처이다. 즉, 클러스터는 k8s의 여러 리소스(스토리지, 네트워크 등)을 관리하기 위한 논리적인 묶음이다. 이를 통해 k8s는 다양한 작업을 할 수 있으며 더 나아가 여러 개의 클러스터를 사용하여 시스템을 구축 할 수도 있다.
그럼 클러스터가 구성하는 내부 구성 요소들을 살펴보도록 하자.
Master
마스터는 그림 1의 왼쪽에서 확인 할 수 있는 부분으로 클러스터의 제어 영역(Control Plane)에 해당한다. 때문에 스케줄링, 이벤트 탐지 등등 모든 부분을 관리 할 수 있다. 그리고 마스터는 아래와 같이 4가지 Component로 구성되어 있다.
1) kube-apiserver: k8s의 가장 앞 단에 위치하여 kubectl의 호출을 받는 부분이다. (API 서버 역할 수행)
2) etcd : 고가용성 분산 key-value 저장소이다. (모든 클러스터 데이터 백업 용도)
3) kube-controller-manager : k8s에서 사용하는 controller에는 4가지 종류가 있다.
- Node Controller : Node가 장애(go down)가 발생 할 때 알려준다.
- Replication Controller : Pods의 갯수를 유지한다.
- Endpoints Controller : Endpoint 객체를 만든다.
- Service Account & Token Controller : 새로운 네임스페이스에 기본 계정과 액세스 토큰을 생성한다.
4) kube-scheduler : Pods를 모니터링하거나 실행시키는 스케줄러이다.
이렇듯 마스터는 k8s를 클러스터를 운영하는데 가장 큰 역할을 담당한다. 최근에 클라우드 서비스에 등장하는 EKS와 같은 관리형 서비스(Managed Service)는 마스터에 신경쓸 필요는 없으나 비관리형 서비스(Non-Managed Service)에는 마스터를 3대 두는 것이 일반적이다.
Node
실제 어플리케이션이 동작하기 위한 환경을 제공하는 부분으로 내부적으로 Pods가 실행 될 수 있게 한다. 노드는 2가지 Component로 구성되어 있다.
1) kubelet : 노드를 실행 시키는 agent로 각 컨테이너들이 Pod에서 실행될 수 있도록 관리한다. (Master에게 제어를 받는 부분)
2) kube-proxy : 일반적인 Proxy와 같다. (Node의 네트워크 Proxy)
kubelet 외에도 Docker 또는 rkt와 같은 도구도 사용 할 수 있다. 또한 k8s의 클러스터 상에서 노드의 기본 구성 요소는 최소 3개이다. 하지만 그림 2는 한 개만 등록되어 있는데 로컬 환경에서는 k8s를 운영할 때는 기본적으로 1개의 노드만 등록한다. (로컬 환경에서는 하나의 노드에서 마스터 역할을 같이 한다.)
그림 2. Node of k8s in local environment
Reference