실제 쿠버네티스를 이용해 서비스를 배포할 경우, 파드를 분류할 필요가 있다. 제대로 분류가 되어 있지 않다면, 무수히 많은 파드들이 뒤죽박죽 될 것이 분명하기 때문이다.
레이블
레이블은 리소스에 첨부하는 키-값 쌍이다. 원하는 만큼 추가할 수 있고 이를 통해 리소스를 선택할 수 있다.
바로 실습으로 확인해보자.
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를 스케줄링할 수 있다.
'개발 이야기 > 쿠버네티스' 카테고리의 다른 글
쿠버네티스 - 파드 중지/삭제 - 15 (0) | 2021.09.06 |
---|---|
쿠버네티스 - 네임스페이스 - 14 (0) | 2021.08.12 |
쿠버네티스 - YAML - 12 (0) | 2021.07.28 |
쿠버네티스 - 파드 - 11 (0) | 2021.07.23 |
쿠버네티스 - 수평 확장 - 10 (0) | 2021.07.14 |