[Kubernetes] Architecture

pingping·2021년 2월 7일
0

Kubernetes

목록 보기
1/10
post-thumbnail

Architecture

  • 동양북스의 쿠버네티스 입문 책을 보면서 정리하였습니다.

  • 각 컴포넌트의 중심에 kube-apiserver가 있다. 쿠버네티스의 모든 통신은 kube-apiserver가 중심!
  • 특히 etcd는 kube-apiserver만 접근할 수 있다.

Preview

Master

  • kubelet이 Master에 있는 Docker를 관리한다. Docker 안에는 k8s 관리용 컴포넌트인 kube-scheduler, kube-controller-manager, kube-apiserver, kube-proxy가 있다. 초기 k8s는 관리용 컴포넌트들을 컨테이너가 아니라 Process로 실행했지만 최근에는 Container로 실행된다.

Node

  • Node Kubelet으로 Docker를 관리한다. Kubelet은 Master의 kube-apiserver와 통신하면서 Pod의 생성, 관리, 삭제 등 Life-Cycle을 담당한다.

  • Node의 kube-proxy는 서버 프로세스로 실행할 수도 있고 컨테이너로도 실행할 수 있다.

    ( Master의 kube-proxy는 Container로 관리한다. )

Kubernetes의 주요 Components

k8s는 여러가지 컴포넌트들로 구성되어 있으며 3가지로 구분한다.

쿠버네티스 내부 아키텍쳐를 이해하는 것은매우 중요한 일이므로 꼭 이해가 갈 때까지 학습할 수 있도록 하자.

  • 그림 출처 : Finda-tech에서 퍼옴

[1] Master용 Component

1) etcd

  • 코어OS에서 개발한 고가용성을 제공하는 Key-Value 저장소이다.
  • 분산 시스템에서 노드 사이의 상태를 공유하는 합의 알고리즘 중 하나인 raft 알고리즘을 구현한 것이다.
  • etcd 자체는 꽤 안정적이지만 더 안정적으로 쿠버네티스를 운영하기 위해서는 주기적으로 etcd에 있는 데이터를 백업할 것을 권장한다.

2) kube-apiserver

  • 쿠버네티스 클러스터의 API를 사용할 수 있도록 하는 컴포넌트

  • 클러스터로 온 요청(Request)이 유효한지를 검증한다. (Validation)

    ⇒ 클라이언트의 요청에 사용된 토큰이 해당 네임스페이스와 자원을 대상으로 요청을 실행할 권한이 있는지 검사하고 권한이 있다면 특정 오브젝트의 목록을 조회하여 되돌려준다.

    ( ex. Deployment 목록 조회, .. )

  • 쿠버네티스에 보내는 모든 요청은 kube-apiserver를 이용해서 다른 컴포넌트로 전달한다.

3) kube-scheduler

  • 현재 클러스터 안에서 자원 할당이 가능한 노드 중 알맞은 노드를 선택해서 새롭게 만든 파드를 실행한다.

    ex) 하드웨어 요구 사항, 어피니티 (함께 있어야 하는 파드들을 같은 노드에 실행하도록 ..),

    안티 어피니티 (파드를 다양한 노드로 분산해서 실행 ..), 특정 데이터가 있는 노드에 할당, ..

4) kube-controller-manager

  • 파드들을 관리하는 Controller
  • 모든 Controller를 바이너리 파일 하나로 컴파일해 단일 프로세스로 실행한다.
  • 컨트롤러 각각을 실행하는 컴포넌트이다.

5) cloud-controller-manager

  • 쿠버네티스의 컨트롤러들을 클라우드 서비스와 연결해주는 컴포넌트
  • 보통 다음 4가지 컨트롤러 컴포넌트를 관리한다.
    • Node Controller
    • Route Controller
    • Service Controller
    • Volume Controller

[2] Node용 Component

1) kubelet

  • 클러스터 안 모든 노드에서 실행되는 Agent이다.
  • Pod의 실행을 직접 관리한다.
    • kubelet은 파드스펙이라는 조건을 담긴 설정을 전달받아서 컨테이너를 실행하고 컨테이너가 정상적으로 실행되는지 헬스체크를 진행한다.

2) kube-proxy

  • 클러스터 안에 별도의 가상 네트워크의 동작을 관리하는 컴포넌트
  • 호스트의 네트워크 규칙을 관리하거나 연결을 전달할 수 있다.

3) Container Runtime

  • 실제로 컨테이너를 실행시킨다.
  • 도커, Crio, Containerd 등이 있다.

[3] Addon용 Component

  • 클러스터 안에서 필요한 기능을 실행하는 파드
  • Namespace는 kube-system ..

1) Networking Addon

2) DNS Addon

  • 클러스터 안에서 동작하는 DNS 서버

  • 쿠버네티스 서비스에 DNS 레코드를 제공한다. 쿠버네티스 안에 실행된 컨테이너들을 자동으로 DNS 서버에 등록된다.

  • 주로 사용되는 DNS 애드온에는 kube-dns와 CoreDNS가 있다.

    ⇒ 1.13 버전부터는 CoreDNS가 기본 DNS 애드온이 되었다.

3) Dashboard Addon

4) Container Resource Monitoring

  • 클러스터 안에서 실행 중인 컨테이너의 상태를 모니터링하는 애드온

  • CPU 및 메모리 사용량 같은 데이터들을 시계열 형식으로 저장하여 볼 수 있다.

  • kubelet 안에 포함된 cAdvisor라는 컨테이너 모니터링 도구를 사용한다.

    ⇒ cAdvisor에서는 자원 사용량 데이터를 수집하는 메트릭 서버를 손쉽게 모니터링에 이용 !

Cluster Logging

  • 클러스터 안 개별 컨테이너의 로그와 쿠버네티스 구성 요소의 로그들을 중앙화한 로그 수집 시스템에 모아서 보는 애드온
  • EFK 혹은 ELK를 많이 사용한다.
profile
Cloud Infra Engineer & interested in python, IaC, k8s

0개의 댓글