본문 바로가기
INFRA/DevOps

[K8S] NodeSelector

by BTC_민물공원 2023. 8. 29.

베하~! BTC_녹차공원 팀의 민물공원 입니다.

이번주는 NodeSelector에 대해 알아보겠습니다!

 

NodeSelector


쿠버네티스에서는 특정한 노드(들) 집합에서만 동작하거나 특정한 노드 집합에서 동작하도록 파드를 제한할 수 있어요. 이를 수행하는 방법에는 여러 가지가 있는데 권장되는 방식은 모두 레이블 셀렉터를 사용해서 선택을 편리하게 해요. 보통은 스케줄러가 자동으로 배치를 효율적으로 하기때문에 이런 제약 조건을 설정할 필요가 없어요. 하지만, 예를 들어 SSD가 장착된 머신에 파드가 배포되도록 하거나 많은 통신을 하는 두 개의 서로 다른 서비스의 파드를 동일한 가용석 영역에 배치하는 경우와 같이, 다양한 상황에서 파드가 어느 노드에 배포될지를 제어해야 하는 경우가 있어요.

 

nodeSelector는 노드 선택 제약사항 중 가장 간단하면서도 추천하는 방식이예요. 파드 스펙에 nodeSelector 필드를 추가하고, 타겟으로 삼고 싶은 노드가 갖고 있는 노드 레이블을 작성해요. 이렇게 되면 쿠버네티스는 사용자가 명시한 레이블을 갖고 있는 노드에만 파드를 스케줄링한답니다.

 

 

NodeSelector 실습


이번 실습도 Killercoda 에서 따라해보아요.

https://killercoda.com/

 

Killercoda Interactive Environments

Learn DevOps Linux Kubernetes CKS CKA CKAD Git Cassandra etc | Katacoda compatible

killercoda.com

 

nginx 파드를 disk=ssd 의 레이블을 가진 노드에 배치해볼거예요.

kubectl get nodes

kubectl get nodes -l disk=ssd

 

node01에 disk=ssd 레이블을 추가한 후 확인합니다.

kubectl label nodes node01 disk=ssd

kubectl get nodes -l disk=ssd

 

nginx 파드의 yaml을 작성 후 nodeSelector를 이용해 disk=ssd 의 제약사항을 추가합니다.

kubectl run nginx --image=nginx --dry-run=client -o yaml > nginx.yaml

vi nginx.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
spec:
  containers:
  - image: nginx
    name: nginx
    resources: {}
  nodeSelector:
    disk: ssd
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

 

nginx 파드를 생성한 후 disk=ssd 의 레이블을 가진 node01에 생성이 되었는지 확인합니다.

kubectl create -f nginx.yaml

kubectl get pods -o wide

 

disk=ssd 의 레이블을 가진 노드에 파드가 제대로 배치 되었음을 확인했어요!

 

이렇게 오늘은 nodeSelector 에 대해 알아보았는데요.

다음번에는 더 흥미로운 주제로 찾아뵙겠습니다.

 

이상 BTC_녹차공원 팀이였습니다!

베빠~!

'INFRA > DevOps' 카테고리의 다른 글

Git Branch의 개념과 활용  (0) 2023.09.01
[DevOps]EC2 Ubuntu에 Jenkins 설치  (0) 2023.08.30
[K8S] Ingress  (0) 2023.08.19
[DevOps] CI/CD 개념 및 도구 설명  (0) 2023.08.18
[K8S] Service  (0) 2023.08.01

댓글