k8s Architecture

김승윤·2021년 10월 30일
0

k8s Components

Control plane components

Control plane 컴포넌트는 일반적으로 하나의 노드에서 동작하지만, 고가용성 환경이나 대규모 클러스터에서는 여러 노드에 분산된 형태도 가능하다.

  • Api server : 쿠버네티스 REST API를 공개한다. 모든 데이터를 etcd 클러스터에 저장하므로 쉽게 수평 확장이 가능하다. API 서버는 쿠버네티스 control-plane을 구체화한 것이다.

  • etcd : 분산데이터 저장소, 쿠버네티스는 이것을 사용해 전체 클러스터의 상태를 저장한다. 규모가 작고 일시적인 클러스터의 경우에는 etcd 단일 인스턴스가 다른 마스터 컴포넌트와 함께 동일한 노드에서 동작할 수 있다. 하지만 대규모 클러스터의 경우 일반적으로 이중화와 고가용성을 위해 3개에서 많으면 5개 노드의 etcd 클러스터를 갖기도 한다.

  • controller manager : 컨트롤러 매니저는 API를 사용해 클러스터의 상태를 감시하고, 클러스터를 원하는 상태로 조정한다. 컨트롤러 매니저에는 replication controller, pod controller, service controller, endpoint controller 등이 포함된다.

  • scheduler : Kube scheduler는 node에 pod를 스케줄링하는 역할을 담당한다. 서비스의 리소스 요구사항, 서비스 요구사항, hardware와 software 정책 제약 사항등 여러 상호작용을 요인으로 고려해야하므로 사실상 매우 복잡한 작업이다.

Add-on Component

  • Dashboard

  • CNI(Container Network Interface Plugin)

  • Ingress

  • coreDNS

Worker Node Component

클러스터의 worker node가 클러스터 master components와 상호작용하고, 클러스터를 실행하고 업데이트하기 위한 워크로드를 받기 위해서는 몇 가지 관련 components가 필요하다.

  • kube-proxy

    • 각 node에서 저수준의 네트워크 관리 업무를 수행한다.
    • 쿠버네티스 서비스를 지역적으로 반영하고 TCP와 UDP 포워딩을 수행하며 환경변수나 DNS를 통해 클러스터 IP를 찾는다.
  • kubelet

    • kubelet은 쿠버네티스를 대표하는 node라고 할 수 있다.
    • kubelet은 마스터 컴포넌트와 통신을 수행하며 실행중인 pod를 관리 감독한다.
    • 구체적인 역할은 다음과 같다.
      • API 서버에서 pod secret 다운로드
      • 볼륨 마운트
      • pod의 컨테이너 실행
      • node와 각 pod의 상태 보고
      • 실행중인 컨테이너 활성 여부 조사

고가용성(HA) 클러스터

  • 쿠버네티스는 master node에 내부적으로 API-SERVER를 가지고 있어 master node를 통해 worker node로 통신이 전달된다.

  • 대량의 통신이 발생하게 되면 master node는 부하를 많이 받아 장애 발생 가능성이 커지게 되는데 master node 를 HA 클러스터로 운영하게 되면 통신량을 분산시킬 수 있고, 일부 master node에 장애가 발생되더라도 worker node의 운영환경에는 영향을 없을 수 있다.

핵심 기능

Automatic binpacking

  • 가용성에 대한 희생없이, 리소스 사용과 제약 사항을 기준으로 자동으로 컨테이너를 스케줄

Self-healing

  • 자동으로 문제가 발생한 node의 컨테이너를 대체(룰/정책에 따른 헬스 체크)

Horizontal scaling

  • CPU와 Memory 같은 리소스 사용에 따라 자동으로 애플리케이션을 확장, 경우에 따라서 사용자 정의 측정값을 기준으로 한 동적인 확장 가능

Service discovery and Load balancing

  • 컨테이너에 고유한 IP 부여. 여러 개의 컨테이너를 묶어 단일 서비스로 부여하는 경우 단일 name으로 접근하도록 로드 밸런싱 제공

Automatic rollouts and rollbacks

  • 다운타임 없이 애플리케이션의 새로운 버전 및 설정에 대한 롤아웃/롤백 가능

Secret and configuration management

  • 애플리케이션의 secret과 configuration 정보를 이미지와 독립적으로 구분하여 별도의 이미지 재생성 없이 관리

Storage and orchestration

  • 소프트웨어 정의 저장장치를 기반으로 로컬, 외부 및 저장소 솔루션 등을 동일한 방법으로 컨테이너에 마운트 하라 수 있음

Batch execution

  • CI 워크로드와 같은 Batch성 작업 지원, crontab 형식으로 스케줄링도 가능

0개의 댓글