- 레이블이란
- 워커 노드에 레이블 설정 ← 오늘 볼 내용
- 레이블과 애너테이션
- 레이블을 이용한 카나리 배포
2. 워커 노드에 레이블(Label) 설정
레이블을 설정할 때 워커 노드에도 설정할 수 있다.
파드나 다른 리소스 API에 레이블을 설정하면 되지 왜 굳이 노드에 레이블을 설정할까?
각 노드는 다른 조건의 하드웨어 환경을 가질 수도 있다.
쿠버네티스는 하드웨어 시스템 환경까지 정보를 가지고 있지 않다.
만약 머신러닝 프로그램이 들어있는 파드를 배포한다고 가정했을 때 GPU를 가진 노드에 배포하면 좋을 것이다.
이 때 GPU를 가진 노드에 레이블을 설정해 놓으면 파드를 배포할 때 적절한 환경을 지닌 노드에 배포할 수 있게 된다.
쿠버네티스에게 이러한 물리 시스템 환경 등의 정보를 레이블을 통해 미리 알려주는 것이다.
- Worker Node의 특성을 Label로 설정
- 노드를 선택해서 파드를 배치할 수 있다.
사용법
kubectl label node <노드 이름> <레이블 키>=<레이블 값>
전체적인 구조는 파드에 레이블을 부여하는 것과 큰 차이는 없다.
노드에는 기본적으로 존재하는 레이블이 있는데 다음과 같이 생겼다.
실습
노드에 레이블 부여
이제 노드에 레이블을 부여하는 실습을 해보자.
# gpu=true disk=ssd라는 레이블을 node1에 부여
kubectl label nodes node1 gpu=true disk=ssd
# gpu=true라는 레이블을 node2에 부여
kubectl label nodes node2 gpu=true
# disk=ssd라는 레이블을 node3에 부여
kubectl label nodes node3 disk=ssd
특정 레이블에 대한 정보만 빼내서 보고 싶을 때 쓰는 명령도 있다.
# 특정 레이블만 추출해서 확인
kubectl get nodes -L disk,gpu
특정 레이블을 가진 노드에 파드 배치
NodeSelector를 통해 특정 레이블을 가진 노드에 파드를 배포할 수 있다.
노드 셀렉터를 사용한 파드 템플릿은 다음과 같다.
apiVersion: v1
kind: Pod
metadata:
name: testpod
spec:
containers:
- name: nginx
image: nginx:1.25
nodeSelector:
key1: value1
key2: value2
노드 셀렉터 부분에 노드에 부여한 다양한 키-값쌍의 레이블을 입력하여 원하는 노드에 파드를 배치할 수 있다.
가령 node1에 배치하고 싶다면 노드 셀렉터 부분에 gpu="true", disk=ssd에 입력하면 될 것이다.
# nodeselector.yaml
apiVersion: v1
kind: Pod
metadata:
name: testpod
spec:
containers:
- name: nginx
image: nginx:1.25
nodeSelector:
gpu: "true"
disk: ssd
만약 파드를 배포할 때 노드 셀렉터를 지정해놓고 노드 셀렉터와 일치하는 레이블을 가진 노드가 없는 경우 파드는 Running 상태가 아니라 Pending 상태에서 조건을 만족하는 노드가 생길 때까지 대기한다.
아래 영상을 참고했습니다.
https://youtube.com/playlist?list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&si=hbPclcPuc-6lTNdE
'Kubernetes' 카테고리의 다른 글
Kubernetes 기초 - Label(4) (0) | 2023.12.22 |
---|---|
Kubernetes 기초 - Label(3) (0) | 2023.12.22 |
Kubernetes 기초 - Label(1) (0) | 2023.12.21 |
Kubernetes 기초 - Ingress(1) (0) | 2023.12.20 |
Kubernetes 기초 - Service(3) (0) | 2023.12.19 |