Kubernetes/Kubernetes Advanced

Kubernetes 리소스 시리즈 #10: Node & Namespace (클러스터 리소스)

ygtoken 2025. 3. 5. 00:24
728x90

Kubernetes 클러스터를 운영할 때, 클러스터의 구성 요소와 리소스를 효율적으로 관리하는 것이 중요합니다.
이 중에서도 **Node(노드)와 Namespace(네임스페이스)**는 클러스터의 리소스를 배포하고 격리하는 핵심 개념입니다.

이번 글에서는 Node와 Namespace의 개념, 동작 방식, 그리고 실전 활용법을 정리하겠습니다.


🔹 Node란?

Kubernetes의 **Node(노드)**는 컨테이너화된 애플리케이션(Pod)을 실행하는 물리적 또는 가상 머신입니다.
✔️ 하나의 Kubernetes 클러스터는 여러 개의 Node로 구성됨
✔️ 각 Node에는 CPU, 메모리, 네트워크 및 스토리지가 포함됨
✔️ Node는 Control Plane의 스케줄링을 받아 Pod를 실행함

💡 Kubernetes에는 Master Node(Control Plane)와 Worker Node가 존재합니다.
💡 Worker Node는 실제 애플리케이션이 배포되는 곳이며, Master Node는 이를 관리합니다.


🔹 Node의 구성 요소

구성 요소 설명

Kubelet Node에서 실행되며, Control Plane과 통신하여 Pod를 관리
Container Runtime 컨테이너 실행 환경(Docker, containerd, CRI-O 등)
Kube Proxy 네트워크 라우팅을 담당하여 Pod 간 통신을 관리
Pods Node에서 실행되는 Kubernetes의 기본 실행 단위

💡 각 Node는 Kubernetes API 서버(Control Plane)로부터 스케줄링을 받아 Pod를 실행합니다.


🔹 Node 목록 확인

kubectl get nodes

출력 예시:

NAME         STATUS   ROLES    AGE   VERSION
node-1       Ready    worker   10d   v1.25.0
node-2       Ready    worker   10d   v1.25.0

💡 Node의 상태(Status)가 Ready이면 정상적으로 동작 중입니다.


🔹 Node의 상세 정보 확인

kubectl describe node node-1

출력 예시:

Name:               node-1
Roles:              worker
Capacity:
  cpu:             4
  memory:          16Gi
Allocatable:
  cpu:             3.5
  memory:          14Gi

💡 Node의 리소스 사용량(CPU, 메모리 등)을 확인할 수 있습니다.


🔹 Namespace란?

**Namespace(네임스페이스)**는 Kubernetes 클러스터 내에서 리소스를 논리적으로 분리하는 방법입니다.
✔️ 여러 팀 또는 프로젝트가 하나의 클러스터를 공유할 때 사용
✔️ 리소스(예: Pod, Service, ConfigMap, Secret 등)를 격리하여 관리 가능
✔️ 각 네임스페이스별로 ResourceQuota(리소스 제한) 설정 가능

💡 기본적으로 default, kube-system, kube-public 등의 네임스페이스가 존재합니다.


🔹 Namespace 목록 확인

kubectl get namespaces

출력 예시:

NAME              STATUS   AGE
default           Active   10d
kube-system       Active   10d
kube-public       Active   10d
my-namespace      Active   5d

💡 default 네임스페이스는 기본적으로 모든 리소스가 배포되는 공간입니다.


🔹 새로운 Namespace 생성

아래는 my-namespace라는 새로운 네임스페이스를 생성하는 방법입니다.

apiVersion: v1
kind: Namespace
metadata:
  name: my-namespace  # 네임스페이스 이름
kubectl apply -f namespace.yaml
kubectl get namespaces

💡 네임스페이스를 생성하면 특정 리소스를 해당 네임스페이스에서만 관리할 수 있습니다.


🔹 Namespace를 지정하여 리소스 배포

아래는 my-namespace에서 Pod를 배포하는 예제입니다.

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  namespace: my-namespace  # 특정 네임스페이스에서 실행
spec:
  containers:
    - name: nginx
      image: nginx

💡 Namespace를 지정하면 해당 네임스페이스에서만 리소스가 관리됩니다.


🔹 Namespace에 속한 리소스 확인

kubectl get pods --namespace=my-namespace

💡 특정 네임스페이스의 리소스를 확인할 수 있습니다.


🔹 Namespace 삭제

kubectl delete namespace my-namespace

💡 네임스페이스를 삭제하면 내부의 모든 리소스도 함께 삭제됩니다.


🚀 마무리

✔️ Node는 Kubernetes 클러스터에서 Pod가 실행되는 실제 머신
✔️ Namespace는 리소스를 논리적으로 분리하여 관리하는 공간
✔️ 여러 팀이 하나의 클러스터를 공유할 때 Namespace를 활용하면 효과적

 

728x90