brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Jun 29. 2021

쿠버1탄-6. 쿠버네티스-라벨과 셀렉터를 알아보자.



다음은 쿠버네티스 스터디 자료를 참고해  정리한 내용입니다.


리소스에 태그 붙이는게 라벨이다.

셀렉터는 해당 라벨을  조회한다.

쿠버네티스의 라벨과 셀렉터를 알아보자.




<1> 파드에 라벨 설정해보자.

<2>  노드셀렉터(nodeSelector) 를 이용한 파드 배포 확인

<3>  정리

<4> 다음 과정



<1> 파드에 라벨 설정해보자.


1

ec2에 로그인

쿠버네티스 master API 서버 로그인 

ssh -i ~/.ssh/id_rsa ubuntu@api.k8s.serverchk.com


기존 파드 삭제 와 확인

kubectl delete pod --all

kubectl delete pod myweb2

kubectl get pods


2

labels.yaml  만들어 보자.

lable은 키와 value 값으로 되어 있다!!


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




3

파드 생성?

kubectl apply -f labels.yaml

pod/myweb1 created

pod/myweb2 created


kubectl get pod

NAME                                READY   STATUS    RESTARTS   AGE

myweb1                              1/1     Running   0          49s

myweb2                              1/1     Running   0          49s



4

파드 라벨 정보 확인

kubectl get pod --show-labels

NAME     READY   STATUS    RESTARTS   AGE   LABELS

myweb1   1/1     Running   0          5s    app=nginx,environment=production

myweb2   1/1     Running   0          5s    app=nginx,environment=dev


5

파드 라벨이 nginx 인것만 조회 하기


kubectl get pod -l app=nginx

NAME     READY   STATUS    RESTARTS   AGE

myweb1   1/1     Running   0          2m35s

myweb2   1/1     Running   0          2m35s


6

셀렉터를 통한 확인


kubectl get pod -l environment=production

NAME     READY   STATUS    RESTARTS   AGE

myweb1   1/1     Running   0          2m14s



7

셀렉터를 활용하여  production 으로 지정된 특정 파드만 삭제 가능하다.

kubectl delete pod -l environment=production

pod "myweb1" deleted



8

kubectl get pod --show-labels

NAME                                READY   STATUS    RESTARTS   AGE     LABELS

myweb2                              1/1     Running   0          3m8s    app=nginx,environment=de



9

라벨 제거 = 라벨의 키 뒤에 -

kubectl label pod myweb2 app-

pod/myweb2 labeled

// app  라벨을 삭제 했다.



10

kubectl get pod --show-labels

myweb2                              1/1     Running   0          4m21s   environment=dev

// app  라벨을 삭제되어 environment 라벨만 남았다.



11

파드 삭제

kubectl delete pod --all

kubectl get pod





<2>  노드셀렉터(nodeSelector) 를 이용한 Pod 배포 확인


Pod 가 특정 노드에만 할당되도록 스케줄링 할수 있다.

워커노드 1대에 라벨 지정 , Pod 가 해당 워커노드에 배포되는지 확인


1

노드 기본 라벨 정보 확인 ?

nodde에도 기본적으로 라벨이 설정 되어 있다


kubectl get node --show-labels

NAME                                    STATUS   ROLES                  AGE   VERSION   LABELS

ip-172-20-38-114.ap-northeast-1.compute.internal   Ready    node  beta.kubernetes.io/arch


2

wokrer node1에 라벨 추가 설정 해보자

kubectl label node


kubectl label node ip-172-20-38-114.ap-northeast-1.compute.internal gpu=ndivia


kubectl get node --show-labels



3

work node1에 라벨 지정 , Pod 가 해당 워커노드에 배포되는지 확인


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


// gpu: ndivia가 있는 node에 배포하라고 설정하는 것이다.



4

kubectl apply -f labels-node.yaml

pod/myweb created



5

pod 배포  node 위치  확인

kubectl get pod -o wide


ubuntu@ip-172-20-41-255:~$ kubectl get pod -o wide

NAME    READY   STATUS    RESTARTS   AGE   IP              NODE                                               NOMINATED NODE   READINESS GATES

myweb   1/1     Running   0          19s   100.99.166.34   ip-172-20-38-114.ap-northeast-1.compute.internal   <none>           <none>



5

Pod 이름만 변경해서 몇개더 생성해 확인 해보자 !!

pod  3개 더 생성

cat labels-node.yaml | sed "s/name: myweb/name: myweb2/g" | kubectl apply -f -

cat labels-node.yaml | sed "s/name: myweb/name: myweb3/g" | kubectl apply -f -

cat labels-node.yaml | sed "s/name: myweb/name: myweb4/g" | kubectl apply -f -



6

pod 배포 node 확인 

kubectl get pod -o wide




7

파드 삭제

kubectl delete pod --all




<3>  정리


1

Pod에 라벨 설정 가능

해당 라벨 지정된 Pod 만 선택해 삭제가 가능하다.


2

wokrer node1에 라벨 추가 설정함. gpu: ndivia

Pod생성시 nodeSelector 로 라벨을 지정하여  해당 node1에 Pod가 생성 되도록 지정 가능하다!   

  nodeSelector:

    gpu: ndivia




<4> 다음 과정


https://brunch.co.kr/@topasvga/1671




감사합니다.


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari