본문 바로가기
K8S

Kubernetes 기술 개념 정리 1

by 나하니인데 2024. 12. 3.
반응형
반응형

1.  etcd란? etcd 특징은?

etcd는 CoreOS 팀이 개발한 오픈소스 분산 키-값(key-value) 데이터베이스로, 주로 분산 시스템에서 구성 관리 및 서비스 디스커버리(service discovery) 를 목적으로 사용됩니다.

 

특징:

 

  • 일관성 보장: 데이터의 일관성을 보장합니다. 클러스터 내 모든 노드가 동일한 데이터를 유지합니다.
  • 안전한 통신: HTTPS를 지원하여 안전하게 데이터 통신을 할 수 있습니다.
  • 간단한 API: HTTP + JSON API를 통해 애플리케이션이 쉽게 통신할 수 있습니다.
  • 빠른 성능: 초당 1,000개 이상의 쓰기 요청을 처리할 수 있는 빠른 성능을 제공합니다.

 

서비스 디스커버리(service discovery) 란? 

분산 시스템이나 마이크로서비스 아키텍처에서 개별 서비스가 서로를 동적으로 찾고 통신할 수 있도록 지원하는 메커니즘을 말합니다.

예를 들어, 서비스가 여러 대의 서버에 배포되었거나, 컨테이너화된 환경에서 동적으로 생성/삭제되는 경우, 어떤 IP 주소와 포트로 특정 서비스를 호출해야 하는지를 자동으로 알아내는 과정을 뜻합니다

 

etcd에 저장되는 주요 내용:

클러스터 구성 정보:

  • Kubernetes 클러스터의 노드 정보와 네트워크 구성.
{
  "kind": "Node",
  "metadata": {
    "name": "node-1",
    "labels": {
      "role": "worker"
    }
  },
  "status": {
    "capacity": {
      "cpu": "4",
      "memory": "8Gi"
    }
  }
}

 

Pod 및 Deployment 상태:

현재 실행 중인 Pod, Deployment, ReplicaSet 등의 상태 정보.

{
  "kind": "Pod",
  "metadata": {
    "name": "nginx-pod",
    "namespace": "default"
  },
  "spec": {
    "containers": [
      {
        "name": "nginx",
        "image": "nginx:latest"
      }
    ]
  },
  "status": {
    "phase": "Running",
    "podIP": "192.168.1.100"
  }
}


등등 이런식으로 etcd는 Kubernetes 클러스터의 모든 상태와 메타데이터를 저장하는 중앙 저장소입니다. 노드, Pod, 서비스, ConfigMap, Secret, RBAC 등과 관련된 데이터를 포함하며, 클러스터의 정상적인 동작과 복구를 위해 필수적인 역할을 합니다.

 

2.  쿠버네티스(Kubernetes)란?

쿠버네티스(Kubernetes, K8s) 는 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하는 오픈소스 컨테이너 오케스트레이션 플랫폼입니다.
구글에서 처음 개발되었으며, 현재는 클라우드 네이티브 컴퓨팅 재단(CNCF)에서 관리하고 있습니다.

 

3.  쿠버네티스의 주요 기능:

  1. 컨테이너 오케스트레이션: 수백~수천 개의 컨테이너를 효율적으로 관리하고 조율합니다.
  2. 자동화된 배포 및 롤백: 애플리케이션을 자동으로 배포하거나 업데이트하며, 문제가 발생하면 자동으로 이전 상태로 롤백합니다.
  3. 서비스 디스커버리 및 로드 밸런싱: 컨테이너에 IP와 DNS 이름을 자동으로 할당하며, 여러 인스턴스 간 로드 밸런싱을 지원합니다.
  4. 스토리지 오케스트레이션: 로컬 스토리지, 클라우드 스토리지, 네트워크 스토리지 등 다양한 스토리지를 자동으로 연결합니다.
  5. 자동 확장 및 축소: 애플리케이션의 트래픽이나 리소스 사용량에 따라 컨테이너 개수를 동적으로 늘리거나 줄입니다.
  6. 자가 치유(Self-healing): 실패한 컨테이너를 감지하고 교체하며, 문제가 있는 컨테이너를 재시작하거나, 필요한 경우 다시 스케줄링합니다.
  7. 구성 및 보안 관리: 애플리케이션의 설정 정보와 보안 키를 안전하게 저장하고 관리합니다.

 

4.  쿠버네티스와 Docker 관게:

Docker는 컨테이너의 생명주기 관리와 Docker 이미지 생성 및 컨테이너 실행을 담당합니다. Docker의 주요 장점은 소프트웨어나 애플리케이션 실행에 필요한 설정과 의존성을 하나의 컨테이너에 패키징하여 이식성을 제공한다는 점입니다.

 

Kubernetes는 여러 호스트에서 실행되는 컨테이너를 연결하고 오케스트레이션(조율)하는 역할을 합니다.

 

5.  Minukube, Kubectl, Kubelet 란?

  • Minikube: 로컬에서 간단히 단일 노드 Kubernetes 클러스터를 실행할 수 있는 도구입니다.
  • Kubectl: Kubernetes 클러스터를 관리하는 명령줄 도구로, 클러스터 리소스 확인, 구성 요소 생성/삭제/업데이트, 애플리케이션 상태 조회 등을 수행할 수 있습니다.
  • Kubelet: 각 노드에서 실행되는 에이전트 서비스로, 워커 노드와 마스터 서버 간 통신을 담당합니다.

 

 

6. Kubernetes가 클러스터 관리를 구현하는 방법

Kubernetes는 클러스터 관리 측면에서 클러스터 내의 머신을  마스터 노드(Master Node)워크 노드(Worker Node) 로 나눕니다.마스터 노드(Master Node):
클러스터 관리와 관련된 프로세스인 kube-apiserver, kube-controller-manager, kube-scheduler가 실행됩니다. 이 프로세스들은 다음과 같은 기능을 제공합니다:

리소스 관리, Pod 스케줄링, 자동 확장, 보안 제어, 시스템 모니터링, 오류 수정 이 모든 작업은 자동화되어 실행됩니다.

 

7. Kubernetes의 단점 또는 현재 한계점

Kubernetes가 현재 가지고 있는 단점(한계점)은 다음과 같습니다:

  1. Kubernetes 대시보드는 예상만큼 도움이 되지 않습니다.
  2. 설치 과정 및 구성의 복잡성: Kubernetes를 설치하고 구성하는 과정이 비교적 어렵고 복잡합니다.
  3. 서비스 관리의 번거로움: 클러스터 내 서비스와 리소스를 관리하는 데 시간이 많이 걸릴 수 있습니다.
  4. 실행 및 컴파일 시간 소요: 애플리케이션을 실행하거나 컴파일하는 데 많은 시간이 필요할 수 있습니다.
  5. 비용 문제: 다른 대안에 비해 운영 비용이 더 높을 수 있습니다.
  6. 단순한 애플리케이션에는 불필요: 단순한 애플리케이션의 경우 Kubernetes를 도입하지 않아도 충분히 요구를 충족할 수 있습니다

 

8. Kubernetes 관련 기본 개념

 

Master:
Kubernetes 클러스터의 관리 노드로, 클러스터를 관리하고 클러스터의 리소스 데이터 접근을 제공합니다.

  • etcd 저장 서비스를 선택적으로 포함할 수 있습니다.
  • Api Server, Controller Manager 서비스 프로세스 및 Scheduler 서비스 프로세스를 실행합니다.

Node (worker):
Node(worker)는 Kubernetes 클러스터 아키텍처에서 Pod을 실행하는 서비스 노드로, Kubernetes 클러스터의 작업 단위입니다.

  • Pod 실행을 담당하며, Pod의 호스트 머신 역할을 합니다.
  • Docker Engine 서비스, 데몬 프로세스인 kubelet, 그리고 로드 밸런서 kube-proxy를 실행합니다.

Pod:
Node 노드에서 실행되는 관련된 여러 컨테이너의 조합입니다.

  • Pod에 포함된 컨테이너는 동일한 호스트 머신에서 실행되며, 동일한 네트워크 네임스페이스, IP 주소 및 포트를 공유합니다.
  • Pod 내부 컨테이너는 localhost를 통해 통신할 수 있습니다.
  • Pod은 Kubernetes에서 생성, 스케줄링, 관리의 최소 단위로, 컨테이너보다 더 높은 수준의 추상화를 제공합니다.
  • Pod 하나에는 하나의 컨테이너 또는 여러 관련된 컨테이너가 포함될 수 있습니다.

Label:
Label은 Kubernetes에서 Key/Value 형태의 키-값 쌍으로, key와 value는 사용자 정의가 가능합니다.

  • Label은 Node, Pod, Service, RC(Replication Controller) 등의 리소스 객체에 추가될 수 있습니다.
  • 하나의 리소스 객체는 임의의 수의 Label을 정의할 수 있으며, 동일한 Label은 여러 리소스 객체에 추가될 수 있습니다.
  • Kubernetes는 **Label Selector(라벨 선택기)**를 통해 리소스 객체를 조회하고 필터링합니다.

Replication Controller:
Pod 복제를 관리하여 클러스터에 지정된 수의 Pod 복제가 존재하도록 보장합니다.

  • 클러스터의 Pod 복제 수가 지정된 수보다 많으면 초과된 Pod을 종료합니다.
  • 반대로, Pod 복제 수가 부족하면 부족한 Pod을 생성합니다.
  • Replication Controller는 확장성, 동적 확장, 롤링 업데이트의 핵심입니다.

Deployment:
내부적으로 RS(ReplicaSet)를 사용하여 동작하며, Replication Controller의 업그레이드 버전입니다.

  • 가장 큰 특징은 현재 Pod 배포 진행 상황을 실시간으로 확인할 수 있다는 점입니다.

HPA (Horizontal Pod Autoscaler):
Pod의 수평적 자동 확장을 담당하는 Kubernetes 리소스입니다.

  • Replication Controller가 제어하는 모든 Pod의 대상 부하 변화를 분석하여 Pod 복제 수를 조정할지 결정합니다.

Service:
Service는 Pod의 논리적인 집합과 해당 집합에 접근하는 정책을 정의하며, 실제 서비스의 추상화입니다.

  • Service는 통합된 서비스 접근 엔트리와 서비스 프록시 및 디스커버리 메커니즘을 제공합니다.
  • 동일한 Label을 가진 여러 Pod을 연결하며, 사용자는 백엔드 Pod이 어떻게 실행되는지 알 필요가 없습니다.

Volume:
Volume은 Pod 내부에서 여러 컨테이너가 접근할 수 있는 공유 디렉터리입니다.

  • Kubernetes의 Volume은 Pod에 정의되며, 하나 이상의 Pod 내 컨테이너가 특정 디렉터리에 마운트하여 사용할 수 있습니다.

Namespace:
Namespace는 멀티 테넌트 환경에서 리소스 격리를 구현하기 위해 사용됩니다.

  • 클러스터 내부 리소스 객체를 서로 다른 Namespace에 할당하여 논리적으로 다른 프로젝트, 팀 또는 사용자 그룹을 구성할 수 있습니다.
  • 이를 통해 동일한 클러스터 리소스를 공유하면서도 각각 별도로 관리할 수 있습니다.

 

반응형

'K8S' 카테고리의 다른 글

Kubernetes 기술 개념 정리 6  (3) 2024.12.12
Kubernetes 기술 개념 정리 5  (0) 2024.12.11
Kubernetes 기술 개념 정리 4  (1) 2024.12.07
Kubernetes 기술 개념 정리 3  (9) 2024.12.05
Kubernetes 기술 개념 정리 2  (3) 2024.12.05

댓글