소개
이 랩에서는 kubectl을 사용하여 Kubernetes 클러스터의 노드를 검사하는 방법을 배우게 됩니다. 기본적인 노드 정보부터 시작하여 taint(테인트) 및 toleration(톨러레이션) 과 같은 고급 주제까지 다룰 것입니다. 이 랩은 이미 Kubernetes 클러스터가 설정되어 있고 kubectl이 설치되어 있다고 가정합니다.
이 랩에서는 kubectl을 사용하여 Kubernetes 클러스터의 노드를 검사하는 방법을 배우게 됩니다. 기본적인 노드 정보부터 시작하여 taint(테인트) 및 toleration(톨러레이션) 과 같은 고급 주제까지 다룰 것입니다. 이 랩은 이미 Kubernetes 클러스터가 설정되어 있고 kubectl이 설치되어 있다고 가정합니다.
리소스를 생성하기 전에 실행 중인 Kubernetes 클러스터가 필요합니다. Minikube 는 로컬 머신에서 실행되는 가벼운 Kubernetes 환경입니다.
작업 디렉토리로 이동:
터미널을 열고 기본 프로젝트 폴더로 이동합니다.
cd /home/labex/project
Minikube 시작:
Minikube 를 시작하여 Kubernetes 클러스터를 초기화합니다.
minikube start
Minikube 가 실행 중인지 확인:
Minikube 클러스터의 상태를 확인합니다.
minikube status
kubelet 및 apiserver와 같은 구성 요소가 Running으로 나열되어 있는지 확인합니다.minikube start를 다시 실행합니다.Minikube 를 시작하는 데 문제가 발생하면 필요에 따라 minikube delete를 사용하여 환경을 재설정하십시오.
가장 먼저 할 일은 클러스터의 노드에 대한 기본 정보를 얻는 것입니다.
클러스터의 노드 목록을 보려면 다음 명령을 실행합니다.
kubectl get nodes
이렇게 하면 클러스터의 모든 노드 목록과 해당 상태가 표시됩니다.
특정 노드에 대한 자세한 정보를 얻으려면 다음 명령을 실행합니다.
kubectl describe node minikube
minikube를 검사하려는 노드의 이름으로 바꿉니다. 이렇게 하면 노드의 상태, 용량 및 사용량에 대한 자세한 정보가 제공됩니다.
레이블과 주석은 클러스터의 노드에 메타데이터를 추가하는 데 사용할 수 있습니다. 이 메타데이터는 특정 작업에 대한 노드를 선택하거나 특정 기준에 따라 노드를 필터링하는 데 사용할 수 있습니다.
특정 노드의 레이블과 주석을 보려면 다음 명령을 실행합니다.
kubectl get node minikube --show-labels=true
이렇게 하면 지정된 노드의 레이블과 주석이 표시됩니다.
노드에 레이블을 추가하려면 다음 명령을 실행합니다.
kubectl label node minikube org=labex
노드에 주석을 추가하려면 다음 명령을 실행합니다.
kubectl annotate node minikube environment=production
노드의 레이블을 확인하려면 다음 명령을 사용합니다.
kubectl get nodes --show-labels
이렇게 하면 클러스터의 모든 노드 목록과 해당 레이블이 출력됩니다. 노드는 목적이나 특성을 식별하는 데 도움이 되도록 레이블을 지정할 수 있습니다.
테인트와 톨러레이션은 클러스터에서 어떤 파드가 어떤 노드에서 스케줄링될 수 있는지 제어하는 데 사용할 수 있습니다. 테인트는 특정 유형의 파드에 적합하지 않음을 나타내는 노드에 대한 특수 레이블이며, 톨러레이션은 일치하는 테인트가 있는 노드에서 파드를 스케줄링할 수 있도록 하는 설정입니다.
특정 노드의 테인트를 보려면 다음 명령을 실행합니다.
kubectl describe node minikube | grep Taints
이렇게 하면 지정된 노드의 테인트가 표시됩니다.
노드에 테인트를 추가하려면 다음 명령을 실행합니다.
kubectl taint node minikube app=backend:NoSchedule
파드에 톨러레이션을 생성하려면 다음 명령을 실행합니다.
cat << EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
tolerations:
- key: app
operator: Exists
effect: NoSchedule
EOF
이 파드는 테인트의 이름으로 app을 사용하고, 테인트가 가져야 할 효과로 NoSchedule을 사용합니다.
노드에서 사용 가능한 리소스를 보려면 다음 명령을 사용합니다.
kubectl describe node minikube | grep -A 8 "Allocated resources"
minikube를 검사하려는 노드의 이름으로 바꿉니다.
이렇게 하면 노드의 용량 및 현재 리소스 사용량을 포함한 자세한 정보가 제공됩니다.
Kubernetes 에서 특정 노드와 관련된 모든 이벤트를 필터링하려면 다음 명령을 사용할 수 있습니다.
kubectl get events --field-selector involvedObject.kind=Node,involvedObject.name=minikube
minikube를 쿼리하려는 노드의 이름으로 바꿉니다. 이 명령은 해당 노드와 관련된 모든 이벤트 (예: 재시작, 업그레이드 등) 를 나열합니다.
경우에 따라 유지 관리 또는 기타 이유로 노드를 로테이션에서 제외해야 할 수 있습니다. Kubernetes 는 새 Pod 가 예약되지 않도록 노드를 예약 불가능으로 표시하는 방법을 제공합니다. 이를 "cordon"이라고 합니다.
노드를 격리하려면 다음 명령을 사용합니다.
kubectl cordon minikube
minikube를 격리하려는 노드의 이름으로 바꿉니다.
그런 다음 다음 명령을 사용하여 노드 상태를 확인합니다.
kubectl get node
노드 격리를 해제하고 새 Pod 가 예약되도록 하려면 다음 명령을 사용합니다.
kubectl uncordon minikube
minikube를 격리 해제하려는 노드의 이름으로 바꿉니다.
노드를 격리해도 기존 Pod 가 자동으로 노드에서 이동하지는 않습니다. 중단을 방지하려면 노드를 격리하기 전에 Pod 를 수동으로 삭제하거나 이동해야 합니다.
축하합니다. Kubernetes 에서 노드를 격리하고 격리 해제하는 방법을 배웠습니다.
이 랩에서는 kubectl을 사용하여 Kubernetes 클러스터의 노드를 검사하는 방법을 배웠습니다. 노드를 나열하고, 상태를 확인하고, 레이블을 보고, 용량 및 리소스 사용량을 검사하는 방법을 배웠습니다. 또한 유지 관리 및 업그레이드를 위해 노드를 드레이닝하고 격리 해제하는 방법도 배웠습니다.