Kubernetes에서 Master Node(Control Plane)는 클러스터 제어를 담당하는 핵심 노드입니다. 일반적으로 Master Node에는 Pod를 배치하지 않지만, 설정에 따라 워커처럼 동작할 수 있습니다. 이 글에서는 Master(Node)에서 일반 워크로드가 실행되지 않도록 설정하는 방법을 소개합니다.

📌 기본 원리: Taint
Kubernetes는 노드에 “taint(오염)”을 부여하고, 해당 taint를 허용하지 않는 일반 Pod는 해당 노드에 스케줄되지 않습니다.
기본적으로 Master Node에는 다음과 같은 taint가 설정되어 있습니다:
kubectl describe node <마스터노드이름>
예시 출력:
Taints: node-role.kubernetes.io/control-plane:NoSchedule
이 설정 덕분에, toleration이 없는 일반 Pod는 해당 노드에 배치되지 않습니다.
🛠 taint가 없을 경우, 수동으로 추가하기
다음 명령어로 마스터 노드에 taint를 추가할 수 있습니다:
kubectl taint nodes <마스터노드이름> node-role.kubernetes.io/control-plane=:NoSchedule
또는 구버전 호환용:
kubectl taint nodes <마스터노드이름> node-role.kubernetes.io/master=:NoSchedule
💡
NoSchedule
은 해당 조건에 맞지 않는 Pod는 절대 배치되지 않도록 만듭니다.
⚙️ kubelet 실행 시 자동 taint 추가
kubelet
을 직접 설정하거나 kubeadm
으로 클러스터를 구성하는 경우, 아래와 같은 옵션을 지정하여 자동 taint 설정도 가능합니다:
--register-with-taints=node-role.kubernetes.io/control-plane=:NoSchedule
이 옵션을 kubelet
실행 파라미터에 포함하면, 마스터 노드에 자동으로 taint가 적용됩니다.
🔍 taint 확인 명령어
현재 클러스터의 모든 노드 taint 목록을 확인하려면:
kubectl get nodes -o json | jq '.items[].spec.taints'
간단하게 전체 노드의 taint만 확인하려면:
kubectl describe nodes | grep Taints
✅ 마무리
이제 Master Node에 일반 Pod가 생성되지 않도록 완전히 차단할 수 있습니다. 필요하다면 특정 상황에만 Pod를 허용하는 Toleration 또는 Node Affinity를 활용해 유연한 설정도 가능합니다.
안전하고 안정적인 Kubernetes 운영을 위해, Master Node에는 컨트롤 플레인 컴포넌트 외의 워크로드가 올라가지 않도록 하는 것이 좋습니다. 🛡️