About kubernetes
쿠버네티스는 container # orchestration tool로, 여러 개의 host에 분산되어 있는 container를 관리할 수 있다. container는 application과 library, 그리고 필요한 도구와 런티임 환경을 포함하는 방식으로 묶인 것이며 가상화 기술 중 하나인 컨테이너 기술을 사용하여 실행된다.
쿠버네티스는 컨테이너 환경에서 application을 배포, 스케일링, 관리, 업데이트 및 롤백하는 등의 작업을 수행할 수 있다. 또한, 서비스 디스커버리, 로드 밸런싱, data volume management, 자동화된 롤링 업데이트, 모니터링, 로길 등의 다양한 기능을 제공하여 container-based application을 효율적으로 관리할 수 있다.
쿠버네티스는 Google에서 개발되었으며, 현재는 CNCF(Cloud Native Computing Foundation)에서 관리하고 있다. 컨테이너 기술의 대중화로 인해 많은 기업에서 쿠버네티스를 사용하고 있으며, 클라우드 서비스 업체들도 쿠버네티스 기반의 서비스를 제공하고 있다.
Kubernetes Components
Kubernetes를 배포하면 cluster가 만들어진다. Kubernetes cluster는 containerized applications을 실행하는 노드(node)라고 불리는 작업자(worker) 머신 집합으로 구성된다. 모든 cluster는 적어도 하나의 worker node를 가지고 있다. worker node는 application workload의 components인 Pod를 호스팅한다. control plane은 cluster의 worker node와 Pod를 관리한다. production 환경에서 control plane은 일반적으로 여러 컴퓨터에서 실행되며 cluster는 일반적으로 여러 노드를 가지며 fault-tolerance and high availability를 제공한다. 이번 section에서는 Kubernetes cluster를 위해 필요한 다양한 구성 요소를 설명한다.
Control Plane Components
Control Plane의 Components는 cluster에 대한 global decisions (e.g., scheduling)을 내리고 cluster events (e.g., 배포의 replicas field가 충족되지 않을 때 새로운 Pod를 시작하는)를 감지하고 대응한다.
Control Plane components는 cluster에서 어떤 머신에서든 실행될 수 있다. 그러나 simplicity를 위해, set up scripts는 일반적으로 모든 control plane components를 동일한 머신에서 시작하고 이 머신에서 사용자 container를 실행하지 않는다. 여러 대의 machine에서 실행되는 예시 컨트롤 plane setup은 "creating highly available clusters with kubeadm"에서 확인할 수 있다.
Kube-apiserver
API server는 kubernetes의 control plane components 중 하나로 kubernetes API를 노출시킨다. api server는 kubernetes control plane의 front end 역할을 한다.
kube-apiserver는 수평적으로 확장될 수 있도록 설계되어 있고, 더 많은 instance를 배치함으로써 확장된다. 여러 kube-apiserver instance를 실행하고 이들 간에 traffic을 분산시킬 수 있다.
etcd
etcd는 모든 cluster data의 backup 저장소로 사용되는 consistent와 highly-available key-value store이다.
kubernetes cluster가 etcd를 backup 저장소로 사용하는 경우 해당 data에 대한 backup 계획이 있어야 한다.
kube-scheduler
kube-scheduler는 control plane component 중 하나로, 할당된 node가 없는 새로 생성된 Pod를 감시하고 실행할 node를 선택한다.
scheduling 결정에 고려되는 요소는 개별 및 집합 resource requirements, hardware/software/policy constraints, affinity and anti-affinity specifications, data locality, inter-workload interference and deadline 등이 있다.
kube-controller-manager
controller process를 실행하는 kubernetes의 control plane component이다. 논리적으로 각 controller는 별도의 process지만, complexity를 줄이기 위해 모든 controller는 하나의 binary file에 통합되어 하나의 process에서 실행된다.
node controller : 노드가 다운될 때 인지하고 대응하는 역할
job controller : 일회성 작ㄱ업을 나타내는 job 객체를 감시한 다음 해당 작업을 완료하기 위해 Pod를 생성
EndpointSlice controller : EndpointSlice 객체를 채우는 역할 (서비스와 Pod 간의 링크 제공)
ServiceAccount controller : 새로운 namespace에 대해 기본 ServiceAccount를 생성
Pod
Pod는 Kubernetes에서 실행되는 최소 단위의 container화된 application이다. Pod 안에는 하나 이상의 container가 있을 수 있으며, 이 컨테이너들은 동일한 호스트에서 네트워크와 file system을 공유한다. Pod는 application을 배포하고 실행하는 기본 단위이고, kubernetes에서는 Pod를 기본 실행 단위로 지정하고 관리한다. Pod는 단일 컨테이너 application부터 복잡한 다중 container application까지 다양한 유형의 application을 실행할 수 있다.
# orchestration
"Orchestration"은 여러 작업, process 또는 service를 자동화하고 관리하는 process를 말한다. 컴퓨터 분야에서는 container화된 application의 배포, 관리 및 스케일링과 같은 작업을 자동화하고 조율하는 것을 의미하는 경우가 많다. 이를 container orchestration이라고 한다. 대표적인 예로는 Kubernetes, Docker Swarm, Apache Mesos 등이 있다.
#