쿠버네티스 개념

업데이트:

개괄

Kubernetes(이하 k8s)는 MSA 구현 및 유지보수를 쉽게 하는 도구다.
작은 규모 서비스의 경우 Docker Compose, Docker Swarm… 으로 여러 컨테이너를 관리하는데 문제가 없었으나,
규모가 커짐에 따라 많은 컨테이너들을 관리하는데 애로사항이 생겼다.

k8s는 기존 오케스트레이션 도구들과 다르게, ‘상태’ 라는 개념으로 서비스를 관리한다.
Config yaml 파일에 해당 서비스가 유지되어야 하는 ‘상태’를 정의하고, k8s가 해당 상태가 유지될 수 있도록 관리한다는데…
개념만 들어서는 어떤식으로 동작하는지 잘 모르겠으니 일단 넘어가자.

상세 구성

  • ※ 그림 틀릴 수 있음

용어 정리

  • k8s Cluster
    Master Node + Worker Node

  • Node
    물리적인 컴퓨팅 환경, AWS 인스턴스 별로 각각 분배하자.

  • Master Node
    Worker 노드들을 관리한다.
    Control Plane 이라고도 하는데 Master Node의 api server를 통해 admin이 interface하기 때문에 지은 이름인 것 같다.

  • Worker Node
    Master Node에게 명령받아 Pod들을 관리, 구동시킨다.

  • Pod
    컨테이너들의 그룹. 컨테이너들을 묶어 단일 애플리케이션으로 동작하도록 구현한다.

Master Node 구성 요소

  • kube api server
    클러스터 내의 구성요소들에게 명령을 전달하는 인터페이스다.
    어드민은 kubectl 명령을 통해 master node에게 명령할 수 있다.

  • controller manager
    ‘컨트롤러’ 프로세스를 실행함.
    ‘컨트롤러’ 프로세스는 클러스터의 상태를 감시하고, 현재 상태를 원하는 상태로 이행시킴.

  • scheduler
    노드가 지정되지 않은 파드를, 어떤 노드에 배치하면 좋을지 스케쥴링한다.

  • etcd
    클러스터 내의 구성요소에 대한 정보가 Key-Value 형태로 저장된다.

  • Core-DNS
    클러스터 내부에서 특정 도메인을 찾아야 할 때 활용되는 DNS
    (내부에서도 도메인을 사용하는 경우가 있나보다. worker 노드에 domain name을 지정할 수 있나?)

Worker Node 구성 요소

  • kubelet
    기능1: kube api server를 통해 명령을 받는 인터페이스.
    기능2: Pod가 정상 동작하도록 감시.

  • kube-proxy
    모든 노드에서 프록시 서비스를 제공하고 네트워크 규칙을 관리한다.

  • pod
    컨테이너들의 그룹. 각 Pod 들은 다른 ip 주소를 분배받고, Pod 내의 Container들은 서로 localhost로 참조할 수 있다.

다음으로 할 일

AWS 인스턴스를 세 개 만들고, 하나를 Master, 두개를 Worker로 지정해보자.
가능하다면 express로 간단한 WAS를 만들어 파드들을 Worker 노드에서 동작시켜보자.

댓글남기기