쿠버네티스(Kubernetes)가 뭐지?

2025. 3. 19. 15:32인공지능,프로그래밍/MS Asure

반응형

쿠버네티스란 무엇인가?

쿠버네티스는 여러 머신에 걸쳐 컨테이너화된 애플리케이션을 관리하는 데 사용됩니다. 컨테이너는 애플리케이션과 그에 필요한 모든 의존성을 패키징하여, 어떤 환경에서도 일관된 방식으로 실행할 수 있게 합니다. 쿠버네티스는 이러한 컨테이너를 자동으로 배포하고, 확장하고, 관리합니다.

Kubernetes를 사용하는 이유

여러 머신에 배포된 많은 컨테이너가 관련되기 때문에 컨테이너화된 앱을 안정적으로 실행하기 어려울 수 있습니다. Kubernetes는 이 컨테이너를 예약하고 배포할 뿐만 아니라 원하는 상태로 크기 조정하고 수명 주기를 관리하는 방법을 제공합니다. Kubernetes를 사용하여 확장성(scalability) 및 확장성(extensibility) 있는 이식 가능한 방식으로 컨테이너 기반 애플리케이션을 구현할 수 있습니다.

 

주요 구성 요소

  • 노드(Node): 컨테이너를 실행하는 머신입니다. 물리적 서버나 가상 머신일 수 있습니다.
  • Master 노드:
    • API Server: 사용자와 클러스터 간의 인터페이스.
    • Controller Manager: 전체 클러스터 상태를 관리.
    • Scheduler: 적합한 워커 노드에 Pod 배치.
  • Worker 노드:
    • Kubelet: 각 노드의 Pod 상태를 관리.
    • Container Runtime: 컨테이너 실행 환경 (예: Docker, containerd).
    • Kube-proxy: 네트워크 연결 및 로드 밸런싱 처리.
  • Pod: 쿠버네티스의 기본 실행 단위로, 하나 이상의 컨테이너를 포함할 수 있습니다. Pod 내의 컨테이너는 동일한 노드에서 실행됩니다.
  • 컨트롤 플레인(Control Plane): 클러스터의 상태를 관리하고, 새로운 컨테이너를 노드에 할당하며, API 서버를 제공합니다.
    • kube-apiserver: API 요청을 처리하는 서버입니다.
    • kube-scheduler: Pod를 적절한 노드에 할당합니다.
    • kube-controller-manager: 클러스터의 상태를 관리하는 컨트롤러를 실행합니다.\
  • 네트워킹:
    • 서비스(Service)와 인그레스(Ingress) 등을 통해 외부 접근 관리.

 

  •  
  • Persistent Volume: 데이터 영속성을 보장.

 

장점

  1. 확장성 및 유연성: 쿠버네티스는 애플리케이션을 자동으로 확장하고 축소할 수 있어, 트래픽 변화에 빠르게 대응할 수 있습니다.
  2. 자동화된 관리: 컨테이너의 상태를 모니터링하고, 실패한 컨테이너를 자동으로 교체합니다.
  3. 리소스 효율성: 컨테이너를 효율적으로 배포하여 리소스를 최적화합니다.
  4. 이식성: 다양한 클라우드 및 온프레미스 환경에서 실행할 수 있습니다.

단점

  1. 복잡성: 쿠버네티스는 많은 구성 요소와 복잡한 아키텍처로 인해 학습 곡선이陡합니다.
  2. 보안: 컨테이너의 보안 설정이 중요하며, 잘못된 설정은 보안 위험을 초래할 수 있습니다.
  3. 리소스 오버헤드: 추가적인 리소스가 필요할 수 있습니다.

예시 시나리오

시나리오 1: 웹 애플리케이션 배포

  • 문제: 트래픽이 많은 웹 애플리케이션을 배포하고, 갑작스러운 트래픽 증가에 대응해야 합니다.
  • 해결책: 쿠버네티스를 사용하여 애플리케이션을 컨테이너화하고, 자동으로 확장 및 축소할 수 있도록 설정합니다.
    • Pod를 생성하여 웹 서버와 데이터베이스를 포함합니다.
    • Deployment를 사용하여 Pod를 자동으로 확장 및 축소합니다.
    • Service를 사용하여 트래픽을 분산합니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
      - name: web-server
        image: nginx:latest
        ports:
        - containerPort: 80

 
 

시나리오 2: AI/ML 모델 배포

  • 문제: 대규모 AI/ML 모델을 배포하고, 복잡한 워크로드를 관리해야 합니다.
  • 해결책: 쿠버네티스를 사용하여 모델을 컨테이너화하고, GPU 리소스를 효율적으로 활용합니다.
    • Pod를 생성하여 모델을 포함하고, GPU 리소스를 할당합니다.
    • Job을 사용하여 모델의 배치 처리를 관리합니다.

apiVersion: batch/v1
kind: Job
metadata:
  name: ml-model-training
spec:
  template:
    spec:
      containers:
      - name: ml-model
        image: tensorflow:latest
        resources:
          limits:
            nvidia.com/gpu: 1

이러한 시나리오들은 쿠버네티스가 어떻게 복잡한 애플리케이션 배포와 관리를 간소화할 수 있는지를 보여줍니다.

쿠버네티스를 사용하면 개발자들은 애플리케이션의 확장성과 안정성을 높일 수 있으며,

이는 특히 대규모 트래픽이나 복잡한 워크로드를 다루는 경우에 유용합니다.

쿠버네티스의 주요 구성 요소는 컨트롤 플레인과 노드로 나뉩니다. 각 구성 요소는 쿠버네티스 클러스터의 안정성과 효율성을 유지하는 데 중요한 역할을 합니다.

컨트롤 플레인 구성 요소

컨트롤 플레인은 쿠버네티스 클러스터의 상태를 관리하고, 노드에 작업을 할당하며, API를 제공하는 역할을 합니다. 주요 구성 요소는 다음과 같습니다:

  • kube-apiserver: 쿠버네티스 API를 노출하고, 외부 요청을 처리하는 서버입니다.
  • etcd: 클러스터의 상태와 구성 정보를 저장하는 분산 키-값 저장소입니다.
  • kube-scheduler: Pod를 적절한 노드에 할당합니다.
  • kube-controller-manager: 클러스터의 상태를 관리하는 컨트롤러를 실행합니다.
  • cloud-controller-manager (optional): 클라우드 제공자와의 통합을 담당합니다.

노드 구성 요소

노드는 컨테이너를 실행하는 머신으로, 물리적 서버나 가상 머신일 수 있습니다. 주요 구성 요소는 다음과 같습니다:

  • kubelet: 노드에서 Pod와 그 안의 컨테이너를 실행하고 관리합니다.
  • kube-proxy (optional): 노드에서 네트워크 규칙을 관리하여 서비스를 구현합니다.
  • Container Runtime: 컨테이너를 실행하는 소프트웨어로, Docker, containerd 등이 있습니다.

추가 구성 요소

  • Addons: DNS, Web UI, 리소스 모니터링, 로깅 등의 기능을 확장하는 추가 구성 요소입니다.

이러한 구성 요소들은 함께 작동하여 쿠버네티스가 컨테이너화된 애플리케이션을 효율적으로 관리할 수 있도록 합니다.

 

쿠버네티스에서 컨트롤 플레인과 워커 노드는 각각 다른 역할을 수행합니다.

컨트롤 플레인

  • 역할: 클러스터의 상태를 관리하고, 워커 노드에 작업을 할당하며, API를 제공합니다.
  • 구성 요소:
    • kube-apiserver: API 요청을 처리하고, 클러스터와 상호작용하는 진입점 역할을 합니다.
    • kube-scheduler: Pod를 적절한 노드에 할당합니다.
    • kube-controller-manager: 클러스터의 상태를 관리하는 컨트롤러를 실행합니다.
    • etcd: 클러스터의 상태와 구성 정보를 저장하는 분산 키-값 저장소입니다.
  • 기능:
    • 클러스터의 상태를 모니터링하고, 필요한 조치를 취합니다.
    • Pod를 스케줄링하고, 노드에 할당합니다.
    • 클러스터의 확장 및 축소를 관리합니다.

워커 노드

  • 역할: 실제 애플리케이션 워크로드를 실행하는 역할을 합니다.
  • 구성 요소:
    • kubelet: 노드에서 Pod와 그 안의 컨테이너를 실행하고 관리합니다.
    • kube-proxy: 네트워크 규칙을 관리하고, 서비스를 구현합니다.
    • Container Runtime: 컨테이너를 실행하는 소프트웨어입니다.
  • 기능:
    • Pod를 실행하고, 필요한 리소스를 제공합니다.
    • 네트워크 트래픽을 관리하고, 서비스 간의 통신을 지원합니다.

역할 차이

  • 컨트롤 플레인: 클러스터의 전반적인 상태를 관리하고, 워커 노드에 작업을 할당합니다.
  • 워커 노드: 실제 애플리케이션 워크로드를 실행하고, 네트워크 및 리소스 관리를 담당합니다.

이 두 구성 요소는 함께 작동하여 쿠버네티스가 안정적이고 확장 가능한 방식으로 애플리케이션을 관리할 수 있도록 합니다.

 

쿠버네티스에서 컨트롤 플레인과 워커 노드 간의 통신은 주로 API 서버와 kubelet을 통해 이루어집니다. 이 통신은 쿠버네티스 클러스터의 안정성과 효율성을 유지하는 데 중요한 역할을 합니다.

통신 방식

  1. API Server와 Kubelet 간의 통신:
    • API Server → Kubelet: API 서버는 워커 노드의 kubelet에 Pod 생성, 삭제, 업데이트 등의 명령을 전달합니다. kubelet은 이러한 명령을 받아서 실제로 컨테이너를 실행하거나 중지합니다.
    • Kubelet → API Server: kubelet은 노드와 Pod의 상태를 정기적으로 API 서버에 보고합니다. 이를 통해 API 서버는 클러스터의 상태를 최신으로 유지할 수 있습니다.
  2. Kube-proxy와 API Server 간의 통신:
    • Kube-proxy → API Server: 워커 노드의 kube-proxy는 네트워크 규칙을 관리하고, 서비스를 구현하기 위해 API 서버와 통신합니다. 이를 통해 네트워크 트래픽을 적절히 라우팅할 수 있습니다.
  3. Konnectivity 서비스:
    • 쿠버네티스 1.18부터는 Konnectivity 서비스를 사용하여 컨트롤 플레인과 노드 간의 통신을 보다 안전하게 유지할 수 있습니다. 이 서비스는 TCP 수준의 프록시를 제공하여 SSH 터널 대신 사용할 수 있습니다.

통신 흐름 예시

  1. Pod 배포 예시:
    • 사용자가 kubectl create deployment 명령어를 실행합니다.
    • API 서버가 요청을 처리하고, etcd에 저장합니다.
    • 컨트롤러 매니저가 새로운 배포를 감지하고 ReplicaSet을 생성합니다.
    • 스케줄러가 Pod를 적절한 워커 노드에 할당합니다.
    • API 서버가 해당 노드의 kubelet에 Pod 생성 명령을 전달합니다.
    • kubelet이 Pod를 실행하고, 상태를 API 서버에 보고합니다.

이러한 통신 방식은 쿠버네티스가 클러스터의 상태를 관리하고, 워크로드를 효율적으로 실행할 수 있도록 합니다.


Kubernetes 클러스터에서 노드의 상태를 확인하는 방법

쿠버네티스 클러스터에서 노드의 상태를 확인하는 방법은 여러 가지가 있습니다. 주요 명령어와 방법은 다음과 같습니다:

1. kubectl get nodes 명령어

  • 사용법: kubectl get nodes
  • 설명: 이 명령어는 클러스터의 모든 노드 목록을 표시하며, 각 노드의 상태를 확인할 수 있습니다. 상태는 Ready, NotReady, Unknown 등으로 표시됩니다.

2. kubectl describe node 명령어

  • 사용법: kubectl describe node <node-name>
  • 설명: 특정 노드의 자세한 정보를 제공합니다. 노드의 상태, IP 주소, 리소스 사용량 등이 포함됩니다.

3. 노드 상태 필드

  • 사용법: kubectl describe node <node-name> 명령어를 사용하여 노드의 상태 필드를 확인할 수 있습니다.
  • 설명: 노드의 상태 필드에는 Addresses, Conditions 등이 포함됩니다. Conditions는 노드의 Ready, OutOfDisk, MemoryPressure 등의 상태를 제공합니다.

4. Kubernetes Dashboard

  • 설명: Kubernetes Dashboard는 웹 기반 UI로, 클러스터의 리소스와 노드 상태를 시각적으로 확인할 수 있습니다.

5. 모니터링 도구

  • 설명: Prometheus와 Grafana 같은 모니터링 도구를 사용하여 노드의 메트릭을 수집하고 시각화할 수 있습니다. 이를 통해 노드의 상태를 실시간으로 모니터링할 수 있습니다.

이러한 방법들을 통해 쿠버네티스 클러스터의 노드 상태를 효율적으로 관리하고 모니터링할 수 있습니다.

반응형

'인공지능,프로그래밍 > MS Asure' 카테고리의 다른 글

온프레미스 서버  (0) 2025.03.22
MongoDB  (0) 2025.03.19
DNS(도메인 네임 시스템, Domain Name System)  (0) 2025.03.18
Microsoft AZ-305 Korean 시험 요강  (1) 2025.03.15
Microsoft AZ-104 Korean 시험 요강  (0) 2025.03.13