Kubernetes Cordon 및 Uncordon 명령어

KubernetesBeginner
지금 연습하기

소개

Kubernetes 클러스터에서 노드는 "ready" 또는 "not ready"와 같은 다양한 상태로 전환될 수 있습니다. cordonuncordon 명령어는 특정 노드에서 파드의 스케줄링을 제어하는 데 사용됩니다. cordon 명령어는 노드를 "unschedulable"로 표시하여 해당 노드에 새로운 파드가 스케줄링되는 것을 방지하는 반면, uncordon 명령어는 노드를 다시 "schedulable"로 표시하여 새로운 파드가 해당 노드에 스케줄링될 수 있도록 합니다. 이 랩에서는 이러한 명령어를 사용하여 Kubernetes 클러스터의 노드에서 파드의 스케줄링을 제어하는 방법을 살펴봅니다.

Minikube 클러스터 시작

리소스를 생성하기 전에 실행 중인 Kubernetes 클러스터가 필요합니다. Minikube 는 로컬 머신에서 실행되는 경량 Kubernetes 환경입니다.

  1. 작업 디렉토리로 이동:

    터미널을 열고 기본 프로젝트 폴더로 이동합니다.

    cd /home/labex/project
    
  2. Minikube 시작:

    Kubernetes 클러스터를 초기화하기 위해 Minikube 를 시작합니다.

    minikube start
    
    • 이 명령어는 로컬 머신에 단일 노드 Kubernetes 클러스터를 설정합니다.
    • Minikube 는 시스템 성능에 따라 시작하는 데 몇 분 정도 걸릴 수 있습니다.
  3. Minikube 가 실행 중인지 확인:

    Minikube 클러스터의 상태를 확인합니다.

    minikube status
    
    • kubeletapiserver와 같은 구성 요소가 Running으로 나열되어 있는지 확인합니다.
    • 클러스터가 실행 중이지 않으면 minikube start를 다시 실행합니다.

Minikube 를 시작하는 데 문제가 발생하면 필요에 따라 minikube delete를 사용하여 환경을 재설정하십시오.

노드 격리 (Cordoning)

이 단계에서는 cordon 명령을 사용하여 노드를 "unschedulable"로 표시하여 해당 노드에 새로운 파드가 스케줄링되는 것을 방지합니다. 단계는 다음과 같습니다.

  1. 다음 명령을 사용하여 클러스터의 노드를 나열합니다.
kubectl get nodes
  1. 다음 명령을 사용하여 노드를 격리합니다.
kubectl cordon minikube
  1. 다음 명령을 사용하여 노드의 상태에서 SchedulingDisabled 필드를 확인하여 노드가 격리되었는지 확인합니다.
kubectl get node | grep SchedulingDisabled

노드 격리 해제 (Uncordoning)

이 단계에서는 uncordon 명령을 사용하여 노드를 다시 "schedulable"로 표시하여 해당 노드에 새로운 파드를 스케줄링할 수 있도록 합니다. 단계는 다음과 같습니다.

  1. 다음 명령을 사용하여 노드의 격리를 해제합니다.
kubectl uncordon minikube
  1. 다음 명령을 사용하여 노드의 상태에서 SchedulingDisabled 필드를 확인하여 노드의 격리가 해제되었는지 확인합니다.
kubectl get node | grep SchedulingDisabled

파드가 있는 노드 격리 및 격리 해제 (Cordoning and Uncordoning)

이 단계에서는 노드에서 파드가 실행 중인 동안 노드를 격리하고 격리 해제해야 하는 시나리오를 시뮬레이션합니다. 단계는 다음과 같습니다.

  1. 다음 명령을 실행하여 /home/labex/project/ 디렉토리로 이동합니다.
cd /home/labex/project/
  1. /home/labex/project/ 디렉토리에서 다음 YAML 파일을 사용하여 여러 복사본이 있는 "deploy.yaml"이라는 배포를 생성합니다.
## deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.16
          ports:
            - containerPort: 80
  1. 다음 명령을 사용하여 노드를 격리합니다.
kubectl cordon minikube
  1. 다음 명령을 사용하여 YAML 파일을 적용합니다.
kubectl apply -f deploy.yaml
  1. 다음 명령을 사용하여 노드에서 실행 중인 파드를 나열합니다.
kubectl get pods -o wide

파드가 제대로 스케줄링되고 시작되었는지 확인합니다.

  1. 다음 명령을 사용하여 노드의 격리를 해제합니다.
kubectl uncordon minikube
  1. 다음 명령을 사용하여 노드에서 실행 중인 파드의 상태를 확인하여 격리 해제된 노드에서 다시 스케줄링되었는지 확인합니다.
kubectl get pods -o wide

레이블을 사용하여 노드 격리 및 격리 해제 (Cordoning and Uncordoning)

이 단계에서는 특정 기준에 따라 레이블을 사용하여 노드를 격리하고 격리 해제합니다. 단계는 다음과 같습니다.

  1. 다음 명령을 사용하여 클러스터의 노드에 레이블을 지정합니다.
kubectl label nodes minikube org=labex
  1. 다음 명령을 사용하여 지정된 레이블이 있는 노드를 격리합니다.
kubectl cordon -l org=labex
  1. 다음 명령을 사용하여 노드의 상태에서 SchedulingDisabled 필드를 확인하여 노드가 격리되었는지 확인합니다.
kubectl get node -l org=labex | grep SchedulingDisabled
  1. 다음 명령을 사용하여 지정된 레이블이 있는 노드의 격리를 해제합니다.
kubectl uncordon -l org=labex
  1. 다음 명령을 사용하여 노드의 상태에서 SchedulingDisabled 필드를 확인하여 노드의 격리가 해제되었는지 확인합니다.
kubectl get node -l org=labex | grep SchedulingDisabled

요약

이 랩에서는 Kubernetes 에서 cordonuncordon 명령을 사용하여 노드에서 파드의 스케줄링을 제어하는 방법을 살펴보았습니다. 실행 중인 파드가 있는 경우에도 노드를 격리하고 격리 해제하는 방법과 특정 기준에 따라 선택적으로 노드를 격리하고 격리 해제하기 위해 레이블을 사용하는 방법을 배웠습니다. 이러한 명령은 Kubernetes 클러스터에서 파드의 가용성과 복원력을 관리하는 데 유용합니다.