Kubernetes

Kubernetes 기초 - Label(1)

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

1. 레이블(Label)이란

  • Node를 포함하여 pod, deployment 등 모든 리소스에 할당
  • 리소스의 특성을 분류하고, Selector를 이용해서 선택
  • Key-value 한쌍으로 적용
Pod tamplate Pod + Label tamplate
apiVersion: v1
kind: Pod
metadata:
  name: appjs-pod



spec:
  containers:
  - name: appjs-container 
    image: smlinux/appjs
    ports:
    - containerPort: 8080
apiVersion: v1
kind: Pod
metadata:
  name: appjs-pod
  labels:
    app: web
    version: "1.15"
spec:
  containers:
  - name: appjs-container
    image: smlinux/appjs
    ports:
    - containerPort: 8080

 

레이블은 기본적으로 " "로 묶어서 정의해야 하지만 단순 문자열의 경우 생략해도 무방하다(TRUE, FALSE, YES, NO 제외)

 

 

Label 과 Selector

Label
metadata:
  labels:
    rel: stable
    name: mainui

 

 

Selector
selector:
  matchLabels:
    key: value
  matchExpressions:
  - {key: name, operator: In, values: [mainui]}
  - {key: rel, operator: NotIn, values: ["beta","canary"]}

 

 

 


실습

 

파드 생성

 

세 개의 파드를 생성하여 각각의 레이블을 확인해보자.

두 개는 yaml로 생성할 것이고 하나는 터미널에 직접 입력하여 생성할 것이다.

# label-test.yaml
---
apiVersion: v1
kind: Pod
metadata:
  name: pod-demo
spec:
  containers:
  - name: nginx
    image: nginx:1.25
    ports:
    - containerPort: 80
---
apiVersion: v1
kind: Pod
metadata:
  name: label-pod-demo
  labels:
    name: mainui
    rel: stable
spec:
  containers:
  - name: nginx
    image: nginx:1.25
    ports:
    - containerPort: 80

 

 

위 파일을 생성한 후에 아래 명령으로 파드를 생성한다.

# 터미널에서 직접 실행
kubectl run cmdpod --image=nginx:1.25 --port=80

# yaml파일로 실행
kubectl create -f label-test.yaml

 

 

파드의 레이블 확인

 

생성된 파드의 레이블을 확인한다.

# label 확인
kubectl get pods --show-labels

# name-mainui의 레이블을 가진 파드만 출력 (selector)
kubectl get pods -l name=mainui

# 위와 동일한 명령
kubectl get pods --selector name=mainui

 

위 명령을 응용하면 특정 레이블을 가진 파드만 찾아서 삭제하거나 다른 작업을 할 수도 있게 된다.

 

 

실행 중인 파드에 레이블 부여

 

이미 실행 중인 파드에게 레이블을 붙여줄 수도 있다.

# 실행 중인 pod-demo 파드에게 레이블 붙여주기
kubectl label pod pod-demo name=test

 

 

만약 기존의 파드의 레이블 중 name=testname=login으로 변경하고 싶을 때는 반드시 덮어쓰기를 해줘야한다.

동일한 키로 여러 개의 값을 가질 수 없다.

# 레이블 덮어쓰기
kubectl label pod pod-demo name=login --overwrite

 

 

여러 개의 레이블을 한번에 할당하고 싶으면 사이에 공백을 두고 여러 개 지정할 수 있다.

하지만 그 중에 하나라도 중복된 레이블 있으면 --overwrite를 붙여서 작성해야한다.

kubectl label pod cmdpod name=order rel=beta

 

 

레이블 삭제

 

기존에 할당된 레이블을 삭제할 수도 있다.

레이블의 키를 쓰고 뒤에 '-' 문자를 입력하면 삭제된다.

# 레이블 삭제
kubectl label pod cmdpod run-

 

 

레이블 응용

 

# 특정 파드만 삭제
kubectl delete pods --selector name=login

 

 

 

자세한 내용은 아래 공식 문서를 참조

https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/

 

Labels and Selectors

Labels are key/value pairs that are attached to objects such as Pods. Labels are intended to be used to specify identifying attributes of objects that are meaningful and relevant to users, but do not directly imply semantics to the core system. Labels can

kubernetes.io

 

 

 


 

 

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

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

 

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

 

www.youtube.com

 

'Kubernetes' 카테고리의 다른 글

Kubernetes 기초 - Label(3)  (0) 2023.12.22
Kubernetes 기초 - Label(2)  (0) 2023.12.21
Kubernetes 기초 - Ingress(1)  (0) 2023.12.20
Kubernetes 기초 - Service(3)  (0) 2023.12.19
Kubernetes 기초 - Service(2)  (0) 2023.12.19