DevOps/Kubernetes

[DevOps] Kubenetes(K8s) 공부 #1 - 기본 개념, pod, node

깜태 2022. 6. 20. 23:57
728x90

오늘은 Kubenetes에 대해서 공부했고, 복습하며 내가 이해한 내용을 적어보려고 한다.

 

쿠버네티스, 도커, 컨테이너란?

쿠버네티스란 컨테이너 오케스트레이션 툴이다.

컨테이너란 호스트 OS에 논리적 구역(컨테이너)를 만들어, 어플리케이션 실행에 필요한 라이브러리 등의 리소스를 한데 모아 서버인 것처럼 실행시킬 수 있도록 만드는 것을 의미한다.

서버 구축에 필요한 자원을 최소한으로 사용할 수 있게 되고,

서버 구축에 필요한 개발 시간이 많이 단축되기 때문에 많이 사용되기 시작했다.

 

도커는 위의 컨테이너를 구축하고 관리할 있도록 이미지라는 단위를 이용해 컨테이너를 생성, 배포할 수 있게 해주는 소프트웨어이다.

 

하지만 컨테이너간 호환이나 컨테이너를 여러 개 관리하는 경우 관리의 어려움이 생겨

컨테이너 간 오케스트레이션(조율)을 원활히 할 수 있도록 나온 소프트웨어 중 하나가 쿠버네티스이다.

 

도커에서는 컨테이너라는 단위로 관리되었다면, 쿠버네티스에서는 컨테이너들을 모아 포드(=팟, 파드, pod)이라는 최소 단위로 관리한다.

그리고 노드(node)라는 더 큰 논리적 단위로 구성하여 컨테이너들을 관리한다.
노드는 kubelet이라는 에이전트가 구성되어 있는데, 정의된 파일에 따라 컨테이너를 실행하고, 스토리지를 마운트한다.
그리고, kube-proxy라는 중계 및 변환하는 프록시를 가지며, 노드의 상태를 정기적으로 감시하여 API 서버에 통지한다.

 

그렇다면 쿠버네티스는 어떻게 컨테이너들을 조율할까?

마스터

쿠버네티스는 큰 개념에서 마스터라는 리소스 관리용 REST API를 가진 컴포넌트가 존재한다.

마스터는 각 컴포넌트들로부터 리소스 정보를 받아 데이터스토어(etcd) 에 저장한다.

다른 컴포넌트는 kubectl 명령어로 마스터를 통하여 etcd의 정보에 액세스할 수 있다.

 

스케쥴러

pod를 어느 노드에 작동시킬지 제어하기 위한 백엔드 컴포넌트로, 노드에 할당되어 있지 않은 포드에 대해 클러스터 상태를 확인하고,
빈 공간의 노드를 찾아 pod를 실행시키는 작업을 진행한다. 

 

컨트롤 매니저

쿠버네티스의 클러스터 상태를 감시하고 유지하는 컴포넌트로, 정의 파일에서 정의된 것과 실제 노드나 컨테이너에서 작동하는 상태를 모아서 관리한다.

 

데이터 스토어(etcd)

분산 KVS로, 데이터를 Key-Value 형으로 관리하여 어떤 포드를 어떻게 배치할지 같은 정보를 갖는다.

 

출처 : https://bcho.tistory.com/1256

만약 쿠버네티스 클러스터를 구축했다고 하면, 그 클러스터는 마스터와 노드들의 집합을 의미한다.

이 때, 마스터가 아닌 노드들은 워커 노드라 부른다.

 

다음 시간에는 node를 생성하고 배포하는 방법과 Replicaset, Deployment, Service, Ingress에 대해 적어보겠다.

728x90