[docker] 쿠버네티스 간단 정리 By starseat 2023-01-30 15:51:28 server/oss Post Tags [그림과 실습으로 배우는 도커 & 쿠버네티스](https://wikibook.co.kr/dkkb/) 책에서 설명하는 쿠버네티스에 대한 내용을 정리한 내용이다. # 쿠버네티스란? * `컨테이너 오케스트레이션 도구`의 일종 * 쿠버네티스(Kubernetes) 를 줄여서 `k8s` 라고도 사용함. * 간단히 말해 `여러 개의 컨테이너(=서버)`를 관리하는 도구 * 도커는 핸 대의 물리적 서버에서 실행되는 경우가 많지만 쿠버네티스는 여러 대의 물리 서버가 존재하는 것을 전제로 함. * 이 물리 서버 한 대 한 대 마다 제각기 여러 대의 컨테이너 실행 - 쿠버네티스의 목표는 `바람직한 상태를 유지하는 것` 임. - 사람이 개입해서 컨테이너를 삭제해도 새로운 컨테이너를 실행하여 설정된 수를 유지함. # 노드 * 제어와 실행을 담당하여 구분 * `클러스터(Cluster)` * 마스터 노드와 워크 노드로 구성된 일군의 쿠버네티스 시스템 * 설정 파일의 내용에 ㄸ라 자율적으로 동작 ## 마스터 노드 * 전체적인 제어 담당 (감독과 같은 존재) * 컨테이너를 실행하지 않으며 워커 노드에서 실행되는 컨테이너를 관리하는 역할 * 도커 엔진 같은 컨테이너 엔진이 설치되지 않음. * 컨테이너 등의 상태를 관리하기 위해 `etcd` 라는 쿠버네티스의 데이터베이스가 설치 됨. * `key-value` 타입의 데이터베이스. 상태 관리 뿐만 아니라 다른 목적으로도 사용 됨. * `kubectl` 을 사용하여 명령 전달 ## 워커 노드 * 실제 동작 담당 (컨테이너가 실제 동작하는 서버) * 컨테이너 엔진이 설치 됨. ## 컨트롤 플레인 구성 * 마스터 노드는 `컨트롤 플레인`을 통해 워커 노드 관리 | 항목 | 내용 | | --- | --- | | kube-apiserver | 외부와 통신하는 프로세스`kubectl`로부터 명령을 전달받아 실행 | | kube-controller-manager | 컨트롤러 통합 관리, 실행 | | kube-scheduler | `POD`를 워커 노드에 할당 | | cloud-controller-manager | 클라우드 서비스와 연동해 서비스 생성 | | etcd | 클러스터 관련 정보 전반을 관리하는 데이터 베이스`Key-Value` 구조 | * 워커 노드 구성 | 항목 | 내용 | | --- | --- | | kube-let | 마스터 노드에 있는 `kube-scheduler`와 연동하며 워커 노드에 `POD`를 배치하고 실행실행 중인 `POD`의 상태를 정기적으로 모니터링하며 `kube-scheduler`에 통지 | | kube-proxy | 네트워크 통신의 라우팅 메커니즘 | # 기타 ## 로드 벨런서와 클라우드 컴퓨팅 ### 로드 벨런싱 - 한 대의 서버에 모든 요청이 집중되지 않도록 여러 대의 서버를 갖추고 요청을 각 서버에 분산하는 것 - 부하를 분담해 과도한 부하가 걸린 서버가 망가지거나 처리가 늦어지는 것을 방지 ### 클라우드 컴퓨팅 - 서버에 들어오는 요청이 많을 때도 있고 적을 떄도 있음. - 서버가 모두 실행 중일때 요청이 적으면 놀고 있는 서버가 존재하고 비용이 낭비됨. - 이 문제를 해결하는 것이 도커와 쿠버네티스 임. - 이런 낭비를 해결해 주는 것이 AWS, 애저, GCP 와 같은 `클라우딩 컴퓨팅 서비스` 임. # 쿠버네티스의 구성과 관련 용어 ## POD - 쿠버네티스에서 컨테이너는 파드(POD) 라는 단위로 관리됨. - 컨테이너와 볼륨을 함께 묶은 것 - 기본적으로 파드 하나가 컨테이너 하나씩 존재하지만 컨테이너가 여러개인 파드도 있을 수 있음. ## Service - 파드(POD)를 모은 것 - 서비스라는 용어는 여러 의미로 사용되지만 여기서 말하는 서비스는 `여러 개의 파드를 이끄는 반장` 정도로 생각하면 됨. - 서비스가 관리하는 파드는 모두 기본적으로 동일한 구성을 갖음. - 서비스는 파드가 여러 개의 워커 노드에 걸쳐 동작하더라도 모두 관리 - 각 서비스는 자동적으로 고정된 IP 주소를 부여 받으며(Cluster IP) 이 주소로 들어오는 통신을 처리 - 내부적으로는 여러 개의 파드가 있어도 밖에서는 하나의 IP 주소(Cluster IP)만 볼 수 있으며, 이 주소로 접근하면 서비스가 통신을 적절히 분배하는 구조 - 요청이 한 파드에 몰리지 않게끔 적절히 분배(각각의 파드는 내부 IP 할당됨.) - 서비스가 분배하는 통신은 한 워커 노드 안으로 국한 됨. - 여러 워커 노드 간의 분배는 `로드 밸런서` 또는 `인그레스(Ingress) 가 담당 ## ReplicaSet - 파드의 수 관리 - 장애등의 이유로 파드가 종료됐을 때, 정의 파일(yaml)에 정의된 파드의 수만큼 동작하도록 관리 - 레플리카세트가 관리하는 동일한 구성의 파드를 `레플리카(Replica)`라고 부름. ## Deployment - 파드의 디플로이(Deploy, 배포)를 관리 - 파드가 사용하는 이미지 등 파드에 대한 정보를 가짐 - 레플리카 세트와 함꼐 쓰임 - 레플리카세트가 반장이라면 디플로이먼트는 반장보다 위에 있는 상사임. ## 그 밖의 쿠버네티스 리소스 - 파드, 서비스, 디플로이먼트, 레플리카세트 등을 `리소스(Resource)` 라고 함. - 주요 쿠버네티스 리소스 | 리소스 | 내용 | | -- | -- | | **파드(pods)** | 파드, 컨테이너와 볼륨을 합친 것 | | 파드템플릿(podtemplates) | 배포 시 파드의 틀(형태) | | 레플리케이션 컨트롤러(replication controllers) | 레플리케이션 제어 | | 리소스 쿼터(resource quotas) | 쿠버네티스 리소스의 사용량 제한 설정 | | 비밀 값(secrets) | 키 정보 관리 | | 서비스 어카운트(service accounts) | 리소스를 다루는 사용자 관리 | | **서비스(services)** | 파드에 요청 배분 | | 데몬세트(daemonsets) | 워커 노드마다 하나의 파드 생성 | | **디플로이먼트(deployments)** | 파드 배포 관리 | | **레플리카세트(replicasets)** | 파드의 수 관리 | | 스테이트풀세트(statefulsets) | 파드의 배포 상태를 유지하며 관리 | | 크론잡(cronjobs) | 지정된 스케쥴대로 파드 실행 | | 잡(jobs) | 파드를 한번 실행 | # 출처 * [그림과 실습으로 배우는 도커 & 쿠버네티스](https://wikibook.co.kr/dkkb/) Previous Post [docker] 도커 컴포즈 실행 Next Post [docker] 쿠버네티스 정의 파일