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를 활용하면 효과적
'Kubernetes > Kubernetes Advanced' 카테고리의 다른 글
Kubernetes 리소스 시리즈 #12: RBAC (Role-Based Access Control) (정책 및 접근 제어 리소스) (0) | 2025.03.05 |
---|---|
Kubernetes 리소스 시리즈 #11: ResourceQuota & LimitRange (클러스터 리소스) (0) | 2025.03.05 |
Kubernetes 리소스 시리즈 #9: PersistentVolume & StorageClass (구성 및 스토리지 리소스) (0) | 2025.03.05 |
Kubernetes 리소스 시리즈 #8: ConfigMap & Secret (구성 및 스토리지 리소스) (0) | 2025.03.05 |
Kubernetes 리소스 시리즈 #7: NetworkPolicy (서비스 및 네트워크 리소스) (0) | 2025.03.05 |