Kubernetes 구조

squareBird·2022년 3월 28일
1

Kubernetes

목록 보기
3/17
post-thumbnail

Kubernetes 구조

Kubernetes는 컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리해주는 시스템입니다.


클러스터

Kubernetes 환경에서 가장 큰 구조는 Cluster입니다.

쿠버네티스 백서에서는 Cluster를 아래와 같이 정의하고 있습니다.

클러스터란 컨테이너화된 애플리케이션을 실행하는 노드라고 하는 워커 머신의 집합. 모든 클러스터는 최소 한 개의 워커 노드를 가진다.

KubernetesMaster Node(Control Plane)Worker Node로 이루어져 있으며, 각 노드 내부의 다양한 Component를 통해 동작합니다.

Kubernetes의 아키텍쳐는 위의 구성도를 참고해주세요.

Kubernetes Clusterapi-server, etcd, scheduler, controller 등의 컴포넌트가 설치된 Master Node(Controle Plane)와, kubeletkube-proxy, 컨테이너 런타임이 설치된 Worker Node로 구성됩니다.

거기에 추가적으로 Master Nodeapi-server와 통신하며 Cluster에 명령을 내릴 서버가 구성되어야 하는데, Master Node 내부에 구성할 수도 있고 로컬 PC에 구성할 수도 있습니다.


호스트 컴퓨터(로컬 PC)

Kubernetes 관리자는 kubectl을 이용해서 Kubernetes Cluster 에 명령을 내릴 수 있습니다.
kubectlKUBECONFIG 환경변수를 참조해 명령을 내릴 클러스터의 정보를 인식합니다.
KUBECONFIG 환경변수가 정의되어 있지 않다면 $HOME/.kube/config 파일을 참고합니다.

Master Node는 단일로 구성할 수 있지만 백업을 위해 여러대의 서버를 Master Node로 구성할 수 있으며, 다중 구성 시 항상 홀수개로 구성되어야 합니다.


Master Node

Master Node의 핵심 컴포넌트는 api-server, etcd, Scheduler, Controller로 구성되어 있습니다.
구성도상에 있는 Cloud Controller는 AWS, Azure, GCP와 같은 Public Cloud의 서버, 스토리지, 로드밸런서 등의 자원을 Kubernetes가 사용할 수 있도록 돕습니다.

Kubernetes 선언적인(declarative) 구조를 가지고 있습니다.
각 요소가 추구하는 상태(desired status)를 선언하면 현재 상태(current status)와 비교하여 맞는지 점검하고, 추구하는 상태에 맞추려고 노력하는 방식으로 설계되어 있습니다.

이렇게 api-server를 통해 선언한 추구하는 상태값들을 저장하는 장소가 etcd입니다.

api-server

  • Kubernetes 클러스터의 중심 역할을 하는 통로
  • Kubernetes api를 사용하도록 요청을 받고 요청이 유효한지 검사
  • kubectl이 설치된 로컬 머신에서 kubectl 명령어 수행시 문법, 권한 검사
  • api-serveretcd는 거의 한 몸으로 움직이게 설계됨

etcd

  • key-value 타입 저장소
  • 구성 요소들의 상태 값이 모두 저장되는 곳
  • etcd 외에 다른 구성 요소들은 상태값을 관리하지 않으므로 etcd를 잘 백업해두면 장애가 발생해도 etcd를 통해 쿠버네티스 클러스터 복구 가능
  • 분산 저장이 가능함, 복제해 여러 곳에 두면 하나의 etcd가 장애가 나도 시스템 가용성 확보

Scheduler

  • Pod를 실행할 노드 선택

Controller

  • Pod를 관찰하여 선언한 개수를 보장

Addon Component

  • Container Runtime(Docker, Containerd, Rocket 등)
  • Core DNS
  • CNI
  • Dashboard
  • ELK, EFK, Datadog 등 로깅 컴포넌트

Worker Node

Worker Node는 실제 컨테이너들이 배포되는 서버들입니다.
관리자는 Pod를 배포할 때 어떤 Worker NodePod를 배포할지 선택할 수도 있지만,
일반적으로는 scheduler에 의해 배포 대상 Worker Node가 선택됩니다.

워커노드의 핵심 컴포넌트들은 kubelet, kube-proxy, Container runtime(Docke 등)이 있습니다.

kubelet

  • 모든 노드에서 실행되는 Kubernetes 에이전트
  • 데몬 형태로 동작
  • c-Advisor 모니터링 툴이 들어있음
  • 워커노드에서 동작중인 kubelet이 정지되면 Container runtime에 요청을 보내는 역할을 수행해주는 컴포넌트가 정지되었으므로 Pod 생성, 삭제 등이 해당 노드에서 정상적으로 수행되지 않음

kube-proxy

  • Kubernetes의 network 동작을 관리
  • iptables rule을 구성
  • kube-proxy 서비스가 중단된 경우 네트워킹이 제대로 이루어지지 않음
  • Cluster IP를 통해 WEB 등 서비스 요청시 오류 발생

Container runtime

  • 컨테이너를 실행하는 엔진
  • docker, containerd, runc
profile
DevOps...

0개의 댓글