도커와 쿠버네티스 7: 쿠버네티스의 기본 구조
구버네티스의 개념
구버네티스의 어원과 역사
- 쿠버네티스: 컨테이너화된 애플리케이션의 자동 배포, 확장 및 관리를 해주는 오픈소스 플랫폼
- Kubernetes: 고대 그리스러로, 배의 조타수를 의미한다
- 구글에서 시작한 사내 프로젝트로 2014년에 발표되었다
- 쿠버네티스는 다수의 노드로 구성되는 경우가 많다
- 크게, 마스터 노드와 워커 노드로 구분됨 → 개발자는 주로 마스터 노드와 사용자는 인터넷을 통해 워커 노드와 통신하는 경우 많다
- Container Network Interfaces: 쿠버네티스 클러스터에 존재하는 컨테이너 간의 통신을 위해 필요한 인터페이스임
- 이를 사용하려면 쿠버네티스 네트워크 플러그인을 제공하는데, 대표적인 플러그인은 Flannel과 calico이다 → 교재가 calico를 사용한다
컨트롤 플레인
- Control Plane: 크버네티스 클러스터 전반의 작업을 관리하는 역할을 한다
API 서버
- 쿠버네티스의 작업은 kubectl 명령어를 통해 마스터 노드의 kube-apiserver에게 API 요청을 보냄으로써 이루어진다
- 쿠버네티스 컨트롤 플레인에서의 프런트엔드 역할을 한다
etcd
- 쿠버네티스 클러스터에 존재하는 모든 데이터를 저장하는 key-value 저장소
스케줄러
- 쿠버네티스에서는 이후 배울 파드(pod)라는 오프젝트를 통해 애플리케이션을 실행한다
- 파드: 쿠버네티스 클러스터를 구성하는 노드 중 하나에 실행된다 → 새롭게 생성되는 파드를 어느 노드에 실행시킬지 정하는 역할을 kube-scheduler가 수행한다
컨트롤러 매니저
- 쿠버네티스 리소스를 관리하고 제어하는 역할을 한다
- 마스터 노드에서 실행되며 클러스터 상태를 모니터링한다
- 컨트롤러에는 디플로이먼트 컨트롤러, 시비스 컨트롤러, 레플리카셋 컨트롤러 등의 여러 종료가 있다
- 각 컨트롤러는 특정 리소스 타입을 관리한다
노드
Kubelet
- 파드 내부의 컨테이너 실행을 담당한다
- 파드의 상태를 모니토링하고, 파드의 상태에 이상이 있다면 해당 파드를 다시 배포한다
Kube-Proxy
- 노드에서 네트워크 역할을 수행한다
- 노드에 존재하는 파드들이 쿠버네티스 내부/외부와 네트워크 통신을 가능하게 한다
컨테이너 런타임
- 컨테이너의 생명주기를 담당한다 → Kubelet은 컨테이너 런타임과 통신하는데, 이떄 사용하는 것이 컨테이너 런타임 인터페이스임
- 쿠버네티스가 사용하는 컨테이너 런타임에는 containerd, CRI-O 등이 있다
파드
- 컨테이너를 실행하기 위한 오프젝트인데, 각 파드는 한 대 혹은 여러 개의 컨테이너를 담을 수 있다
- 파드는 컨테이너를 그룹화한 것이라고 생각하면 됨
- 쿠버네티스에서 다수의 파드들은 여러 워커 노드에 분산되어 실행되는데, 하나의 파드에 속하는 컨테이너들은 모두 같은 노드에서 실행한다
- 서로 다른 파드는 서로 다른 노드에서 실행될 수 있지만, 하나의 파드가 분할되어 여러 노드에 실행되는 일은 없다는 것이다 → 하나의 파드는 하나의 노드에서 실행된다 → 컨테이너
워크로드
- 쿠버네티스에서 실행되는 애플리케이션
- 워크로드가 하나의 컴포넌트 형태로 실행하든, 다수의 컴포넌트가 함께 실행하든 쿠버네티스는 파드 내부엣 워크로드를 실행하게 된다 → 파드는 실행 중인 컨테이너의 집합을 나타낸다
레플리카셋
- 파드의 복제를 관리하며 클라이언트가 요구하는 복제본 개수만큼 파드를 복제하고 모니터링하고 관리한다
디플로이먼트
- 애플리케이션의 배포와 스케일링을 관리하는 역할을 담당한다
스테이트풀셋
- 파드 사이에서 순서와 고유성이 보장되어야 하는 경우에 사용한다
데몬셋
- 쿠버네티스를 구성하는 모든 노드가 파드의 복사본을 실행하도록 한다
- 쿠버네티스 클러스터에 새로운 노드가 추가되면 파드 역시 추가된다
- 데몬셋은 주로 로깅, 모니터링, 스터리지 등과 같은 시스템 수준의 서비르를 실행하는 데 사용된다
잡과 크론잡
- 작업이 정상적으로 완료되고 종료되는 것을 담당한다
- 만약, 파드가 정상적으로 종료되지 않는다면 재실행시킨다
- 잡: 작업이 한번 종료되는 것을 담당한다
- 크론잡: 동일한 작업이 스케줄에 따라 여러 번 수행하는 것을 담당한다
- 리눅스에서 아용하는 크론 탭과 비슷한 역할을 한다
네트워크
서비스
- 이를 사용하면 파드를 여러 개 묶어서 클러스터 외부로 노출시킬 수 있다
- 서비스를 사용하는 방법의 장점은 이미 실행 중인 파드를 외부로 노출시키기 위해 파드 내부를 수정할 필요가 없다는 것이다
- 쿠버네티스 서비스를 활용하면 실행 중인 파드 수정 없이도 외부에 오출시켜 클라이언트와 통신할 수 있다
인그레스
- 인그레스를 활용하면 쿠버네티스 내부에 존재하는 서비스를 HTTP/HTTPS 루트를 클러스터 외부로 라우팅하는 역할을 한다
스토리지
- 컨테이너에 이런저런 문제가 생기거나 컨테이너가 삭제되거나 재실행되면 해당 컨테이너 내부에 존재하는 파일을 모두 삭제됨 → 컨테이너 내부에 존재하는 파일들은 수명이 짧다
- 하지만, 쿠버네티스 스토리지를 활용하면 파드의 상태와 상관없이 파일을 보관할 수 있다다
This post is licensed under CC BY 4.0 by the author.