노드 선택기를 사용한 스케줄링

KubernetesBeginner
지금 연습하기

소개

이 랩에서는 간단한 배포를 생성하는 것으로 시작하여 노드 선택기 (Node Selector) 를 할당합니다. 그런 다음, 특정 노드에 파드를 스케줄링하기 위해 다양한 선택기를 사용하는 더 복잡한 시나리오로 이동합니다.

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를 사용하여 환경을 재설정하십시오.

간단한 배포 생성

이 단계에서는 단일 파드를 가진 간단한 배포를 생성합니다.

  1. simple-deployment.yaml이라는 파일을 다음 내용으로 생성합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: simple-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: simple-app
  template:
    metadata:
      labels:
        app: simple-app
    spec:
      containers:
        - name: simple-container
          image: nginx:latest
  1. kubectl을 사용하여 배포를 생성합니다.
kubectl apply -f simple-deployment.yaml
  1. 배포가 생성되었는지 확인합니다.
kubectl get deployments

배포에 노드 선택자 할당

이 단계에서는 1 단계에서 생성한 배포에 노드 선택기 (Node Selector) 를 할당합니다.

  1. 레이블 (label) 로 노드를 생성합니다.
kubectl label nodes minikube disk=ssd
  1. node-selector-deployment.yaml 파일을 편집하고 spec.template.spec 섹션 아래에 nodeSelector 필드를 추가합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: selector-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: selector-app
  template:
    metadata:
      labels:
        app: selector-app
    spec:
      nodeSelector:
        disk: ssd
      containers:
        - name: selector-container
          image: nginx:latest
  1. kubectl을 사용하여 변경 사항을 적용합니다.
kubectl apply -f node-selector-deployment.yaml
  1. 파드가 disk=ssd 레이블이 있는 노드에 스케줄되었는지 확인합니다.
kubectl get pods -o wide | grep selector-deployment

다양한 노드 선택자 사용

이 단계에서는 서로 다른 노드 선택기 (Node Selector) 를 사용하여 해당 노드에 할당된 레이블 (label) 을 기반으로 특정 노드에 파드를 스케줄링합니다.

  1. 서로 다른 레이블로 세 개의 노드를 생성합니다.
kubectl label nodes minikube resigon=labex
kubectl label nodes minikube gpu=true
  1. multi-selector-deployment.yaml이라는 파일을 다음 내용으로 생성합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: multi-selector-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: multi-selector-app
  template:
    metadata:
      labels:
        app: multi-selector-app
    spec:
      containers:
        - name: multi-selector-container
          image: nginx:latest
      nodeSelector:
        resigon: labex
        gpu: "true"
  1. 변경 사항을 적용합니다.
kubectl apply -f multi-selector-deployment.yaml
  1. 파드가 적절한 레이블이 있는 노드에 스케줄되었는지 확인합니다.
kubectl get pods -o wide | grep multi-selector-deployment

요약

이 랩에서는 노드 선택기 (Node Selector) 와 노드 어피니티 (Node Affinity) 를 사용하여 특정 노드에 파드를 스케줄링하는 방법을 배웠습니다. 간단한 배포로 시작하여, 노드에 할당된 레이블을 기반으로 특정 노드에 파드를 스케줄링하기 위해 다양한 선택기와 어피니티 규칙을 사용하는 더 복잡한 시나리오로 이동했습니다.

축하합니다! 이 랩을 성공적으로 완료했습니다.