Infra/Kubernetes

[쿠버네티스 입문] 4-1. 쿠버네티스 아키텍처

에드박 2023. 1. 5. 01:24

쿠버네티스 클러스터의 전체 구조

kubernetes 주요 컴포넌트 공식 문서 : https://kubernetes.io/docs/concepts/overview/components/

 

쿠버네티스 클러스터는 크게 두 종류의 서버로 구성

  • 마스터 (master)
    • etcd, kube-apiserver, kube-scheduler, kube-controller-manager, kubelet, kube-proxy, docker 등의 컴포넌트가  master에서 실행됨
    • 마스터는 보통 고가용성을 만족하고자 서버 3대정도 구성해서 운영.
    • 실제 클러스터를 관리하는 리더 마스터 1대 / 나머지 2대는 대기
    • 리더 마스터에 장애 발생 시, 대기하던 마스터가 리더 역할로 교체함
  • 노드 (node)
    • kubelet, kube-proxt, docker 등의 컴포넌트가 node에서 실행됨
    • 쿠버네티스 초기에는 minion (미니언) 이라고 명명했음

마스터와 노드의 구성과 통신 구조

쿠버네티스의 모든 통신은 kube-apiserver 가 중심

kube-apiserver 를 거쳐 다른 컴포넌트가 서로 필요한 정보를 주고받음

(특히 etcd 에는 kube-apiserver만 접근할 수 있음)

  • kubelet 이 mater에 있는 도커를 관리
  • 도커 안에는 쿠버네티스 관리용 컴포넌트가 들어있음
  • etcd 는 컨테이너로 설정할 수 있지만, 별도의 서버 프로세스로 설정될 수 있음
  • node 역시 kubelet으로 도커를 관리, 마스터의 kube-apiserver와 통신하면서 파드의 생성, 관리, 삭제를 담당
  • 노드의 kube-proxy는 마스터와 다르게 컨테이너가 아니라 서버 프로세스로 실행 가능

마스터용 컴포넌트

etcd, kube-apiserver, kube-scheduler, kube-conrtoller-manager, cloud-controller-manager

  • etcd : 코어 OS에서 개발한 고가용성을 제공하는 Key-Value 저장소. 쿠버네티스에서 필요한 모든 데이터를 저장하는 데이터베이스 역할
    • etcd는 서버 하나당 프로세스 1개만 사용가능.
    • etcd 자체를 클러스터링한 후 여러개 마스터 서버에 분산하여 실행하여 데이터 안정성을 보장하도록 구성하는것이 좋음. 
    • 더 안정적이려면 etcd의 데이터를 주기적으로 백업할 것
  • kube-apiserver : 쿠버네티스 클러스터의 API를 사용할 수 있도록 하는 컴포넌트
    • 요청이 유효한지 검증도 담당
    • 쿠버네티스에 보내는 모든 요청은 kube-apiserver를 이용해서 다른 컴포넌트로 전달
    • kube-apiserver 는 수평적으로 확장 서버 여러대에 여러개의 kube-apiserver 사용 가능
  • kube-scheduler : 현재 클러스터 안에서 자원 할당이 가능한 노드 중 알맞은 노드를 선택해서 새롭게 만든 파드를 실행
  • kube-controller-manager : 파드들을 관리하는 컨트롤러 각각을 실행하는 컴포넌트
  • cloud-controller-manager : 쿠버네티스의 컨트롤러들을 클라우드 서비스와 연결해 관리하는 컴포넌트
    • cloud-controller-manager는 다음 네 가지 컨트롤러 컴포넌트를 관리
    • 노드 컨트롤러 : 클라우드 서비스 안에서 노드를 관리하는데 사용
    • 라우트 컨트롤러 : 각 클라우드 서비스 안의 네트워크 라우팅을 관리하는데 사용
    • 서비스 컨트롤러 : 각 클라우드 서비스에서 제공하는 로드밸런서를 생성, 갱신, 삭제하는 데 사용
    • 볼륨 컨트롤러 : 클라우드 서비스에서 생성한 볼륨을 노드에 연결하거나 마운트하는 데 사용

노드용 컴포넌트

kubelet, kube-proxy, 컨테이너 런타임

  • kubelet : 클러스터 안 모든 노드에서 실행되는 에이전트. 파드 컨테이너들의 실행을 직접 관리
    • PodSpecs이라는 조건이 담긴 설정을 전달받아 컨테이너를 실행하고 컨테이너가 정상적으로 실행되는지 헬스 체크 진행
    • 단, 노드안에 있는 컨테이너라도 쿠버네티스가 만든 컨테이너가 아니면 관리하지 않음
  • kube-proxy : 쿠버네티스는 클러스터 안에 별도의 가상 네트워크의 동작을 관리하는 컴포넌트
    • 호스트의 네트워크 규칙을 관리하거나 연결을 전달할 수도 있음
  • 컨테이너 런타임 : 실제로 컨테이너를 실행시킴. 
    • 보통 컨테이너 표준을 정하는 OCI의 런타임 규격을 구현한 컨테이너 런타임이라면 쿠버네티스에서 사용 가능