레이블 및 테인트를 설정하여 노드 풀 생성 및 사용
이 문서는 카카오클라우드 콘솔에서 노드 풀을 생성하고, 레이블과 테인트를 설정하여 워크로드를 적절한 인스턴스 그룹에 배포하는 방법을 안내합니다.
- 예상 소요 시간: 10분
- 사용자 환경
- Region: kr-central-2
- 사전 준비 사항
시나리오 소개
이번 시나리오에서는 쿠버네티스 클러스터에 인스턴스 그룹을 생성하고, 이를 활용하여 파드를 배포합니다. 여기에는 레이블과 테인트를 이용하여 특정 조건을 만족하는 워크로드를 적절한 인스턴스 그룹에 효과적으로 배포하는 방법이 포함됩니다. 레이블은 클러스터 내 리소스를 구분하고 조직화하는 데 사용되며, 테인트와 톨러레이션을 통해 워크로드의 스케줄링을 더 세밀하게 제어할 수 있습니다.
주요 단계는 다음과 같습니다.
- 노드 풀 생성: 카카오클라우드 콘솔을 이용하여 노드 풀을 생성합니다. 이 과정에서, 각 노드 풀에 맞는 레이블 및 테인트 값을 설정합니다.
- 레이블 및 테인트 기반의 파드 배포: 생성된 노드 풀에 맞춰 파드를 배포합니다. 이 때, 레이블을 기반으로 한 NodeSelector와 테인트를 용인하는 톨러레이션을 포함한 파드 설정을 사용합니다.
시작하기 전에
이 튜토리얼의 실습을 위해 쿠버네티스 사용 환경이 필요합니다. 실습에 적합한 쿠버네티스 환경이 구축되어 있지 않은 경우, Kubernetes Engine으로 쿠버네티스 클러스터 구축 튜토리얼을 참조하여 쿠버네티스 사용 환경을 구축합니다.
시작하기
Step 1. 인스턴스 그룹 생성
-
카카오클라우드 콘솔 > Container Pack > Kubernetes Engine > 클러스터 목록 화면에서 사전 작업에서 생성한 쿠버네티스 클러스터인
tutorial
을 선택합니다. -
노드 풀 탭을 선택하고 우측 [노드 풀 생성] 버튼을 클릭하여 노드 풀 생성을 진행합니다. 아래 표를 확인하여
label=true
값을 레이블로 하는 노드 풀을 생성합니다.구분 항목 설정/입력값 노드 풀 유형 Virtual Machine 기본 설정 노드 풀 이름 tutorial-label 인스턴스 유형 t1i.micro 볼륨 유형 / 크기 SSD / 50GB 노드 수 2 노드 풀 네트워크 설정 VPC tutorial 서브넷 전체 선택 (기본값) 키 페어 사용자의 키 페어 고급 설정 노드 레이블 - 키 : label
- 값 : true -
노드 풀 탭을 선택하고 우측 [노드 풀 생성] 버튼을 클릭하여 노드 풀 생성을 진행합니다. 아래 표를 확인하여
taint=true
값을 레이블로 하며tutorial=true:NoSchedule
값을 테인트로 하는 노드 풀을 생성합니다.구분 항목 설정/입력값 노드 풀 유형 Virtual Machine 기본 설정 노드 풀 이름 tutorial-taint 인스턴스 유형 t1i.small 볼륨 유형 / 크기 SSD / 50GB 노드 수 2 노드 풀 네트워크 설정 VPC tutorial 서브넷 전체 선택 (기본값) 키 페어 사용자의 키 페어 고급 설정 노드 레이블 - 키 : taint
- 값 : true노드 테인트 - 키 : tutorial
- 값 : true
- 테인트 이펙트 : NoSchedule
Step 2. 레이블을 이용한 파드 배포
이 단계에서는 레이블을 기반으로 파드가 해당 노드 풀의 노드에만 스케줄링될 수 있도록 설정하는 과정을 다룹니다.
-
파드를 정의하는 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 -
파드가 성공적으로 생성되었는지 확인하기 위해 아래 명령을 사용합니다. ubuntu-pod-label-example 파드가 나열되어야 합니다.
kubectl get pod ubuntu-pod-label-example
-
파드가
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분의 소요시간이 있을 수 있습니다.
-
생성된 노드에는 몇가지 정보가 기본으로 레이블에 설정되어 있습니다. 해당 정보를 기반으로 더 세밀하게 파드를 배치할 수 있습니다. 아래는 기존 예시를 기반으로 가용 영역
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 -
아래 코드를 이용하여 해당 파드가 가용 영역
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)을 가진 파드만을 배정하도록 합니다.
-
파드를 정의하는 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 -
파드가 성공적으로 생성되었는지 확인하기 위해 아래 명령을 사용합니다. ubuntu-pod-toleration-example 파드가 나열되어야 합니다.
kubectl get pod ubuntu-pod-toleration-example
-
파드가 테인트를 가진 노드에 할당되었는지 확인하기 위해 아래 명령을 사용합니다. 이 명령은 파드가 할당된 노드의 이름을 보여줍니다. 카카오클라우드 콘솔 > Kubernetes Engine > tutorial > 노드 풀 탭 > tutorial-taint > 노드 탭에 접속하여 일치하는 노드가 있는지 확인합니다.
kubectl get pod ubuntu-pod-toleration-example -o custom-columns=NODE_NAME:.spec.nodeName