우와한 개발자

[Kubernetes] 쿠버네티스(Kubernetes)란? 아키텍처와 리소스

by 우와한개발자

1. 쿠버네이스란?

  • 컨테이너를 자동으로 배포,관리,복구해주는 오케스트레이션 도구

 

2. 쿠버네티스 특징

1) 컨테이너 오케스트레이션

  • 여러개의 컨테이너를 클러스터(묶음)로 관리
  • 어떤 컨테이너가 죽으면 복구하고 각 컨테이너가 얼만큼의 리소스를 가지고 있는지 모니터링 등

 

2) 자동 스케일링

  • 사용자가 정의한 규칙에 따라 자동으로 서비스 인스턴스(컨테이너)수 조절

 

3) 서비스 디스커버리와 로드 밸런싱

  • 클러스터 내에서 서비스들이 서로 찾고 통신하도록 하고 트래픽 분산시킴

 

4) 롤링 업데이트와 롤백

  • 업데이트 정상적으로 업데이트 하거나 이전 버전으로 롤백하도록함

 

5) 선언적 구성(Declarative Configuration)

  • YAML이나 JSON 형식으로 어플리케이션 상태 정의
구분 명령적 (Imperative) 선언적(Declarative)
방식 "이렇게 해라" "이런 상태여야 해"
관리 내가 직접 쿠버네티스가 알아서
예시 docker run kubectl apply -f
파일 없음 YAML 파일

 

3.쿠버네티스 아키텍처 및 용어

1) 마스터노드 Master Node

  • 클러스터를 제어하고 관리하는 노드
  • 주요 구성요소로 API 서버, 스케줄러, 컨트롤러 매니저 등

(1) API 서버

  • 클러스터의 상태를 관리하고 사용자 및 다른 컴포넌트와의 상호 작용을 처리

(2) 스케줄러 scheduler

  • 새로운 파드를 노드에 할당

(3) 컨트롤러 매니저 controller manager

  • 클러스터 상태 감시 및 조절

 

2) 워커노드 Worker Node

  • 컨테이너가 실행되는 노드
  • 주요 구성요소로 kubelet, 컨테이너 런타임, kube-proxy

(1) kubelet

  • 마스터로부터 할당된 파드(pod)를 실행하고 상태를 보고함

(2) 컨테이너 런타임

  • 컨테이너를 실행하고 관리

(3) kube-proxy

  • 서비스와 관련된 네트워크 프록시 및 로드 밸런싱
❓CNI(Container Network Interface)
- 컨테이너 간의 네트워킹을 제어할 수 있는 플러그인을 만들기 위한 표준

 

3) etcd

  • 클러스터 전체 저장소
  • key:value 형태로 저장
  • Replicated State Machine(RSM) : 똑같은 데이터를 여러 서버에 계속하여 복제해 여러 서버가 항상 똑같은 상태를 유지하는 방식
  • CAP 원칙 준수
❓CAP 이론
- 분산 시스템에서 일관성(Consistency), 가용성(Availability), 파티션 허용성(Partition Tolerance) 세 가지 특성을 동시에 모두 만족하는 것은 불가능하며, 최대 두 가지만 보장할 수 있다는 이론
- 일관성 (Consistency): 모든 클라이언트가 어느 노드에 접근하든 항상 동일한 데이터를 조회할 수 있음을 보장
- 가용성 (Availability) : 시스템의 일부 노드에 장애가 발생하더라도 모든 요청에 대해 정상적인 응답을 반환할 수 있는 능력
- 파티션 허용성 (Partition Tolerance) : 노드 간 네트워크 통신이 끊어지거나 지연되더라도 시스템이 운영을 계속할 수 있는 능력

 

4) 파드 pod

(1) 파드(pod)란

  • 쿠버네티스에서 가장 작은 배포 단위
  • 하나 이상의 컨테이너를 포함하는 단위(컨테이너와 )
  • 여러 개의 컨테이너가 동일한 네트워크 네임스페이스, IPC(Inter-Process Communication) 네임스페이스, UTS(UNIX Time-Sharing) 네임스페이스 등을 공유하면서 함께 배포되고 관리

(2) 특징

  • 단일 노드 내에서 실행됨
  • 클러스터 내에서 고유한 IP주소를 가지고 이 IP주소로 다른 pod와 통신함
  • 파드 내 컨테이너들은 네트워크, IPC, UTS 등의 네임스페이스를 공유해 자원 및 정보 공유
  • 파드 내 컨테이너들은 동일한 볼륨 공유 가능

 

5) 서비스 service

(1) 서비스란

  • 여러 파드를 묶어서 하나의 가상 서비스롤 노출시키는 리소스
  • 고유한 DNS 이름을 가지고 이를 통해 파드에 접근
  • DNS 형식 : 서비스이름.네임스페이스.svc.cluster.local 형식
  • 서비스에 속한 파드 간의 로드 밸런싱 수행

(2) 서비스 유형

  • ClusterIP: 기본적인 서비스 유형으로, 클러스터 내에서만사용 가능한 가상 IP를 부여하며, 외부에서 접근할 수 없음
  • NodePort: 클러스터의 각 노드에 지정된 포트(port)로 서비스를 노출하여 외부에서 해당 노드의 IP와 지정된 포트(port)로 서비스에 접근할 수 있음
  • LoadBalancer: 클라우드 제공업체에서 제공하는 로드밸런서를 사용하여 외부에서 서비스에 접근할 수 있도록함
  • ExternalName: 외부 서비스에 대한 CNAME을 제공하여 클러스터 내부에서 외부 서비스에 접근할 수 있도록 함

 

6) 디플로이먼트(Deployment)

  • ReplicaSet을 관리하면서, 배포 전략(업데이트,롤백 등)까지 책임지는 상위 리소스
  • 선언적 구성 : yaml이나 json파일에 애플리케이션의 원하는 상태를 선언
  • 자동 롤링 업데이트 및 자동 스케일링
  • 디플로이먼트는 내부적으로 레플리카셋을 사용하여 원하는 상태를 유지

 

7) 레플리카셋(ReplicaSet)

  • 지정된 수만큼 Pod(파드)의 복제본을 항상 유지해주는 리소스

그외에도 Namespace, ConfigMap, Job, Ingress 등의 리소스가 있음

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기