pod에 라벨 붙여 사용해보자
워커 노드에 라벨 붙여, 라벨 지정 노드에 파드를 생성해보자 - nodeSelector
<1> Pod에 라벨 지정, 사용, 삭제
<2 node에 라벨을 지정하고, pod 생성시 해당 라벨과 일치하는 node에 pod를 만든다.
<1> Pod에 라벨 지정, 사용, 삭제
1
노드 확인
topasvga@cloudshell:~ (ap-seoul-1)$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
10.0.10.141 Ready node 5d22h v1.25.4
10.0.10.80 Ready node 5d22h v1.25.4
2
파드 확인
topasvga@cloudshell:~ (ap-seoul-1)$ kubectl get pods
No resources found in default namespace.
3
라벨 지정된 파드 생성해보기
파일 생성하기
topasvga@cloudshell:~ (ap-seoul-1)$ cat << EOF > labels.yaml
> apiVersion: v1
> kind: Pod
> metadata:
> name: myweb1
> labels:
> environment: production
> app: nginx
> spec:
> containers:
> - image: nginx
> name: myweb1
> ports:
> - containerPort: 80
> protocol: TCP
> ---
> apiVersion: v1
> kind: Pod
> metadata:
> name: myweb2
> labels:
> environment: dev
> app: nginx
> spec:
> containers:
> - image: nginx
> name: myweb2
> ports:
> - containerPort: 80
> protocol: TCP
> EOF
4
파드 만들기
topasvga@cloudshell:~ (ap-seoul-1)$ kubectl apply -f labels.yaml
pod/myweb1 created
pod/myweb2 created
topasvga@cloudshell:~ (ap-seoul-1)$ kubectl get pods
NAME READY STATUS RESTARTS AGE
myweb1 1/1 Running 0 28s
myweb2 1/1 Running 0 28s
5
파드의 라벨 보기
topasvga@cloudshell:~ (ap-seoul-1)$ kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
myweb1 1/1 Running 0 51s app=nginx,environment=production
myweb2 1/1 Running 0 51s app=nginx,environment=dev
6
app=nginx label pod 보기
topasvga@cloudshell:~ (ap-seoul-1)$ kubectl get pod -l app=nginx
NAME READY STATUS RESTARTS AGE
myweb1 1/1 Running 0 74s
myweb2 1/1 Running 0 74s
7
porduction 라벨 pod 보기
topasvga@cloudshell:~ (ap-seoul-1)$ kubectl get pod -l environment=production
NAME READY STATUS RESTARTS AGE
myweb1 1/1 Running 0 88s
8
라벨 environment=production 파드만 지우기
topasvga@cloudshell:~ (ap-seoul-1)$ kubectl delete pod -l environment=production
pod "myweb1" deleted
9
라벨 모두 보기
topasvga@cloudshell:~ (ap-seoul-1)$ kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
myweb2 1/1 Running 0 112s app=nginx,environment=dev
10
app으로 시작하는 라벨만 지우기
topasvga@cloudshell:~ (ap-seoul-1)$ kubectl label pod myweb2 app-
pod/myweb2 unlabeled
11
라벨 보기
topasvga@cloudshell:~ (ap-seoul-1)$ kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
myweb2 1/1 Running 0 2m17s environment=dev
12
파드 모두 지우기
topasvga@cloudshell:~ (ap-seoul-1)$ kubectl delete pod --all
pod "myweb2" deleted
topasvga@cloudshell:~ (ap-seoul-1)$ kubectl get pod
No resources found in default namespace.
13
화면 정리
clear
<2 node에 라벨을 지정하고, pod 생성시 해당 라벨과 일치하는 node에 pod를 만든다.
1
예를 들어 gpu서버를 특정 work node에 배치할때 사용한다.
2
node에도 라벨이 있다.
node의 라벨을 보자
topasvga@cloudshell:~ (ap-seoul-1)$ kubectl get node --show-labels
NAME STATUS ROLES AGE VERSION LABELS
10.0.10.141 Ready node 5d23h v1.25.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=VM.Standard.E3.Flex,beta.kubernetes.io/os=linux,displayName=oke-c2lqg34zlva-n5pdjpab7qa-snhapqbwwhq-1,failure-domain.beta.kubernetes.io/region=ap-seoul-1,failure-domain.beta.kubernetes.io/zone=AP-SEOUL-1-AD-1,hostname=oke-c2lqg34zlva-
10.0.10.80 Ready node 5d23h v1.25.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=VM.Standard.E3.Flex,beta.kubernetes.io/os=linux,displayName=oke-c2lqg34zlva-n5pdjpab7qa-snhapqbwwhq-0,failure-domain.beta.kubernetes.io/region=ap-seoul-1,failure-domain.beta.kubernetes.io/zone=AP-SEOUL-1-AD-1,hostname=oke-c2lqg34zlva-n5pdjpab7qa-snhapqbwwhq-
2
노드 141에 gpu=ndivia 라벨을 붙인다.
topasvga@cloudshell:~ (ap-seoul-1)$ kubectl label node 10.0.10.141 gpu=ndivia
node/10.0.10.141 labeled
80에도 붙인다.
topasvga@cloudshell:~ (ap-seoul-1)$ kubectl label node 10.0.10.80 gpu=ndivia
node/10.0.10.80 labeled
3
확인
topasvga@cloudshell:~ (ap-seoul-1)$ kubectl get nodes -l gpu=ndivia
NAME STATUS ROLES AGE VERSION
10.0.10.141 Ready node 5d23h v1.25.4
10.0.10.80 Ready node 5d23h v1.25.4
4
141에 gpu 라벨 지운다.
gpu- 하면 gpu 라벨이 지워진다.
topasvga@cloudshell:~ (ap-seoul-1)$ kubectl label nodes 10.0.10.141 gpu-
node/10.0.10.141 unlabeled
5
gpu 라벨 붙은 노드를 확인한다.
80이다.
topasvga@cloudshell:~ (ap-seoul-1)$ kubectl get nodes -l gpu=ndivia
NAME STATUS ROLES AGE VERSION
10.0.10.80 Ready node 5d23h v1.25.4
6
nodeSelector: 로 노드 라벨이 gpu: ndivia 인곳에 파드를 생성한다.
topasvga@cloudshell:~ (ap-seoul-1)$ cat << EOF > labels-node.yaml
> apiVersion: v1
> kind: Pod
> metadata:
> name: myweb
> spec:
> containers:
> - image: nginx
> name: myweb
> ports:
> - containerPort: 80
> protocol: TCP
> nodeSelector:
> gpu: ndivia
> EOF
7
파드 만들기
topasvga@cloudshell:~ (ap-seoul-1)$ kubectl apply -f labels-node.yaml
pod/myweb created
8
노드 80에 만들어 졌는지 확인하자.
topasvga@cloudshell:~ (ap-seoul-1)$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myweb 1/1 Running 0 5s 10.244.0.16 10.0.10.80 <none> <none>
9
파드 이름을 바꾸어서 몇개 더 만들어 보자
topasvga@cloudshell:~ (ap-seoul-1)$ cat labels-node.yaml | sed "s/name: myweb/name: myweb2/g" | kubectl apply -f -
pod/myweb2 created
topasvga@cloudshell:~ (ap-seoul-1)$ cat labels-node.yaml | sed "s/name: myweb/name: myweb3/g" | kubectl apply -f -
pod/myweb3 created
topasvga@cloudshell:~ (ap-seoul-1)$ cat labels-node.yaml | sed "s/name: myweb/name: myweb4/g" | kubectl apply -f -
pod/myweb4 created
10
확인하자.
모두 노드 80에 만들어 졌다.
topasvga@cloudshell:~ (ap-seoul-1)$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myweb 1/1 Running 0 80s 10.244.0.16 10.0.10.80 <none> <none>
myweb2 1/1 Running 0 28s 10.244.0.17 10.0.10.80 <none> <none>
myweb3 1/1 Running 0 23s 10.244.0.18 10.0.10.80 <none> <none>
myweb4 1/1 Running 0 16s 10.244.0.19 10.0.10.80 <none> <none>
topasvga@cloudshell:~ (ap-seoul-1)$
11
삭제
kubectl delete pod --all
감사합니다.