Kubernetes는 컨테이너 관리 자동화(Orchestration) 시스템이다.
쉽게말해 컨테이너들을 똑똑하게 띄워주고, 필요하면 옮기고, 고장나면 다시 띄우고, Load Balancing도 수행해준다. 이 모든것을 자동으로 해주는 시스템이다.
대표 예시
특징
장점
단점
대표 예시
특징
장점
단점
대표 예시
특징
장점
단점
이미지 출처 : Linux Foundation - 쿠버네티스 아키텍처 소개
Kubernetes의 두뇌역할을 담당하고있으며 클러스터의 신경 중추라고도 표현한다. 여기에는 클러스터를 제어하는 쿠버네티스 구성 요소와 상태 및 구성에 관한 데이터가 함께 있다.
Manage, Plan, Schedule, Monitor Nodes 등을 수행한다.
클러스터 내에서 모든 작업은 여기를 통해 들어오고 나간다.
Control Plane 에서 Worker Node에게 지시를 할 때도 kube-api를 지난다.
지금 사용 가능한 컨테이너와 기타 조건들을 기준으로 스케줄을 조정해주는 모듈
CPU, Memory상황등을 보고 이 Pod는 Node2에 올리자 등 이런식으로 판단해준다.
더 자세히 말하자면, Kubernetes는 두 단계를 거쳐 Pod에 가장 적합한 Node를 찾아준다.
Fileter Nodes
: CPU, Memory 요구사항이 맞지 않는 Node를 걸러낸다.Rank Nodes
: 우선순위 함수를 이용하여 Node마다 점수를 매겨, 가장 효율적이고 리소스 누수가 없는 적합한 Node를 찾는다.kubernetes에서 controller는 시스템 내 다양한 구성 요소의 상태를 지속적으로 모니터링하고 시스템 전체를 원하는 상태로 만드는 것을 의미한다.
controller는 scheduler를 참고하여 정확한 수의 Pod가 실행되도록 컨트롤 한다.
Pod가 3개 있어야 함 -> 하나 죽으면 새로 만들어줌
Kuber-Controller-Manager 안에는
Node Controller, Job Controller, Deployment Controller, Namespace Controller, Endpoint Controller, PV-Protection Controller, Replication Controller, Replicaset Controller, Stateful-Set Controller, CronJob Controller 등 다양한 Controller가 포함되어 있다.
어떤 배에 어떤 컨테이너가 들어있고, 몇시에 적재되었는지 등 쿠버네티스의 모든 설정, 상태, 위치 정보 저장 정보를 담고있는 고가용 키-값 데이터베이스.
모든 정보를 담고 있기 때문에 클러스터의 "진짜 뇌" 라고도 부른다.
Compute Machine == Worker Node == 일꾼 노드
쿠버네티스에서 실제로 컨테이너(Pod)가 돌아가는 서버를 말한다.
일반적으로 하나의 클러스터에는 여러개의 Worker Node가 있고, 각각이 Container를 실행한다.
클러스터의 각 노드에서 실행되는 에이전트.
컨테이너를 띄우고 Control Plane(kube-apiserver)랑 소통하여 컨테이너를 실행/모니터링 등
관리한다.
kube-api(선장)의 지시를 듣고 kubelet(선원)이 필요한 대로 노드에서 컨테이너를 배포하거나 파괴함
kube-api(선장)은 주기적으로 kubelet(선원)에게 상태보고서를 받음(컨테이너 상태 모니터)
kubeadm으로 설치 시 kubelet을 수동으로 따로 설치해주어야 한다.
네트워크 관리자 역할을 수행한다.
외부 트래픽이 올 때 적절한 Pod로 라우팅 하는 역할을 수행한다.
클러스터 내 작업자 노드에 필요한 네트워크 규칙을 설정하고 시행되도록 한다.
컨테이너를 실제로 실행하는 컨테이너 Runtime을 의미한다.
docker, containerD, rkt 등 종류가 있다.
컨테이너를 담는 상자이다.
하나 이상의 컨테이너를 담는 최소 실행 단위를 뜻하는데, 보통 Pod라고 하면 하나의 컨테이너 + 부가적인 설정 정도로 생각하면 된다고 한다.
nginx, mysql, node.js 등 애플리케이션이 실제로 실행되는 단위이다.
데이터를 유지하는 저장소이다.
Pod가 죽거나 이동해도 데이터가 남아 있어야 할 때 사용한다.
종류에는 AWS EBS, NFS, GCP Persistent Disk 등이 있다.
이미지를 저장하고 가져오는 창고이다.
DockerHub, Google Container Registry(GCR), private registry 등의 종류가 있다.
kubectl apply
명령어를 요청하면 여기서 이미지를 받아와서 컨테이너로 실행한다.