쿠버네티스란 무엇인가 - ChoDragon9/posts GitHub Wiki
https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/
쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼이다.
컨테이너로 개발 시 자원 격리되어 애플리케이션 성능을 예측할 수 있다.
쿠버네티스가 왜 필요하고 무엇을 할 수 있나
- 서비스 디스커버리와 로드 밸런싱: 컨테이너에 대한 트래픽이 많으면, 쿠버네티스는 네트워크 트래픽을 로드밸런싱하고 배포하여 안정적으로 이뤄지게 한다.
- 스토리지 오케스트레이션: 원하는 저장소 시스템을 자동으로 탑재 할 수 있다.
- 자동화된 롤아웃과 롤백: 원하는 상태를 서술하여 컨테이너 배포를 자동화할 수 있다.
- 자동화된 빈 패킹(bin packing): 각 컨테이너에 필요한 CPU 및 메모리(RAM)의 양을 지정할 수 있다.
- 자동화된 복구(self-healing): 실패한 컨테이너를 다시 시작하고, 컨테이너를 교체하며, '사용자 정의 상태 검사'에 응답하지 않는 컨테이너를 죽이고, 서비스 준비가 끝날 때까지 그러한 과정을 클라이언트에 보여주지 않는다.
마스터 컴포넌트
마스터 컴포넌트는 클러스터의 컨트롤 플레인을 제공한다. 마스터 컴포넌트는 클러스터에 관한 전반적인 결정(예를 들어, 스케줄링)을 수행하고 클러스터 이벤트(예를 들어, 디플로이먼트의 replicas
필드가 요구조건을 충족되지 않는 경우 새로운 파드를 구동 시키는 것)를 감지하고 반응한다.
- kube-apiserver: 쿠버네티스 API를 노출하는 마스터 상의 컴포넌트.
- etcd: 모든 클러스터 데이터를 담는 쿠버네티스 뒷단의 저장소로 사용되는 일관성 · 고가용성 키-값 저장소.
- kube-scheduler: 노드가 배정되지 않은 새로 생성된 파드를 감지하고 그것을 구동될 노드를 선택하는 마스터 상의 컴포넌트.
- kube-controller-manager: 컨트롤러를 구동하는 마스터 상의 컴포넌트. 논리적으로, 각 컨트롤러는 개별 프로세스이지만, 복잡성을 낮추기 위해 모든 단일 바이너리로 컴파일되고 단일 프로세스 내에서 실행된다. 이들 컨트롤러는 다음을 포함한다.
- 노드 컨트롤러: 노드가 다운되었을 때 통지와 대응에 관한 책임을 가진다.
- 레플리케이션 컨트롤러: 시스템의 모든 레플리케이션 컨트롤러 오브젝트에 대해 알맞는 수와 파드들을 유지시켜 주는 책임을 가진다.
- 엔드포인트 컨트롤러: 엔드포인트 오브젝트를 채운다.(즉, 서비스와 파드를 연결시킨다)
노드 컴포넌트
노드 컴포넌트는 동작중인 파드를 유지시키고 쿠버네티스 런타임 환경을 제공하며, 모든 노드 상에서 동작한다.
- kubelet: 클러스터의 각 노드에서 실행되는 에이전트. Kubelet은 파드에서 컨테이너가 확실하게 동작하도록 관리한다.
- kube-proxy: kube-proxy는 클러스터의 각 노드에서 실행되는 네트워크 프록시로, 쿠버네티스의 서비스 개념의 구현부이다.