[k8s] 쿠버네티스 개요
1. 쿠버네티스 (Kubernetes)란?
마이크로 아키텍쳐 형태로 서비스를 제공하면 수많은 컨테이너들이 작동하게 되는데, 이를 하나하나 관리하기는 불가능하다. 따라서 컨테이너 어플리케이션을 운영/배포/관리해주는 컨테이너 오케스트레이션 이 사용되며, 대표적인 것이 쿠버네티스 (Kubernetes, k8s) 이다.
연결된 여러 노드 중 사용 가능한 리소스에 따라 최적의 노드를 골라 컨테이너를 실행해 하드웨어 활용도가 높아진다. 지속적으로 상태를 모니터링하고 장애가 발생하면 다른 노드에서 자동으로 실행된다. 또한 사용되는 리소스에 따라 오토 스케일링이 가능하다.
이 외에도 관리/운영면에서 수많은 편의를 제공하기 때문에 도커를 단독적으로 사용하지 않고 k8s와 함께 사용한다.
2. 쿠버네티스 구성
1) 노드 (Node)
마스터와 워커라는 두 종류의 노드가 있다.
마스터 노드는 워커노드들의 상태를 제어하고 관리한다. 워커 노드는 마스터의 명령을 받아 파드 (Pod)를 실행한다.
하나의 마스터 노드 아래 여러 개의 워커 노드가 제어된다.
마스터 노드에서는 etcd, kube-apiserver, kube-scheduler, kube-controller-manager, kubelet, kube-proxy, docker 등의 컴포넌트가 실행된다.
워커 노드에서는 kubelet, kube-proxy , docker 등의 컴포넌트가 실행된다.
2) 주요 컴포넌트
etcd
쿠버네티스에 관한 모든 구성정보와 상태를 key:value 형태로 저장하는 DB역할을 한다.
kube-apiserver
쿠버네티스 API를 사용하고 요청이 유효한지 확인한다. kubectl 명령어를 실행시키는 역할을 한다고 보면 된다.
kube-scheduler
여러 노드 중 어디에 파드를 실행할 지 선정한다.
kube-controller-manager
파드들은 컨트롤러에 의해 관리되는데, 이 컨트롤러를 관리하는 역할을 한다.
kubelet
각 노드에서 실행되는 에이전트이다. 정의된 PodSpec을 받아서 컨테이너가 해당 PodSpec에 따라 정상적으로 동작하도록 관리한다.
kube-proxy
각 노드에서 실행되는 가상 네트워크를 설정하고 관리하여 파드간의 통신이 가능하도록 한다.
3) 네임스페이스
동일한 클러스터를 여러 논리적 가상 클러스터로 만들어준다.
예를 들어, 2개의 노드를 사용하는 클러스터가 3개 필요하다면, 2개의 노드를 사용하는 클러스터를 1개 생성 후 3개의 네임스페이스를 생성하여 사용할 수 있다. 각 클러스터들은 서로 격리되어 있다.
4) 파드 (Pod)
쿠버네티스 어플리케이션의 기본 실행 단위이다. 보통 하나의 컨테이너로 구성되며, 필요에 따라서는 여러개의 컨테이너가 하나의 파드를 구성할 수 있다.
5) 파드 생성 절차
사용자가 kubectl 명령어로 파드를 생성한다고 요청하면 이를 apiserver가 받아 내용을 etcd에 저장한다. 이 때, 아직 어느 노드에 스케쥴링 될지 정해지지 않았으므로 노드 정보는 비워져있다. apiserver는 scheduler에게 어느 노드에 파드를 실행할 지 물어보고, 결과값을 etcd에 기록한다. apiserver는 해당 노드에 있는 kubelet을 호출하고, kubelet은 docker api를 이용해 컨테이너를 생성한다. kubelet은 컨테이너의 상태를 apiserver에게 전송하고, apiserver는 etcd에 상태를 기록하고 이를 유지한다.
댓글남기기