본문으로 건너뛰기

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

쿠버네티스 클러스터에 노드 풀을 생성하고 레이블 및 테인트를 설정한 뒤, 설정값을 기반으로 파드를 배포합니다.

기본 정보

시나리오 소개​

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

주요 내용은 다음과 같습니다.

  1. 노드 풀 생성: 카카오클라우드 콘솔을 이용하여 노드 풀을 생성합니다. 이 과정에서, 각 노드 풀에 맞는 레이블 및 테인트 값을 설정합니다.
  2. 레이블 및 테인트 기반의 파드 배포: 생성된 노드 풀에 맞춰 파드를 배포합니다. 이 때, 레이블을 기반으로 한 NodeSelector와 테인트를 용인하는 톨러레이션을 포함한 파드 설정을 사용합니다.

시작하기 전에​

이 튜토리얼의 실습을 위해 쿠버네티스 사용 환경이 필요합니다. 실습에 적합한 쿠버네티스 환경이 구축되어 있지 않은 경우, Kubernetes Engine으로 쿠버네티스 클러스터 구축 튜토리얼을 참조하여 쿠버네티스 사용 환경을 구축합니다.

시작하기​

Step 1. 인스턴스 그룹 생성​

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

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

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

    구분항목설정/입력값
    노드 풀 유형Virtual Machine
    기본 설정노드 풀 이름tutorial-taint
    인스턴스 유형t1i.small
    볼륨 유형 / 크기SSD / 50GB
    노드 수2
    노드 풀 네트워크 설정VPCtutorial
    서브넷전체 선택 (기본값)
    키 페어사용자의 키 페어
    고급 설정노드 레이블- 키 : 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