Kubernetes

Kubernetes 기초 - Label(2)

사실 나도 모름 2023. 12. 21. 23:41
  1. 레이블이란
  2. 워커 노드에 레이블 설정               ←  오늘 볼 내용
  3. 레이블과 애너테이션
  4. 레이블을 이용한 카나리 배포

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

정확히 node1에 배치

 

만약 파드를 배포할 때 노드 셀렉터를 지정해놓고 노드 셀렉터와 일치하는 레이블을 가진 노드가 없는 경우 파드는 Running 상태가 아니라 Pending 상태에서 조건을 만족하는 노드가 생길 때까지 대기한다.

 

 


 

 

아래 영상을 참고했습니다.

https://youtube.com/playlist?list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&si=hbPclcPuc-6lTNdE

 

[따배쿠] 쿠버네티스 시리즈

 

www.youtube.com

 

'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