개발 이야기/쿠버네티스

쿠버네티스 - 레이블 - 13

석구석구 2021. 8. 1. 19:27

실제 쿠버네티스를 이용해 서비스를 배포할 경우, 파드를 분류할 필요가 있다. 제대로 분류가 되어 있지 않다면, 무수히 많은 파드들이 뒤죽박죽 될 것이 분명하기 때문이다.

 

레이블

레이블은 리소스에 첨부하는 키-값 쌍이다. 원하는 만큼 추가할 수 있고 이를 통해 리소스를 선택할 수 있다.

 

바로 실습으로 확인해보자.

apiVersion: v1
kind: Pod
metadata:
  name: suk9
  labels:
    creation_method: manual
    env: prod
spec:
  containers:
  - image: seokkyulee/suk9
    name: suk9
    ports:
    - containerPort: 8080
      protocol: TCP
kubectl create -f suk9-manual.yaml
kubectl get pods --show-labels
kubectl get pods -L creation_method,env

각 pods에 부착된 레이블을 확인하고, 우리가 원하는 레이블을 가진 pods를 찾을 수도 있다.

kubectl label pods suk9-gnrzs creation_method=manual
kubectl label pods suk9 env=debug --overwrite

물론 이미 생성된 파드에 라벨을 새롭게 붙일 수도, 업데이트할 수도 있다.

이것은 셀렉터로 동작하기 때문에, 여러 조건을 이용해 원하는 pods를 찾아낼 수 있도록 돕는다.

kubectl get pods -l creation_method=manual
kubectl get pods -l '!creation_method'
kubectl get pods -l creation_method!=manual
kubectl get pods -l 'env in (debug)'
kubectl get pods -l 'env notin (debug)'

파드에만 라벨을 붙일 수 있는 게 아니다. 모든 쿠버네티스 오브젝트에 레이블을 부착할 수 있다.

kubectl label node minikube gpu=true
kubectl get nodes --show-labels
kubectl get nodes -l gpu=true

gpu를 가지고 있는 노드를 라벨을 이용해 구분할 수 있다.

apiVersion: v1
kind: Pod
metadata:
  name: suk9
  labels:
    creation_method: manual
    env: prod
spec:
  nodeSelector:
    gpu: "true"
  containers:
  - image: seokkyulee/suk9
    name: suk9
    ports:
    - containerPort: 8080
      protocol: TCP

이런 식으로 우리가 원하는 조건의 노드(컴퓨팅 자원)에 pods를 스케줄링할 수 있다.