brunch

3. 오라클 클라우드 - 쿠버네티스 -라벨,셀렉터

by Master Seo

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



감사합니다.

keyword
매거진의 이전글2. 오라클 클라우드 - 쿠버네티스- 노드,파드