[쿠버네티스] 특정 노드에 파드 배포하기

김재영·2023년 11월 12일
0
post-thumbnail

label selector 이용하여 특정 노드에 파드 배포하기

2가지 설정이 필요함

  1. 노드라벨링

    kubectl label nodes <node-name> <label-key>=<label-value>
    
  2. pod 의 spec에 nodeSelector 설정

    apiVersion: v1
    kind: Pod
    metadata:
      name: node-selector-pod
    spec:
      containers:
      - name: my-container
        image: nginx
      nodeSelector:
        size: large

위와같은 방법으로 특정 노드(size=large)에 파드를 배포할 수 있다.

e.g)
1. node-name 이 node01 인 노드에 라벨링 하기 (size=large)

kubectl label nodes node01 size=large

2.노드에 라벨이 설정되었는지 확인
아래 명령어 입력시 labels 필드에 size=large 로 위에서 입력한 값이 등록된 것을 알 수 있음.

kubectl describe nodes/node01


3. 파드 배포 (spec 에 nodeSelector 설정)

  • yaml 파일 생성하기

    vi node-selector-pod.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: node-selector-pod
    spec:
      containers:
      - name: my-container
        image: nginx
      nodeSelector:
        size: large
  • Yaml 로 파드 배포

    kubectl apply -f node-selector-pod.yaml

4.라벨링한 노드(10-21-110-117)에 배포되었는지 체크

node-selector-pod 가 size=large 로 라벨링된 10-21-110-117 노드에배포 되었음을 확인 할 수 있다.

label selector 의 한계

하나이상의 node 를 선택할 수 없음.

e.g)

아래 그림과 같이 size=large or size=medium 인 node 에 배포하고자 한다면 nodeSelector로는 한계가 있다.(라벨 중복 선택 불가능)

이때는 NodeAffinity 를 사용한다

apiVersion: v1
kind: Pod
metadata:
  name: node-affinity-pod
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: size
            operator: In
            values:
            - medium
            - large

NodeAffinity 를 사용하면 위와같이 medium 과 large 인 노드에 배포가능

0개의 댓글