본문 바로가기

Devops/Kubernetes

[Kubernetes] 쿠버네티스 Architecture와 기본 동작

Kubernetes Clustering Architecture

 

1. 로컬에서 이미지를 생성해서 Push를 수행한다.

2. Push된 이미지가 Docker Hub에 업로드 된다.

3. 4. kubectl 명령어를 실행해 Kubernets API 서버로 REST HTTP 요청을 전달하고 클러스터에 새로운 레플리케이션 컨트롤러 오브젝트 생성

5. 레플리케이션 컨트롤러는 새 파드를 생성하고 스케쥴러(Scheduler)가 워커 노드 중 하나에 스케쥴링

6. 해당 워커 노드의 Kubelet은 파드가 스케쥴링 된 것을 확인

7. 이미지가 로컬에 없기 때문에 Docker에게 레지스트리에서 특정 이미지를 Pull 하도록 지시

8. 이미지 다운 후 Docker는 컨테이너를 생성하고 실행

 

Master Node의 Scheduler는 여러 Worker Node중에 어디에 올릴건지 장소, 공간에 대해서 스케쥴링 함.

Kubelet은 Docker에 명령해 Container를 띄우되 Pod로 감싸서 띄움. 하나의 Pod에는 여러개의 Container가 포함될 수 있다.

 

Kubernetes Cluster 주요 컴포넌트

etcd

  • 코어OS에서 개발한 고가용성을 제공하는 key-value 저장소
  • 구조적인 내용을 저장함. Persistence Store, DB의 역할
  • etcd는 안정적이지만 쿠버네티트를 운영하려면 여러 개의 마스터-서브에 분산해서 실행하고 주기적으로 etcd의 데이터를 백업하는 것을 권장

API Server

  • 쿠버네티스 클러스터의 API를 사용할 수 있도록 하는 컴포넌트
  • 클러스터로 온 요청이 유효한지 검증 (접근 자원의 권한 확인 등...)
  • 쿠버네티스는 MicroService 아키텍처로 구성되어 있으며 서로 분리된 여러 컴포넌트들로 구성되어 있어 API Server를 통해서 다른 컴포넌트와 통신한다.

Scheduler

  • 클러스터안의 자원 할당이 가능한 노드 중 적당한 노드를 선택하여 새로운 파드를 실행하도록 선정하는 작업
  • 파드의 실행 조건을 비교하여 최선의 노드를 선택

Controller Manager

  • 쿠버네티스의 파드들을 관리하는 컨트롤러를 구동하는 컴포넌트
  • 컨트롤러 각각은 논리적으로 개별 프로세스이지만 복잡도를 줄이기 위해서 모든 컨트롤러를 바이너리 파일 하나로 컴파일해 단일 프로세스로 실행

 Cloud Controller Manager (Optional)

  • 클라우드 공급자의 API에 연결하고 해당 클라우드 플랫폼과 상호 작용하는 컴포넌트 (Aws, Google, Azure 등...)

Kubelet

  • 클러스터의 각 노드에서 실행되는 에이전트
  • 정의된 파드 스펙(PodSpec)을 받아서 컨테이너가 해당 Pod 스펙에 따라 정상적으로 동작되도록 직접 관리
  • Kubelet은 쿠버네티스를 통해서 생성되지 않는 컨테이너는 관리하지 않는다.

Kube-Proxy

  • 클러스트의 각 노드에서 실행되는 가상 네트워크를 설정하고 관리하는 네트워크 프록시
  • 쿠버네티스 Service를 구현하는 컴포넌트로 노드의 네트워크 규칙을 관리하고 이 네트워크 규칙에 따라 클러스터 바깥에서 파드와의 통신을 가능하게 한다.
  • CNI (Container Network Interface) 설치를 기반으로 동작한다. (Calico 등)

Container runtime

  • 컨테이터 실행을 담당하는 모듈
  • 구버네티스는 여러 컨테이너 런타임을 지원
  • OCI(Oepn Container Initiative)의 런타임 규격을 구현한 컨테이너 런타임인 경우 사용 가능 (Docker, containerd, runC, Kubernetes CRI(Container Runtime Interface) 등)

Object & Controller

  • 쿠버네티스는 크게 오브젝트(Object)와 오브젝트를 관리하는 컨트롤러(Controller)로 나뉜다.
  • 사용자는 템플릿 등으로 쿠버네티스에 자원의 바라는 상태(Desired state)를 정의하고 컨트롤러는 바라는 상태와 현재 상태가 일치하도록 오브젝트를 생성/삭제 한다.
  • 오브젝트 : 파드(Pod), 서비스(Service), 볼륨(Volume), 네임스페이스(namespace)
  • 컨트롤러 : 레플리카세트(ReplicaSet), 디플로이먼트(Deployment), 스테이트풀셋(StatefulSet), 데몬셋(DaemonSet), 잡(Job) ...

 

참고링크

https://kubernetes.io/docs/concepts/overview/components/ 

 

 

-- The End --