카테고리 없음

CKA 대비 K8S 개념 정리

경 울 2025. 2. 3. 22:46
728x90

Pod, Node, Cluster

Kubernetes에서 Pod, Node, Cluster는 서로 계층적인 관계를 가지며, 각각의 역할이 다릅니다.


1. Pod, Node, Cluster의 개념

📌 Pod

  • Kubernetes에서 배포되는 최소 실행 단위
  • 하나 이상의 컨테이너로 구성될 수 있음
  • 같은 Pod 내의 컨테이너들은 같은 네트워크 네임스페이스(IP 공유) 사용
  • 같은 Pod 내 컨테이너들은 localhost 통신 가능

📌 Node

  • Pod가 실행되는 물리적/가상 서버
  • Master Node(제어 노드)Worker Node(작업 노드) 로 나뉨
  • 각 Node는 Kubelet, Kube Proxy, Container Runtime(Docker, containerd 등) 을 실행

📌 Cluster

  • 여러 개의 Node들이 모여서 구성된 하나의 Kubernetes 시스템
  • Master Node 가 전체 클러스터를 관리하고, Worker Node 들이 실제 작업을 수행
  • 클러스터 내부에서 Pod들은 스케줄링되어 Node에 배치됨

2. Pod, Node, Cluster의 관계

🔹 Cluster → 여러 Node로 구성

  • 하나의 Cluster는 여러 개의 Node(물리 서버 또는 가상 머신)로 이루어짐.

🔹 Node → 여러 Pod를 포함

  • Node는 여러 개의 Pod를 실행할 수 있음.
  • Node의 자원(CPU, 메모리 등)이 한계에 도달하면 더 이상 Pod를 배포할 수 없음.

🔹 Pod → 하나 이상의 컨테이너 포함

  • 하나의 Pod 안에는 여러 개의 컨테이너가 존재 가능함.
  • 같은 Pod 내 컨테이너들은 localhost로 통신 가능하지만, 다른 Pod와 통신하려면 Cluster 내부 네트워크를 사용해야 함.

3. 구성 예시

아래는 3개의 Worker Node를 가진 Kubernetes Cluster 예시입니다.

Cluster
 ├── Node 1
 │    ├── Pod A (nginx 컨테이너, redis 컨테이너)
 │    ├── Pod B (mysql 컨테이너)
 │
 ├── Node 2
 │    ├── Pod C (backend 컨테이너)
 │    ├── Pod D (frontend 컨테이너)
 │
 ├── Node 3
      ├── Pod E (monitoring 컨테이너)
      ├── Pod F (logging 컨테이너)
  • Node 1에는 Pod A, Pod B가 실행 중
  • Pod Anginx, redis 두 개의 컨테이너 포함
  • Pod Bmysql 단일 컨테이너 포함
  • Node 2, Node 3에도 여러 개의 Pod가 배치됨

4. 추가 개념

Pod는 Node에 배치되지만 특정 Node에 고정되지 않음

  • Pod가 실행 중인 Node가 다운되면, Kubernetes는 새로운 Node에서 해당 Pod를 다시 생성

Cluster는 오토스케일링 가능

  • Pod가 증가하면 새로운 Node를 추가할 수도 있음
  • 반대로 불필요한 Node는 제거될 수 있음

Pod 간 통신은 Service를 통해 관리됨

  • Kubernetes 내부 네트워크를 활용하여 Node 간 Pod 통신 가능
  • 외부에서 접근하려면 LoadBalancer 또는 Ingress 설정이 필요

🔹 정리

  1. Cluster → 여러 개의 Node로 구성
  2. Node → 여러 개의 Pod 실행
  3. Pod → 하나 이상의 컨테이너 포함
  4. Kubernetes는 Pod를 자동으로 스케줄링하며, 필요 시 다른 Node로 이동 가능

이해를 돕기 위해 간단한 비유를 하자면,

  • Cluster = 한 개의 회사
  • Node = 여러 개의 부서(개발팀, 마케팅팀 등)
  • Pod = 각 팀 내에서 수행하는 프로젝트

Kubernetes는 이러한 구조를 통해 효율적으로 애플리케이션을 관리합니다. 🚀

etcd

클러스터 변경 등 cubectl 을 실행할 때 필요한 정보를 얻는 데이터베이스

  • etcdctl
    ETCD 서버와 통신을 하기 위해 etcdctl 명령어를 사용함
  • kube-apiserver
    kubectl 커맨드 사용 -> kube-apiserver 명령 전달 -> etcd 클러스터에서 데이터 조회
    kube-apiserver 가 etcd 와 직접적으로 통신하는 유일한 컴포넌트

etcdctl version

확인

./etcdctl --version
API version 을 확인해야 함
version 2 로 설정되어 있을 수 있음

version2와 version3 은 커맨드 명령어가 다름

설정

export ETCDCTL_API=3
환경변수를 설정해줘야 함

port

기본적으로 2379

Kube-Scheduler

어떤 Pod가 어떤 Node에 들어갈지를 결정
결정만 한다. 실제로 배치하는 것은 kubelet

CPU 사용량, 메모리 리소스, ... 등의 기준을 비교하여 가장 알맞은 노드를 선정함

Kubeadm

Kubelet

각 노드의 선장과 같은 역할

  • Register Node
  • Create PODs
  • Monitor Node & Pods

Kubeadm 은 자동으로 kubelet 을 배포하지 않는다

kube-proxy

클러스터의 각 노드에서 실행되는 프로세스

클러스터 안에서 각 pod 는 서로 통신할 수 있음
각 노드는 Service 를 사용하여 서로 통신이 가능함

kube-proxy 는 ip table 을 가지고 각 서비스와 pod ip 를 연결함으로써 네트워킹이 가능하게 함

ReplicaSet

특정 수의 포드가 항상 실행되도록 함
로드밸런싱, 스케일링

Deployment

인스턴스를 매끄럽게 업데이트해줌

  • 업데이트, 변경취소, 일시정지 등
    ReplicaSet 상위에 존재함

Services

k8s 내 프로세스 혹은 외부와 네트워크 통신을 가능하게 함

  • Target port : pod 가 노출하는 port
  • (service) port : service 의 port

ClusterIP

pod 는 각각 ip 가 있지만 정적이지 않고 계속 바뀜
접근하는 ip를 계속 바꿔주는 일 없이 통신하기 위해
클러스터 내부에서만 접근 가능한 가상 IP를 할당한 것

NodePort

클러스터의 각 노드의 포트를 열어 외부에서 접근이 가능하도록 함

  • 외부 접근: NodeIP:NodePort를 통해 가능 (<노드IP>:<노드포트>).
  • 포트 범위: 30000–32767

LoadBalancer

클라우드 환경에서 외부 로드 밸런서를 자동으로 생성하여 트래픽을 분산함
각 Node Ip 로 접근하는 것이 아닌 단일 주소를 필요로 함

728x90