[쿠버네티스] 쿠버네티스와 노드, 회사와 부서의 관계랄까나,,

Woonil·2025년 8월 19일
0

쿠버네티스

목록 보기
1/1
post-thumbnail

하나의 물리적인 컴퓨터에서 여러 애플리케이션을 실행하고자 가상화 방식이 도입되었고, 그보다 격리 속성을 완화하여 애플리케이션 간 OS를 공유하는 컨테이너 방식이 등장하였다. 컨테이너 개발 방식으로 여러 애플리케이션을 손쉽게 실행하고 중지시킬 수 있게 되었다. 결국 각 애플리케이션을 컨테이너 단위로 운영할 수 있게 되었는데, 이들을 어떻게 통제할 것인가?

전통적인 컴퓨터 위에서 OS가 여러 애플리케이션을 조작하기 위해 각 애플리케이션의 생명주기를 담당했었듯, 컨테이너들의 생명주기를 관리할 수 있는 무엇인가가 필요한 시점이 온 것이다.

쿠버네티스(Kubernetes, K8s)는 이러한 필요성 때문에 등장하였으며, 이를 한마디로 정의하면 ‘컨테이너를 지원하는 일종의 운영체제’라고 할 수 있겠다.

쿠버네티스는 ‘조타수(숙련된 선원)’라는 뜻을 갖는 그리스어다.

쿠버네티스는 구글이 내부에서 사용하던 컨테이너 관리 시스템에서 파생되었다. 2014년 오픈소스로 제공되었으며, 현재는 CNCF(Cloud Native Computing Foundation)에서 관리하고 있다. 쿠버네티스(Kubernetes)는 컨테이너 오케스트레이션 도구로 컨테이너화된 애플리케이션의 배포, 확장 및 운영을 자동화하며, Go lang으로 작성되었다.

도커 컨테이너를 클러스터로써 관리하기 위해 필요한 기능적 요건

  • 물리적인 호스트의 자원부족을 해결하는 방법으로 여러 서버를 병렬 확장하여 클러스터로 구성
  • 새로운 서버, 컨테이너 추가에 대한 탐지
  • 컨테이너 스케줄링 기능
  • 서버 다운 시 고가용성 보장
  • 주요 개념
    • 클러스터(Cluster): 컨테이너화된 애플리케이션을 실행하기 위한 물리적 또는 가상 컴퓨팅 리소스(노드)의 모음으로, 일반적으로 Control plane(마스터 노드)와 Data plane(워커 노드)로 구분한다.
    • 파드(Pod): 배포와 관리의 기본 단위로, 네트워크와 스토리지를 공유하는 하나 이상의 컨테이너 세트이다.
      • pod당 하나의 IP 할당
      • 스케줄링 최소 단위
      • 특정 네임스페이스에 launch
    • 네임스페이스(Namespace): 하나의 클러스터를 여러 개의 논리적인 단위로 나눠서 사용하게 될 때의 단위이며, 일반적으로 용도에 따라 실행해야 하는 앱을 구분할 때 사용한다. 네임스페이스 삭제 시 내부 자원들도 모두 삭제된다.
    • 볼륨(Volume): 컨테이너는 기본적으로 휘발성 스토리지를 사용하기 때문에 Pod가 재시작되면 데이터가 사라진다. 이를 보완하기 위해 쿠버네스는 데이터 영속화(Storage) 메커니즘을 제공한다.
    • API version: Kubernetes 리소스 및 기능이 어떻게 변경되고 발전하는지 관리하기 위해 사용되는 체계로, kubernetes object 정의시 api version이 필요하다. 각 리소스나 기능은 특정 API 그룹에 속하며, 이 그룹은 API 버전으로 구분된다. 주요 api 버전으로는 v1, alpha, beta, stable이 있다.

🤔개념

구성요소

[출처: 쿠버네티스 공식 홈페이지]

Control Plane(Master node)

Date Plane들의 상태를 관리하고 제어하는 노드로, 하나 또는 하나 이상으로 구성 가능하다. 이 노드에는 4인방(Static Pod)이 존재한다.

  • API server: 쿠버네티스 클러스터의 모든 명령과 요청을 처리하는 중앙 통제소
    • 모든 요청을 수신하는 역할을 한다.
    • K8s API를 사용하도록 요청을 받고 요청이 유효한지 검사한다.
    • 클러스터의 현재 상태를 etcd에 저장하고, 이를 바탕으로 상태를 관리한다.
    • 복수개 허용(active-active)
  • Scheduler
    • 클러스터의 리소스 사용 현황을 모니터링하고, Pod를 배치할 노드(Data Plane)를 선택한다.
    • API를 통해 업데이트된 파드 상태를 etcd에 전송한다.
    • API를 통해 Kubelet에 통보하고, 통보받은 Data Plane 내의 Kubelet이 해당 노드에서 파드를 생성한다.
    • 다중 스케줄러 사용 가능
    • active-standby
  • etcd: 쿠버네티스 클러스터의 모든 데이터(설정 및 상태 정보)를 저장하는 분산 키-값 저장소
    • 분산된 환경에서 데이터의 일관성과 신뢰성을 보장한다.
    • 여러 복제본을 유지하여 데이터 손실을 방지하고 고가용성을 제공한다.
  • Cloud controller manager (optional): 클라우드에 쿠버네티스 구축 시 클라우드 서비스 제공자(CSP)의 스토리지, 네트워크 등의 서비스 간의 상호 작용을 관리하는 역할
    • pod를 관찰하며 개수를 보장한다.
    • active-standby

Data Plane(Worker node)

도커 플랫폼을 통해 컨테이너를 동작시키며 실제로 서비스를 제공하는 노드이다. 이 노드에는 3인방이 존재한다.

  • Kubelet: 한마디로 자신의 노드 내 pod와 컨테이너의 생명주기를 관리하는 통제소’라 할 수 있겠다.
    • API 서버로부터 Pod 사양을 받아서 해당 노드에서 실행되는 컨테이너를 시작하고 모니터링한다.
    • 각 Pod와 컨테이너의 상태를 지속적으로 확인하고, 문제가 발생하면 재시작하거나 복구 조치를 취한다.
    • 노드의 상태 정보를 API 서버에 보고하여 클러스터 단위로의 관리를 가능하게 한다.
  • Kube-proxy: 쿠버네티스 클러스터의 네트워킹을 관리하여, 서비스 간의 통신을 가능하게 한다. API 서버와 상호작용하여 서비스와 엔드포인트 간의 네트워크 트래픽을 라우팅한다.
    • 서비스에 대한 요청(부하)을 여러 Pod에 분산한다(로드 밸런싱).
    • IP주소 및 포트를 관리한다.
    • 트래픽 처리: 서비스의 ClusterIP와 NodePort를 관리하여 외부 및 내부 트래픽을 처리한다.
    • 네트워크 규칙 관리: iptables 또는 IPVS를 사용하여 클러스터 내의 네트워크 규칙을 관리한다. 이러한 규칙은 서비스와 엔드포인트 간의 트래픽 흐름을 정의하며, kube-proxy는 이 규칙들을 동적으로 업데이트하여 클러스터 상태의 변화를 반영한다.
      • 엔드포인트 연결을 위한 iptables를 구성 ⇒ 클라이언트의 service API 요청 시 iptables rule이 생성된다.
  • Container run time: 컨테이너의 실제 실행을 담당하는 소프트웨어이다. ex0 containerd, CRI(Container Runtime Interface)-O 등
    • 컨테이너 관리: 컨테이너의 생성, 실행, 중지 등을 담당한다.
    • 이미지 관리: 컨테이너 이미지를 다운로드하고 저장하며, 이를 기반으로 컨테이너를 실행한다.

주요 배포 전략

배포 전략설명활용되는 경우장점단점
Recreate모든 기존 파드를 먼저 종료 후 새 파드를 생성하는 방식다운타임이 허용되는 단순 업데이트 시 주로 사용됨.간단하고 명확전체 애플리케이션의 다운타임이 존재함.
롤링 업데이트새 버전의 파드를 순차적으로 교체하여 다운타임을 최소화하고 애플리케이션의 가용성을 유지.가용성 유지 / 점진적 업데이트 / 다운타임 최소화업데이트 중 문제가 발생 시 전체 클러스터가 영향 받을 수 있음.
Blue-Green 배포두 개의 환경 Blue, Green을 사용하여 배포하는 방식으로, Green 환경에 새 버전을 배포하고 테스트한 후, 트래픽을 Green 환경으로 전환. 문제가 발생하면 Blue 환경으로 롤백.무중단 배포 / 빠른 롤백 가능두 배의 리소스 필요 / 복잡한 트래픽 전환 전략 필요
Canary 배포새 버전의 일부 파드를 배포하여 트래픽의 일부를 해당 파드로 보내고, 문제가 없으면 점진적으로 전체 배포를 진행하는 방식.점진적 업데이트 / 문제 발생 시 빠른 롤백 가능배포 관리 복잡성 증가 / 트래픽 라우팅 필요
A/B Testing두 가지 버전을 제공하여 사용자들에게 제공하고, 그 결과를 바탕으로 한 가지 버전을 선택하여 배포하는 방식.주로 UI/UX 개선 테스트에 사용됨.사용자 반응 테스트 가능 / 데이터 기반 의사결정 가능테스트 설정 복잡성 증가 / 분석 도구 필요

도움되는 사이트
쿠버네티스 플레이그라운드: Killercoda Interactive Environments

참고자료
쿠버네티스란 무엇인가?

profile
프론트 개발과 클라우드 환경에 관심이 많습니다:)

0개의 댓글