본문으로 건너뛰기

레이블 및 테인트를 설정하여 노드 풀 생성 및 사용

이 문서는 카카오클라우드 콘솔을 사용하여 노드 풀을 생성하고, 이들에 레이블 및 테인트를 설정하는 방법을 안내합니다. 여기에는 레이블과 테인트를 이용하여 특정 조건을 만족하는 워크로드를 적절한 인스턴스 그룹에 효과적으로 배포하는 방법이 포함됩니다. 레이블은 클러스터 내 리소스를 구분하고 조직화하는 데 사용되며, 테인트와 톨러레이션을 통해 워크로드의 스케줄링을 더 세밀하게 제어할 수 있습니다.

시나리오 소개

기본 정보

이번 시나리오에서는 쿠버네티스 클러스터에 인스턴스 그룹을 생성하고, 이를 활용하여 파드를 배포합니다. 주요 단계는 다음과 같습니다.

  1. 노드 풀 생성: 카카오클라우드 콘솔을 이용하여 노드 풀을 생성합니다. 이 과정에서, 각 노드 풀에 맞는 레이블 및 테인트 값을 설정합니다.

  2. 레이블 및 테인트 기반의 파드 배포: 생성된 노드 풀에 맞춰 파드를 배포합니다. 이 때, 레이블을 기반으로 한 NodeSelector와 테인트를 용인하는 톨러레이션을 포함한 파드 설정을 사용합니다.

사전 작업

사전 작업 단계에서는 튜토리얼 진행을 위한 환경 구축을 진행합니다. 아래 정보를 확인하여 튜토리얼 진행을 위해 쿠버네티스 클러스터 사용 환경을 구축합니다.

쿠버네티스 클러스터 생성

카카오클라우드 쿠버네티스 엔진을 이용해 쿠버네티스 클러스터를 생성합니다. 다음 문서 Kubernetes Engine으로 쿠버네티스 클러스터 구축를 진행하여 쿠버네티스 사용 환경을 구축합니다.

Step 1. 인스턴스 그룹 생성하기

  1. 카카오클라우드 콘솔 > Kubernetes Engine > 클러스터 목록 화면에서 사전 작업에서 생성한 쿠버네티스 클러스터인 tutorial을 선택합니다.

  2. 노드 풀 탭을 선택하고 우측 [+ 노드 풀 만들기] 버튼을 클릭하여 노드풀 생성을 진행합니다. 아래 표를 확인하여 label=true값을 레이블로 하는 노드풀을 생성합니다.

    구분항목설정/입력값
    노드 풀 타입Virtual Machine
    기본 설정노드 풀 이름tutorial-label
    Instance 타입t1i.micro
    Volume 타입 / 크기SSD / 50GB
    노드 수2
    노드 풀 Network 설정VPCtutorial
    Subnet전체 선택 (기본값)
    Key Pair사용자의 키 페어
    고급 설정노드 레이블- 키 : label
    - 값 : true
  3. 노드 풀 탭을 선택하고 우측 [+ 노드 풀 만들기] 버튼을 클릭하여 노드풀 생성을 진행합니다. 아래 표를 확인하여 taint=true값을 레이블로 하며 tutorial=true:NoSchedule값을 테인트로 하는 노드풀을 생성합니다.

    구분항목설정/입력값
    노드 풀 타입Virtual Machine
    기본 설정노드 풀 이름tutorial-taint
    Instance 타입t1i.small
    Volume 타입 / 크기SSD / 50GB
    노드 수2
    노드 풀 Network 설정VPCtutorial
    Subnet전체 선택 (기본값)
    Key Pair사용자의 키 페어
    고급 설정노드 레이블- 키 : taint
    - 값 : true
    노드 테인트- 키 : tutorial
    - 값 : true
    - 테인트 이펙트 : NoSchedule

Step 2. 레이블을 이용한 파드 배포하기

이 단계에서는 레이블을 기반으로 파드가 해당 노드 풀의 노드에만 스케줄링될 수 있도록 설정하는 과정을 다룹니다.

  1. 파드를 정의하는 YAML 파일을 작성하고 배포합니다. 이 파일은 파드의 설정과 label=true 레이블을 가진 노드에 배포될 것을 지정하는 NodeSelector 설정을 포함합니다.

    cat <<EOF | kubectl create -f-
    apiVersion: v1
    kind: Pod
    metadata:
    name: ubuntu-pod-label-example
    spec:
    containers:
    - name: ubuntu-container
    image: ubuntu
    command: ["/bin/bash"]
    args: ["-c", "while true; do echo 'Event: Label Pod is Running...'; sleep 10; done"]
    nodeSelector:
    label: "true"
    EOF
  2. 파드가 성공적으로 생성되었는지 확인하기 위해 아래 명령을 사용합니다. ubuntu-pod-label-example 파드가 나열되어야 합니다.

    kubectl get pod ubuntu-pod-label-example
  3. 파드가 label=true 레이블을 가진 노드에 할당되었는지 확인하기 위해 아래 명령을 사용합니다. 이 명령은 파드가 할당된 노드의 이름을 보여줍니다. 카카오클라우드 콘솔 > Kubernetes Engine > tutorial > 노드 풀 탭 > tutorial-label > 노드 탭에 접속하여 일치하는 노드가 있는지 확인합니다.

    kubectl get pod ubuntu-pod-label-example -o custom-columns=NODE_NAME:.spec.nodeName
    안내

    클러스터의 tutorial-label 노드 풀이 Running 상태여야 확인할 수 있습니다.

    • 해당 과정에서 5~7분의 소요시간이 있을 수 있습니다.
  4. 생성된 노드에는 몇가지 정보가 기본으로 레이블에 설정되어 있습니다. 해당 정보를 기반으로 더 세밀하게 파드를 배치할 수 있습니다. 아래는 기존 예시를 기반으로 가용 영역 kr-central-2-b에 위치한 노드에 파드를 배치하는 예시입니다.

    cat <<EOF | kubectl create -f-
    apiVersion: v1
    kind: Pod
    metadata:
    name: ubuntu-pod-label-az-b-example
    spec:
    containers:
    - name: ubuntu-container
    image: ubuntu
    command: ["/bin/bash"]
    args: ["-c", "while true; do echo 'Event: Label Pod is Running...'; sleep 10; done"]
    nodeSelector:
    label: "true"
    topology.kubernetes.io/zone: "kr-central-2-b"
    EOF
  5. 아래 코드를 이용하여 해당 파드가 가용영역 kr-central-2-b의 노드에 잘 배치되었는지 확인합니다. 카카오클라우드 콘솔 > Kubernetes Engine > tutorial > 노드 풀 탭 > tutorial-label > 노드 탭에 접속하여 일치하는 노드가 있는지와 해당 노드의 가용 영역이 kr-central-2-b와 일치하는지 확인합니다.

    kubectl get pod ubuntu-pod-label-az-b-example -o custom-columns=NODE_NAME:.spec.nodeName

Step 3. 테인트와 톨러레이션을 이용한 파드 배포하기

이 단계에서는, tutorial=true:NoSchedule라는 테인트가 적용된 노드 풀에 예제 파드를 배치합니다. 이 테인트는 해당 노드에 적절한 톨러레이션(toleration)을 가진 파드만을 배정하도록 합니다.

  1. 파드를 정의하는 YAML 파일을 작성하고 배포합니다. 이 파일은 파드의 설정과 해당 노드 풀의 테인트에 맞는 톨러레이션을 포함합니다.

    cat <<EOF | kubectl create -f-
    apiVersion: v1
    kind: Pod
    metadata:
    name: ubuntu-pod-toleration-example
    spec:
    containers:
    - name: ubuntu-container
    image: ubuntu
    command: ["/bin/bash"]
    args: ["-c", "while true; do echo 'Event: Tolerations Pod is Running...'; sleep 10; done"]
    nodeSelector:
    taint: "true"
    tolerations:
    - key: "tutorial"
    operator: "Equal"
    value: "true"
    effect: "NoSchedule"
    EOF
  2. 파드가 성공적으로 생성되었는지 확인하기 위해 아래 명령을 사용합니다. ubuntu-pod-toleration-example 파드가 나열되어야 합니다.

    kubectl get pod ubuntu-pod-toleration-example
  3. 파드가 테인트를 가진 노드에 할당되었는지 확인하기 위해 아래 명령을 사용합니다. 이 명령은 파드가 할당된 노드의 이름을 보여줍니다. 카카오클라우드 콘솔 > Kubernetes Engine > tutorial > 노드 풀 탭 > tutorial-taint > 노드 탭에 접속하여 일치하는 노드가 있는지 확인합니다.

    kubectl get pod ubuntu-pod-toleration-example -o custom-columns=NODE_NAME:.spec.nodeName