k8s nodeSelector와 node label 설정하기

2024. 5. 28. 09:04Server/Ubuntu

k8s에서 pod를 deployment할 때 특정 노드를 지정해서 내가 원하는 pod를 설치할 수가 있다.

(나같은 경우에는 특정 노드를 선택해 해당 노드에는 redis pod만 띄우도록 설정해 놓고 있다.)

 

일단 특정 노드를 선택하기 위해서는 해당 노드에 label을 지정해 주어야 한다.

우선 아래의 명령어를 통해 내가 가진 node들이 현재 어떤 label이 지정되어 있는지를 확인할 수 있다.

 

$> kubectl get nodes --show-labels

 

label 확인이 완료되었으면 특정 노드에 label을 명시하는 것도 가능하다.

 

$> kubectl label node [node 이름] name=redis

 

나같은 경우에는 특정 node에 name을 redis로 지정해 주었다.

이렇게 지정된 label은 deployment.yaml의 nodeSelector를 통해 사용이 가능하다.

 

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-deployment
  namespace: default
spec:
  selector:
    matchLabels:
      app: redis-app
  replicas: 1
  template:
    metadata:
      labels:
        app: redis-app
    spec:
      containers:
        - name: redis
          image: redis:latest
          imagePullPolicy: Always
          resources:
            requests:
              cpu: 7500m
              memory: 7024Mi
            limits:
              cpu: 7500m
              memory: 7024Mi
          ports:
          - containerPort: 6379
      nodeSelector: {
        name: redis
      }

 

위의 명세와 같이 배포를 하면 node의 name이 redis인 것만 찾아서 배포가 진행된다.