Kubernetes Study posts들은 Udemy의 Kubernetes 스테디셀러인 Mumshad의 Certified Kubernetes Administrator (CKA) with Practice Tests 강의를 스터디하며 강의 내용을 체득하기 위해 간략하게 정리하는 포스트입니다. 따라서 관련 내용들은 Udemy 강의 내용이며, 아직 다 학습하지는 못했지만.. 강의 내용이 아주 이해하기 쉽게 잘 설명된것 같으니 할인할 때 구매하시면 좋을것 같습니다. 저는 약 19,000에 구매했던것 같습니다.

Kubernetes 구성요소들

Kubernetes는 contaierized 된 application들의 실행, 관리하는 플랫폼입니다. Google에서 처음 개발되었으며 오픈소스 기반으로 현재는 Linux foundation 재단에서 관리합니다. AWS, Azure, GCP 등 Public Cloud 업체들은 Kubernetes 환경을 제공하고 있고 규모가 있는 업체들의 경우 On-premise로 Kubernetes를 구축하여 Service를 제공하고 있습니다.

Worker Nodes

Containers는 Worker Node에서 실행됩니다. Worker nodes의 리소스 용량에 따라 얼마나 많은 용량의 Containers들을 실행할 수 있는지 결정됩니다.

실제로는 Kubernetes에서는 Container 단위로 동작하지 않습니다. Pod가 Kubernetes의 가장 작은 실행단위이며, Pod는 1개 이상의 Container로 구성됩니다.

Master Node

항구에는 수 많은 컨테이너 선들이 있고 항구 앞 바다에는 많은 컨테이너선들이 있습니다. 각각 컨테이너들의 정보들은 알맞은 컨테이너선에 실려야하며 언제, 어떻게 싣고 현재 상태는 어떠한지, 전체적인 정보들을 관리하는 컨트롤 타워가 필요합니다. Master Node는 컨트롤타워로 비유할 수 있습니다. 이제 Kubernetes는 Master Node를 통해서 Container들을 올바르게 Worker Node에 설치하고 모니터링 할 수 있습니다. Master Node의 역할은 다음과 같습니다.

  • Kubernetes Cluster 관리 / 항구 전체의 관리
  • 각 노드의 상태정보 저장 / 모든 화물선들의 상태정보 관리
  • 각 노드의 상태 모니터링 / 모든 화물선들의 현새상태 감시
  • Pods와 Worker node의 mapping 정보 관리 / 모든 화물선과 실린, 실려야하는 화물들의 관리

위와 같은 작업을 수행하기 위해서는 Master Node는 여러개의 Control Plane Components와 유기적으로 통신합니다. Kubernetes Cluster를 구성하는 Control Plane Components를 간략히 알아보겠습니다.

etcd

항구의 컨트롤타워는 정보들을 저장하고 읽어들일 수 있어야합니다. 항구에는 수 많은 화물과 화물선들이 있으며, 선적과 하역 작업스케쥴 등 다양한 정보들이 저장되고 언제든지 정보들을 확인할 수 있어야합니다. Kubernetes에는 이러한 정보저장공간을 etcd(엣시디)라고 하며, key-value로 정보들을 저장하고 관리합니다.

kube-scheduler

항구에는 화물을 알맞은 화물선으로 싣기 위해 컨테이너를 옮기는 크레인이 있습니다. 이 크레인 운전자는 해당하는 화물이 어떤 화물이고, 이 화물이 어디에 실려야하는지 알고 있습니다. 이러한 크레인은 Kubernetes에는 kube-scheduler에 대응됩니다. kube-scheduler는 Pods의 requests/limits resource, nodeAffinity, tolerations 등을 기준으로 하여 현재 Worker nodes 중 capacity가 알맞은 Worker node에 Pods를 배치합니다.

Controller

관리팀은 항구에 있는 화물들을 전반적으로 관리합니다. 화물차들의 화물 배송 스케쥴, 화물의 파손확인, 가용 화물 확인 등 화물들의 전반적인 상태를 점검하고 모니터링은 화물팀이 관리합니다. Kubernetes에서는 Controller는 항구의 관리팀으로 비유할 수 있습니다. Kubernetes에는 관리하는 리소스마다 다양한 Controller가 존재합니다. 다음은 Controller 중 일부 Controller를 간략하게 설명합니다.

Repliaction-Controller

Replication-COntrollerDesired the number of Pods를 보증합니다. Kubernetes의 핵심 중 하나가 Desired State의 제공입니다. 운영자는 몇개의 Pods가 운용되고, 어떤 포트로, 어떤 이름의 서비스를 제공할지 Desired State를 명시할 수 있습니다. Replication-Controller는 운영자가 명시한 Pods의 실행 개수가 항상 만족하도록 Pods상태 및 생성을 관리합니다.

Node-Controller

Kubernetes에 Join하는 다양한 노드들을 관리합니다. 새롭게 추가된 Node들을 관리하고 Node에 문제가 발생할 경우 Node-Controller가 관리합니다.

kube-apiserver

kube-apiserver는 Kubernetes를 구성하는 다양한 Control Plane Components들간의 통신을 담당합니다. kube-apiserver는 kubernetes를 orchestration할 수 있도록 제공하는 component 입니다. 시스템 운용자는 kube-apiserver이 제공하는 Kubernetes API를 이용하여 cluster를 관리하고 모니터링할 수 있습니다.

Container Runtime Engine

Kubernetes는 Containerized 된 application들은 관리합니다. 즉, 모든 application들의 기본 단위는 container입니다(물론 앞서 설명한 바와 같이 Pod로 설치되지 Container가 직접 설치되고 운용되지는 않습니다). Containerized는 Docker, Podman, ContainerD 등 다양한 가상 Container Runtime Engine을 사용할 수 있습니다.

Kubelet

Kubelet은 모든 Worker Node에 설치되는 컴포넌트로, Master Node의 요청에 따라 Container들을 설치/삭제/모니터링하고 관련된 정보들을 Master Node에 회신합니다. Master Node는 Worker Node에 직접 관려하지 않고 kubelet에 관련된 작업을 일임하고 결과를 통보받습니다. 이렇게 통보받은 정보들은 kube-apiserver를 통해 수신하고, etcd에 저장되며, 관련된 정보들을 알맞은 컴포넌트들에게 알려집니다.

kube-proxy

kube-proxy는 Kubernetes cluster의 네트워크를 구성하는 컴포넌트입니다. kubernetes cluster를 구성하는 Worker Node들이 서로간의 통신이 가능하도록 관련된 기능을 제공하며, 이를 통해 Cluster 전체에 퍼져있는 서비스들이 통신할 수 있습니다.