쿠버네티스 - label (레이블)

category 카테고리 없음 2021. 12. 2. 21:13
728x90
반응형

label (레이블)

정의

  • Node를 포함하여 pod, deployment 등 모든 리소스에 할당
  • 리소스의 특성을 분류하고 selector를 이용해서 선택
  • Key-Value 한쌍으로 적용

생성

파드이름생성방법레이블
cmdpodcmd 명령어run=cmdpod (자동으로 할당됨)
pod-demoyaml 파일 
label-pod-demoyaml 파일name=mainui,rel=stable
root@master:~# kubectl run cmdpod --image=nginx:1.14 --port=80
pod/cmdpod created
root@master:~# cat > pod1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-demo
spec:
  containers:
  - name: nginx
    image: nginx:1.14
    ports:
    - containerPort: 80
root@master:~# cat > pod2.yaml
apiVersion: v1
kind: Pod
metadata:
  name: label-pod-demo
  labels:
    name: mainui
    rel: stable
spec:
  containers:
  - name: nginx
    image: nginx:1.14
    ports:
    - containerPort: 80
root@master:~# kubectl create -f pod1.yaml -f pod2.yaml 
pod/pod-demo created
pod/label-pod-demo created

조회

root@master:~# kubectl get pods --show-labels 
NAME             READY   STATUS    RESTARTS   AGE   LABELS
cmdpod           1/1     Running   0          45s   run=cmdpod
label-pod-demo   1/1     Running   0          6s    name=mainui,rel=stable
pod-demo         1/1     Running   0          6s    <none>

특정 레이블 조회

name=mainui라는 pod를 조회해본다.

root@master:~# kubectl get pods -l name=mainui
NAME             READY   STATUS    RESTARTS   AGE
label-pod-demo   1/1     Running   0          6m4s

레이블 컬럼을 생성해서 조회

NAME 이라는 컬럼을 생성해서 조회해본다.

root@master:~# kubectl get pods -L name 
NAME             READY   STATUS    RESTARTS   AGE     NAME
cmdpod           1/1     Running   0          8m26s   
label-pod-demo   1/1     Running   0          7m47s   mainui
pod-demo         1/1     Running   0          7m47s

레이블 할당

root@master:~# kubectl get pods --show-labels
NAME             READY   STATUS    RESTARTS   AGE     LABELS
cmdpod           1/1     Running   0          9m34s   run=cmdpod
label-pod-demo   1/1     Running   0          8m55s   name=mainui,rel=stable
pod-demo         1/1     Running   0          8m55s   <none>
root@master:~# kubectl label pod pod-demo name=test
pod/pod-demo labeled
root@master:~# kubectl get pods --show-labels
NAME             READY   STATUS    RESTARTS   AGE     LABELS
cmdpod           1/1     Running   0          10m     run=cmdpod
label-pod-demo   1/1     Running   0          9m41s   name=mainui,rel=stable
pod-demo         1/1     Running   0          9m41s   name=test

이미 기존에 있는 레이블을 변경할때는 --overwrite 옵션을 붙여준다.

root@master:~# kubectl label pod pod-demo name=test2
error: 'name' already has a value (test), and --overwrite is false
root@master:~# kubectl label pod pod-demo name=test2 --overwrite
pod/pod-demo labeled
root@master:~# kubectl get pods --show-labels
NAME             READY   STATUS    RESTARTS   AGE   LABELS
cmdpod           1/1     Running   0          11m   run=cmdpod
label-pod-demo   1/1     Running   0          10m   name=mainui,rel=stable
pod-demo         1/1     Running   0          10m   name=test2

레이블 삭제

끝에 <LABEL_NAME>- 하이픈을 붙여주어 삭제를 한다.

root@master:~# kubectl label pod pod-demo name-
pod/pod-demo labeled
root@master:~# kubectl get pods --show-labels
NAME             READY   STATUS    RESTARTS   AGE   LABELS
cmdpod           1/1     Running   0          12m   run=cmdpod
label-pod-demo   1/1     Running   0          11m   name=mainui,rel=stable
pod-demo         1/1     Running   0          11m   <none>

 

워커 노드에 레이블 설정

정의

  • Worker Node의 특성을 Label로 설정
    • kubectl label nodes <노드이름> <레이블 키>=<레이블 값>
  • 노드를 선택해서 파드를 배치할 수 있다.

레이블 할당

root@master:~# kubectl label nodes node1.example.com gpu=true disk=ssd
node/node1.example.com labeled
root@master:~# kubectl label nodes node2.example.com gpu=true
node/node2.example.com labeled

이미 기존에 있는 레이블을 변경할때는 --overwrite 옵션을 붙여준다.

 

root@master:~# kubectl label nodes node2.example.com gpu=false
error: 'gpu' already has a value (true), and --overwrite is false
root@master:~# kubectl label nodes node2.example.com gpu=false --overwrite
node/node2.example.com labeled​

조회

root@master:~# kubectl get nodes --show-labels 
NAME                 STATUS   ROLES                  AGE   VERSION   LABELS
master.example.com   Ready    control-plane,master   20d   v1.22.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master.example.com,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
node1.example.com    Ready    <none>                 20d   v1.22.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disk=ssd,gpu=true,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1.example.com,kubernetes.io/os=linux
node2.example.com    Ready    <none>                 20d   v1.22.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,gpu=false,kubernetes.io/arch=amd64,kubernetes.io/hostname=node2.example.com,kubernetes.io/os=linux

특정 레이블 조회

gpu=true라는 node를 조회해본다.

root@master:~# kubectl get nodes -l gpu=true
NAME                STATUS   ROLES    AGE   VERSION
node1.example.com   Ready    <none>   20d   v1.22.3

레이블 컬럼을 생성해서 조회

GPU, DISK

root@master:~# kubectl get nodes -L disk,gpu
NAME                 STATUS   ROLES                  AGE   VERSION   DISK   GPU
master.example.com   Ready    control-plane,master   20d   v1.22.3          
node1.example.com    Ready    <none>                 20d   v1.22.3   ssd    true
node2.example.com    Ready    <none>                 20d   v1.22.3          false

이라는 컬럼을 생성해서 조회해본다.

레이블 삭제

끝에 <LABEL_NAME>- 하이픈을 붙여주어 삭제를 한다.

root@master:~# kubectl label nodes node2.example.com gpu-
node/node2.example.com labeled

배치

gpu=true, disk=sdd 로 설정된 node1에 배치가 잘되는 것을 확인할 수 있다.
주의점은 ture/false 일 경우는 더블 쿼테이션 "" 으로 감싸줘야한다.

root@master:~# cat > pod-node.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-nodeselector
spec:
  nodeSelector:
    gpu: "true"
    disk: ssd
  containers:
  - name: nginx
    image: nginx:1.14
root@master:~# kubectl create -f pod-node.yaml 
pod/pod-nodeselector created
root@master:~# kubectl get nodes -L gpu,disk
NAME                 STATUS   ROLES                  AGE   VERSION   GPU    DISK
master.example.com   Ready    control-plane,master   20d   v1.22.3          
node1.example.com    Ready    <none>                 20d   v1.22.3   true   ssd
node2.example.com    Ready    <none>                 20d   v1.22.3   
root@master:~# kubectl get pods -o wide
NAME               READY   STATUS    RESTARTS   AGE   IP          NODE                NOMINATED NODE   READINESS GATES
pod-nodeselector   1/1     Running   0          14s   10.36.0.1   node1.example.com   <none>           <none>
728x90
반응형