ETC

쿠버네티스(k8s)의 구조 - 쿠버네티스 시리즈(1)

D_Helloper 2023. 6. 26. 21:39

용어 뜻

컨테이너 앱이 구동되는 환경까지 감싸서 실행할 수 있도록 하는 격리 기술
컨테이너 런타임 컨테이너를 다루는 도구
도커 컨테이너를 다루는 도구 중 하나
쿠버네티스 컨테이너 런타임을 통해 컨테이너를 오케스트레이션 하는 도구
오케스트레이션 여러 서버에 걸친 컨테이너 및 사용하는 환경 설정을 관리하는 행위
Pod 파드(Pod)는 쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위

쿠버네티스 ≠ 도커 관리 툴

정확하게는 도커를 관리하는 도구가 아니라, 컨테이너를 관리하는 도구

쿠버네티스란 ?

컨테이너화 된 애플리케이션의 배포, 확장 및 관리를 자동화하는 오픈 소스 시스템

  • 단순한 컨테이너 플랫폼이 아닌 마이크로서비스, 클라우드 플랫폼을 지향
  • 컨테이너로 이루어진 것들을 손쉽게 담고 관리할 수 있는 그릇 역할
  • 서버리스, CI/CD, 머신러닝 등 다양한 기능이 쿠버네티스 플랫폼 위에서 동작 가능

쿠버네티스의 등장 배경

애플리케이션 실행 환경의 변화

  • 전통적인 환경에서의 배포(On-Premise)
  • 가상환경에서의 배포(Virtual Machine)
  • 컨테이너로의 배포(Container)

출처 : https://www.codestates.com/blog/content/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4

전통적인 환경에서의 배포(On-Premise)

  • 물리적 서버에서 애플리케이션을 실행
  • 변경사항이 발생한 경우, 변경사항을 쉽게 적용하지 못하는 단점이 있음

출처 : https://www.codestates.com/blog/content/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4

 

출처 : https://www.codestates.com/blog/content/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4

가상 환경에서의 배포(Virtual Machine)

  • 물리적 환경에 대한 솔루션으로 가상화 도입
  • 단일 물리적 서버의 CPU에서 여러 대의 가상머신(VM)을 실행할 수 있도록 변함
  • 애플리케이션의 격리, 상호 간의 보안 환경을 유지할 수 있음

출처 : https://www.codestates.com/blog/content/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4

컨테이너로의 배포(Container)

  • 가상머신과 유사하지만, 자체 파일 시스템, CPU 공유, 메모리, 프로세스 공간 등이 있음
  • 기본 인프라에서 분리되기 때문에 클라우드 및 OS 배포 전반에 걸쳐 이식 가능

출처 : https://www.codestates.com/blog/content/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4

 

출처 : https://www.samsungsds.com/kr/insights/220222_kubernetes1.html

 

컨테이너의 계층구조

쿠버네티스의 주요 구성 요소

클러스터

  • 컨트롤 플레인 및 하나 이상의 컴퓨팅 머신 또는 노드로 구성된 클러스터는 최소 하나 이상의 컨트롤 패널 컴포넌트와, 이와 연결된 몇 개의 워커 노드로 구성

컨트롤 플레인

  • 쿠버네티스 노드를 제어하는 프로세스들이 모여있는 곳
  • 모든 태스크 할당이 시작되는 곳

1. etcd

  • 쿠버네티스 클러스터의 모든 데이터를 담고 있는 key-value 저장소
  • 인프라를 원하는 상태로 만들기 위해 정상 상태에 대한 snapshot 및 관리에 필요한 메타 데이터 저장

2. kube-api-server

  • 쿠버네티스 클러스터의 허브
  • 클라이언트와 etcd에 저장된 데이터 사이의 상호작용 중개
  • 사용자 (운영자), 클러스터 내 구성요소, 그리고 외부 컴포넌트가 서로 통신할 수 있도록 HTTP API 제공

3. kube-scheduler

  • 새로운 POD를 감지하여 어떤 워커노드에 실행시킬 지 선택
  • 노드의 현재 상태와 Pod의 요구사항 체크
  • 노드에 라벨 부여

4. kube-controller-manager

  • API 서버를 통해 클러스터의 다양한 컴포넌트들의 상태를 감지하고, 원하는 상태로 만드는 역할
  • 다양한 컨트롤러가 하나로 패키징되어 단일 프로세스 내에서 실행 되도록 함.

워커노드

  • kubelet : 다른 노드와 서로 통신하거나 컨테이너를 실행하는 등의 태스크를 실행할 수 있도록 함
  • 한 개 이상의 컨테이너가 자리잡고 있으며, 워커 노드는 실제로 애플리케이션이 실행되고 있는 곳

1. kubelet

  • 각 노드에서 실행되는 기본 노드 에이전트, 일종의 데몬
  • 컨테이너를 생성, 삭제하고 상태를 모니터링하며 마스터 노드와 통신 담당 역할
  • 쿠버네티스에서 생성되지 않은 컨테이너는 관리하지 않음

2. kube-proxy

  • 모든 워커 노드마다 실행되는 네트워크 프록시
  • 다른 Pod 간의 네트워크 통신과 클러스터 바깥에서 Pod로 네트워크 통신을 할 수 있게 해줌
  • 성능 상의 이유로 별도의 프록시 프로그램 대신 iptable 또는 IPVS를 사용, 즉 설정만 관리

3. 컨테이너 런타임 엔진(container Runtime Engine)

  • 노드에 배포된 파드(Pod) 내 컨테이너들을 구동시키는 엔진