Kubernetes에서 Master Node에 Pod가 생성되지 않도록 설정하는 방법🚫

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에는 컨트롤 플레인 컴포넌트 외의 워크로드가 올라가지 않도록 하는 것이 좋습니다. 🛡️

Leave a Comment