이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

Kubernetes/Scheduler

Kubernetes Scheduler (nodeSelector)

이쿠우우 2020. 10. 11. 10:08
반응형

 

Kubernetes nodeSelector

 


[Kubernetes Scheduler 관련 글 목록]

Kubernetes Scheduler (Pod를 원하는 Worker Node에 배포하기)

Kubernetes Scheduler (nodeSelector)

Kubernetes Scheduler (Taint & Toleration)

Kubernetes Scheduler (Affinity)


 

 

Kube-Scheduler의 다양한 기능을 사용해서 관리자가 직접

특정 Worker Node에 Pod 가 생성되도록 설정할 수 도 있음

대표적으로

nodeSelector

Taint & Toleration

Affinity

3가지 방법이 있는데 

 

이 글에서는 nodeSelector에 대해서 알아보겠음.

 

 


 

[환경]

 

Master Node server

 OS = CentOS 7

 리눅스 커널 버전 : Linux 3.10.0-1062.el7.x86_64

 docker version : 1.13.1

 api verison : 1.26

 

Worker Node server 1

 OS = CentOS 7

 리눅스 커널 버전 : Linux 3.10.0-1062.el7.x86_64

 docker version : 1.13.1

 api verison : 1.26

 

Worker Node server 2

 OS = CentOS 7

 리눅스 커널 버전 : Linux 3.10.0-1062.el7.x86_64

 docker version : 1.13.1

 api verison : 1.26

 

 

Kubernetes version

 1.18

 

 

 


 

 

 

nodeSelector란?

 

nodeSelector로 Key/Value Label 지정한 후

해당 Label을 가지고 있는 Worker Node에 Pod를 생성하는 방법으로

Pod 가 생성될 Worker Node 를 지정하는 방법 중 가장 간단한 방법.

 

 

 

 


 

 

nodeSelector 실습

 

 

1. Worker Node 의 Label 확인 

 

Kubernetes Cluster를 구성하고 있는 모든 Node에 미리 추가되어있는

Default Label 을 확인.

 

[명령어]

kubectl get nodes --show-labels

 

[확인 결과]

각 Node 의 CPU 종류, OS 종류, host name 이 Label로 설정되어있고

MasterNode는 추가로 

"node-role.kubernetes.io/master="

Labels이 있어서 Worker Node 와 구분되어 있음.

 

Node Selector의 경우에 이러한 기존의 Labels를 지정해서 사용할 수 있지만

리서치에서는 Labels 을 직접 추가해서

추가한 Label을 인식해서 Pod를 생성해보겠음.

 

 

2. Worker Node 의 Label 추가

 

Worker Node one 에 

testkey / iksoonvalue 

Label 를 추가.

 

[명령어]

kubectl label nodes [Node name] [key]=[value]

예) kubectl label nodes kube.workerone.node testkey=iksoonvalue

 

 

 

3. nodeSelector를 사용해서 특정 Worker Node에 Pod 배포

 

[예제 deployment.yaml ]

apiVersion: apps/v1
kind: Deployment
metadata:
  name: iksoon-deployment-test
  labels:
    app: iksoon-test
spec:
  replicas: 2
  selector:
    matchLabels:
      app: iksoon-pod
  template:
    metadata:
      labels:
        app: iksoon-pod
    spec:
      containers:
      - name: iksoon-tomcat
        image: peksoon/iksoon_tomcat:1.0.6
        ports:
        - containerPort: 8080
      nodeSelector:  # nodeSelector를 사용하고 key/value를 명시함
        testkey: iksoonvalue

 

 

[결과]

deployment를 생성하면

nodeSelector 에 명시된 Worker Node one에 

Pod가 생성되어있는것을 확인할 수 있음

 

 

4. Worker Node 의 Label 삭제

 

 

[명령어]

kubectl label nodes [Node name] [key]-

예) kubectl label nodes kube.workerone.node testkey-

 

[결과]

worker node one 에

기존에 있던 생성했던

testkey=iksoonvalue 

Label 이 없는것을 확인할 수 있음

 

 

 

 


 

 

 

 

참고

https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/

https://waspro.tistory.com/582

 

 

 

반응형