728x90
반응형
label (레이블)
정의
- Node를 포함하여 pod, deployment 등 모든 리소스에 할당
- 리소스의 특성을 분류하고 selector를 이용해서 선택
- Key-Value 한쌍으로 적용
생성
파드이름 | 생성방법 | 레이블 |
cmdpod | cmd 명령어 | run=cmdpod (자동으로 할당됨) |
pod-demo | yaml 파일 | |
label-pod-demo | yaml 파일 | 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
반응형