컨테이너 오케스트레이션 : 시스템 전체를 통괄하고 여러 개의 컨테이너를 관리하는 일
k8s라 쓰기도 한다. k와 s 사이에 8개의 글자가 있다는 의미
쿠버네티스는 여러 대의 물리적 서버가 존재하는 것을 전제로 한다.
여러 대의 물리적 서버에 각 서버마다 여러 대의 컨테이너가 실행되고 있다.
쿠버네티스는 번거로운 컨테이너 생성이나 관리의 수고를 덜어주는 역할을 한다.
쿠버네티스를 공부하다보면 클러스터라는 말이 나옵니다.
쿠버네티스 클러스터란 마스터 노드와 워커 노드를 합친 용어로, 쿠버네티스를 실행하기 위한 하나의 시스템 단위입니다.
쿠버네티스를 실행하기 위해 쿠버네티스 클러스터를 생성해야하고,
쿠버네티스 클러스터에는 마스터 노드와 워커 노드들이 존재합니다.
마스터 노드는 클러스터를 관리하고, 실제 컨테이너의 실행은 워커 노드들이 담당합니다.
마스터 노드와 워커 노드는 최소 1개 이상으로 구성 되며, 마스터 노드는 1개, 3개, 5개, 7개 등으로 보통 홀수 개로 구성합니다.
마스터 노드와 워커 노드을의 구성
마스터 노드의 주요 컴포넌트
워커 노드의 주요 컴포넌트
쿠버네티스는 컨테이너를 생성 삭제 뿐만 아니라, 상태를 지정하고 이를 자동으로 유지 해주는 기능이 있다.
예를들면 파드의 개수를 3개로 지정해 이 개수를 유지하게 모니터링을 하며 관리까지 해주는 것이다.
쿠버네티스는 파드 단위로 컨테이너를 관리한다.
파드는 컨테이너와 볼륨을 묶은 하나의 단위이며,
컨테이너를 묶어 파드 단위로 설정할 수 있으며, 각 파드에는 1개 이상의 컨테이너가 포함되어 있다.
여러 파드들을 묶어 하나의 서비스 형태로 관리할 수 있다.
서비스는 파드를 묶어 관리해주는 역할로, 하나의 단일 진입점을 제공해 여러 파드들로 통신을 분산해준다.
내부적으로 여러 파드가 존재해도 외부에서는 하나의 ip주소만을 볼 수 있으며, 이 주소로 접근하면 서비스가 통신을 적절히 분배해준다.
서비스가 분배하는 통신은 한 워커 노드내에서 분배하는 것만을 담당한다. 여러 워커 노드 간의 분배는 실제 로드 밸런서 또는 인그레스가 담당한다. 이는 클러스터 외부에 있는 실제 외부의 물리적인 장치를 말한다.
서비스는 파드로 오는 요청을 분배하는 역할이라면, 레플리카 셋은 파드의 수를 관리 담당한다.
관리자(사용자)가 지정한 올바른 상태의 파드 개수와 실제 클러스터에서 작동하는 파드 수를 모니터링해 올바른(지정한) 파드 수를 유지할 수 있게 도와준다.
레플리카셋이 곤리하는 동안 동일한 구성의 파드를 레플리카라고 부른다.
레플리카는 레플리카셋이 파드의 개수를 유지하기 위해 복제한 파드를 포함한 원본 까지의 동일한파드를 묶어 지칭한다.
파드의 수를 조정한다 = 레플리카의 수를 조정한다 라고 볼 수 있다.
레플리카 셋은 주로 디플로이먼트와 함께 사용된다.
디플로이먼트란 파드의 배포를 관리하는 요소로, 파드가 사용하는 이미지 등에 대한 정보가 있으며,
여기에 레플리카 셋에 대한 정보까지 있다.
레플리카 셋을 지정하기 위해 디플로이먼트를 사용하면, 편하게 레플리카 수를 조정할 수 있다.
쿠버네티스는 매니페스트 파일(정의 파일)에 기재된 내용에 따라 파드를 관리한다.
매니페스트 파일에 정의된 스펙이 etcd(저장소)에 바람직한 상태로 저장되어, 서버 환경을 이 환경에 맞게 유지한다.
매니페스트 파일은 YAML 또는 JSON형태로 기재한다.
매니페스트 파일은 리소스 단위로 작성한다.
리소스는 파드, 서비스, 디플로이먼트, 레플리카셋 등을 가르킨다.
초보자 수준에서 다루는 주요 리소스는 서비스와 디플로이먼트이다.
매니페스트 파일은 리소스 단위로 분할해 여러 개로 관리할 수도 있고,
---
를 기준으로 여러 리소르를 나누어 하나의 파일로 관리할 수도 있다.
매니페스트 파일의 주 항목
apiVersion : API 그룹 및 버전
kine : 리소스 유형
metadata : 메타데이터
spec : 리소스 내용
주 항목내에 중항목, 중항목 내에 소항목이 있고,
하위 항목으로 갈 때 들여쓰기를 사용해 표기한다.
apiVersion:
kind:
metadata:
name:
labels:
spec:
containers:
- name:
images:
ports:
쿠버네티스에는 kubectl이라는 명령어를 사용할 수 있다.
kubectl [Command] [Option]
기존에 매니페스트 파일을 kubectl로 실행시킬 수 있다.
apply -f를 이용해 생성한다.
ex) 매니페스트 파일 실행
kubectl apply -f {yaml파일 위치}/app.yaml
파드 조회
kubectl get pods
서비스 조회
kubecl get svc
디플로이먼트 조회
kubectl get deployment