[Infra] 쿠버네티스(kubernetes)(1) 쿠버네티스 구조(Kubernetes architecture)
업데이트:
쿠버네티스(kubernetes)(1) 쿠버네티스 구조(Kubernetes architecture)
참고링크
참고 링크
- (0)도커의 개념
- (1)도커 설치하기, hello world!
- (2)도커 컨테이너 조작 기초(pull, run, ps)
- (3)도커 이미지 변경 후 저장(commit)
- (4)도커 컨테이너 네트워크
- (5)도커 API 이미지 빌드 및 컨테이너 실행
- (6)도커 컴포즈를 활용한 여러 개의 Flask, Nginx 배포
- (7)도커 볼륨을 이용한 데이터 관리
- (1)쿠버네티스 구조
- (2)쿠버네티스 설치
- (3)쿠버네티스 서비스 배포하기
- (4)컨테이너 IP와 파드 IP의 관계
- (5)퍼시스턴트 볼륨 스토리지
1. 쿠버네티스 전체 구조
일단 처음으로 쿠버네티스의 전체 구조를 보겠습니다. 쿠버네티스는 k8s라고 줄여서도 부릅니다. 쿠버네티스는 기본적으로 마스터 노드(Master node)와 워커 노드(worker node)로 구성되어 있습니다. 마스터노드는 워커노드를 관리하는 역할을 합니다. 개발자는 마스터노드에 접속해서 주로 작업하고 사용자는 워커노드의 kubeproxy로 접속하게 됩니다.
위와 같은 전체 구조에서 쓰인 용어들을 하나씩 알아봅니다.
-
kubectl: 쿠버네티스 클러스터를 조작하기 위한 커맨드 라인 인터페이스(CLI) 입니다.
-
kube-api server: kubectl과 같은 클라이언트로부터 오는 요청을 받고 API 오브젝트를 구성합니다.
-
kube scheduler: 쿠버네티스의 스케쥴러이며 새로 생성된 파드가 실행될 노드를 선택합니다. 스케쥴링이란 파드를 실행할 노드를 정하는 것을 의미합니다.
-
kube controller manager: 컨트롤러를 구동하는 마스터노드의 컴포넌트
-
etcd: 쿠버네티스 클러스트를 관리하기 위해 필요한 모든 데이터가 저장되는 곳.
-
kubelet: 파드와 컨테이너의 실행, 파드와 노드의 상태를 kube API서버에 보고 등을 수행합니다. 쿠버네티스에서는 컨테이너만을 독자적으로 실행하는 것은 불가능하고 반드시 파드(pod)내에서 실행해야 합니다. 파드는 한 개 혹은 여러 개의 컨테이너를 담을 수 있습니다.
-
kube proxy: 로드밸런싱 기능 제공, iptables 규칙 관리, 서비스명, clusterIP를 내부 DNS에 등록
2. 마스터 노드
마스터노드를 자세히 보면 다음 그림과 같습니다.
마스터 노드는 다음과 같은 역할을 합니다.
-
클라이언트의 요청을 받고 실행
-
컨테이너를 파드 단위로 스케줄링 및 삭제
-
파드의 컨트롤러 기능과 외부 리소스 관리
3. 파드(pod)
파드(pod)는 쿠버네티스에서 컨테이너를 실행하는 최소 단위 입니다. 파드는 하나 혹은 여러개의 컨테이너를 포함합니다. 그리고 특정 파드에 속하는 컨테이너들은 같은 노드에서 작동합니다. 즉, 파드는 서로 다른 노드에 걸쳐서 존재하지는 않고 하나의 노드에 존재한다는 것을 의미합니다.
특정 파드에 존재하는 컨테이너들 사이에서는 다음과 같은 것이 가능합니다.
-
파드 내부의 컨테이너들은 자신이 속한 파드의 IP와 포트번호를 공유합니다.
-
파드의 내부 컨테이너들은 localhost와 통신할 수 있습니다.
-
파드의 내부 컨테이너들은 서로 통신할 수 있습니다.
-
파드의 내부 컨테이너들은 서로 파일 시스템을 공유할 수 있습니다.
위와 같은 기능은 서로 다른 파드에 있는 컨테이너끼리는 불가능합니다.
파드는 일시적인 존재입니다. 즉, 같은 이름으로 몇번이고 파드를 실행해도 이전 컨테이너에서 수행한 변경 이력은 남지 않습니다. 파드는 실행할 때마다 초기 이미지 상태에서 시작합니다.
파드의 IP는 실행시 부여되고 종료시 회수됩니다. 따라서 고정적이지 않습니다. 따라서 파드에 요청을 보내고 싶을 때는 IP로 요청하면 안되고 서비스를 이용해야 합니다.