본문 바로가기

ETC

쿠버네티스(Kubernetes)란?

728x90
반응형

Kubernetes란?

Kubernetes(쿠버네티스)는 컨테이너화된 애플리케이션을 자동으로 배포, 확장, 관리하는 오픈소스 플랫폼이다.

원래 Google에서 개발했으며, 2014년 CNCF(Cloud Native Computing Foundation)에 기부되었다.

컨테이너 기반의 현대 애플리케이션 아키텍처에서 Kubernetes는 표준적인 도구로 자리잡았으며, 특히 대규모 애플리케이션을 효율적으로 관리하는 데 유리하다.

컨테이너는 애플리케이션과 해당 애플리케이션이 실행되기 위해 필요한 모든 것을 패키징한 경량, 독립적 실행 환경이다. Kubernetes는 이러한 컨테이너를 클러스터 내 여러 노드에 자동으로 분산시키고 관리하는 역할을 한다.


Kubernetes의 주요 개념

  1. 클러스터(Cluster)
    • Kubernetes 클러스터는 여러 대의 물리적/가상 서버(노드)로 이루어진 집합이다. 클러스터는 두 가지 주요 구성 요소로 이루어져 있다.
      • 마스터 노드(Control Plane): 클러스터의 상태를 관리하고, 애플리케이션의 배포 및 관리를 총괄한다.
      • 워커 노드(Worker Node): 실제로 애플리케이션 컨테이너가 배포되고 실행되는 서버이다.
  2. 노드(Node)
    • 노드는 클러스터에서 워크로드를 실행하는 물리적 혹은 가상 머신이다. 각 노드는 다음과 같은 두 가지 주요 구성 요소를 가진다.
      • Kubelet: 각 노드에서 실행되며, 마스터 노드의 지시에 따라 컨테이너를 실행하고 상태를 보고한다.
      • 컨테이너 런타임: 컨테이너를 실행하는 도구로, Docker, containerd, CRI-O 등이 사용될 수 있다.
  3. 파드(Pod)
    • Pod는 Kubernetes에서 가장 작은 배포 단위이다. 하나 이상의 컨테이너가 묶여서 함께 실행된다. 보통 하나의 Pod에 하나의 컨테이너만 포함되지만, 여러 컨테이너가 서로 긴밀히 협력해야 할 경우 한 Pod에 배치될 수 있다. Pod는 노드 위에 배포되며, IP 주소를 공유하고 동일한 네트워크 네임스페이스에서 실행된다.
  4. 서비스(Service)
    • 서비스는 Pod의 네트워크 액세스를 추상화하여, 클러스터 내에서 Pod 간의 통신을 용이하게 하거나 외부 트래픽을 클러스터 내 Pod로 라우팅하는 데 사용된다. Pod는 동적으로 생성되거나 삭제될 수 있지만, 서비스는 안정적인 IP 주소와 DNS 이름을 제공하여 이러한 변화에 대응한다.
  5. 디플로이먼트(Deployment)
    • 디플로이먼트는 애플리케이션을 선언적으로 배포하고 관리하는 Kubernetes 객체이다. 특정 개수의 Pod가 항상 실행되도록 보장하고, 새로운 버전의 애플리케이션이 배포될 때 구버전의 Pod를 단계적으로 대체한다. 이를 통해 무중단 배포(rolling update)나 롤백이 가능하다.
  6. 레플리카셋(ReplicaSet)
    • ReplicaSet은 지정된 개수만큼 동일한 Pod의 복사본(레플리카)을 유지하는 역할을 한다. 만약 Pod가 죽으면 자동으로 대체 Pod를 생성하여, 항상 지정된 개수의 Pod가 실행되도록 보장한다. Deployment 객체는 내부적으로 ReplicaSet을 사용하여 Pod를 관리한다.
  7. 네임스페이스(Namespace)
    • Namespace는 클러스터를 여러 논리적인 단위로 나누는 방법이다. 대규모 클러스터에서 여러 팀이나 프로젝트가 독립적으로 리소스를 관리할 수 있도록 도와준다. 기본적으로 Kubernetes에는 default, kube-system, kube-public 등의 네임스페이스가 존재한다.
  8. 컨피그맵(ConfigMap) & 시크릿(Secret)
    • ConfigMap은 애플리케이션에서 사용할 수 있는 설정 데이터를 담고 있는 객체이다. 이 데이터는 일반 텍스트 형태로 저장된다.
    • Secret은 비밀번호, API 키 등 민감한 데이터를 저장하기 위한 객체이다. Base64로 인코딩된 형태로 저장되며, Pod에서 안전하게 액세스할 수 있다.

Kubernetes의 핵심 기능

  1. 자동화된 배포 및 복구
    • Kubernetes는 애플리케이션의 배포를 자동화할 뿐만 아니라, 문제가 발생했을 때 이를 자동으로 복구할 수 있다. 예를 들어, Pod가 실패하면 Kubernetes는 이를 감지하고 자동으로 새 Pod를 생성하여 애플리케이션의 가용성을 보장한다.
  2. 수평적 확장
    • Kubernetes는 수평적 확장을 지원하여, 워크로드의 증가에 따라 더 많은 Pod를 자동으로 생성하거나 줄일 수 있다. 이 기능은 클러스터의 리소스 활용을 최적화하고 비용을 절감하는 데 도움을 준다.
  3. 서비스 디스커버리와 로드 밸런싱
    • Kubernetes는 Pod 간의 통신을 쉽게 하고, 외부에서 클러스터 내 애플리케이션에 접근할 수 있는 다양한 방법을 제공한다. 서비스 객체를 사용하여 Pod의 네트워크 위치를 추적하고, 외부 트래픽에 대한 로드 밸런싱을 제공한다.
  4. 자동 롤아웃 및 롤백
    • 새로운 애플리케이션 버전을 배포할 때 무중단으로 롤아웃할 수 있으며, 문제가 발생하면 이전 버전으로 롤백할 수 있는 기능을 제공한다. 이를 통해 안정적인 애플리케이션 배포가 가능하다.
  5. 컨피그맵 및 시크릿 관리
    • Kubernetes는 환경 설정 데이터를 Pod에 주입하거나 민감한 정보를 안전하게 관리할 수 있는 방법을 제공한다. 이를 통해 애플리케이션 코드와 설정 데이터를 분리할 수 있다.
  6. 자체 복구(Self-healing)
    • 실패한 컨테이너를 자동으로 재시작하거나, 노드가 응답하지 않으면 다른 노드로 워크로드를 옮겨 클러스터의 안정성을 유지한다.
  7. 스토리지 관리
    • Kubernetes는 로컬, 네트워크 스토리지, 클라우드 스토리지와 같은 다양한 스토리지 백엔드를 지원하며, 동적으로 스토리지를 할당하거나 연결할 수 있다.

Kubernetes 사용의 장점

  1. 효율적인 리소스 관리: Kubernetes는 클러스터 전체에서 리소스를 최적화하여, 자동으로 애플리케이션 컨테이너를 배포, 스케일링, 관리한다.
  2. 확장성: 다양한 클라우드 환경 또는 온프레미스에서도 실행 가능하며, 클러스터 크기를 유연하게 조정할 수 있다.
  3. 애플리케이션의 가용성 보장: Pod의 장애를 감지하고 자동으로 복구해 애플리케이션의 안정성을 높일 수 있다.
  4. 유연한 배포 전략: Blue-Green Deployment, Canary Release 등 다양한 배포 전략을 쉽게 구현할 수 있다.

Kubernetes와 클라우드 네이티브 환경

Kubernetes는 클라우드 네이티브 애플리케이션의 핵심 기술로, 특히 마이크로서비스 아키텍처와 잘 맞는다.

마이크로서비스는 작은, 독립적으로 배포 가능한 서비스로 구성되며, 이러한 서비스를 관리하는 데 Kubernetes가 적합하다.

다양한 클라우드 제공업체(Google Cloud, AWS, Azure)는 모두 Kubernetes 기반의 Managed Kubernetes 서비스를 제공하여, 클러스터 관리를 더욱 편리하게 할 수 있다.


Kubernetes는 컨테이너화된 애플리케이션의 배포와 관리를 위한 강력하고 유연한 플랫폼 중 하나로, 현대 소프트웨어 개발에서 중요한 역할을 하고 있다.

728x90
반응형

'ETC' 카테고리의 다른 글

DDD (Domain-Driven Design)란?  (1) 2024.09.28
도커(Docker)란?  (0) 2024.09.27
[ETC] CORS ERROR란?  (0) 2024.09.25
[JavaScript] undefined와 null의 차이  (0) 2024.09.22
HTTP ERROR 정리  (0) 2024.09.19