버전 비교

  • 이 줄이 추가되었습니다.
  • 이 줄이 삭제되었습니다.
  • 서식이 변경되었습니다.

...

코드 블럭
kubectl get nodes --show-labels

(3) 특정 노드에 파드 위치하도록 설정

7/00-nodeselector.yaml

코드 블럭
apiVersion: v1
kind: Pod
metadata:
  name: ssd-pod
spec:
  containers:
  - name: mycontainer
    image: nginx
  nodeSelector:
    service: web

...

  • 파드가 특정 조건을 만족하는 노드에 스케줄링되도록 하는 기능이며, 크게 두 가지 유형으로 나눌 수 있습니다.

    • requiredDuringSchedulingIgnoredDuringExecution

      • 파드가 반드시 조건을 만족하는 노드에만 스케줄링됩니다.

      • 조건을 만족하는 노드가 없으면 파드는 스케줄링되지 않습니다.

    • preferredDuringSchedulingIgnoredDuringExecution

      • 조건을 만족하는 노드가 있다면 우선적으로 해당 노드에 스케줄링됩니다.

      • 조건을 만족하는 노드가 없으면 다른 노드에 스케줄링 될 수 있습니다.

7/01-node-affinity.yaml

코드 블럭
apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: disktype
            operator: In
            values:
            - ssd
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        preference:
          matchExpressions:
          - key: region
            operator: In
            values:
            - east
  containers:
  - name: mycontainer
    image: nginx

...

  • 다른 파드와 겹치지 않게 할 때 사용합니다.

  • 파드가 특정 노드에 스케줄링되지 않도록 설정하는 방법으로 크게 두 가지 유형이 있습니다.

    • requiredDuringSchedulingIgnoredDuringExecution

      • 파드가 반드시 조건을 만족하지 않는 노드에만 스케줄링됩니다.

    • preferredDuringSchedulingIgnoredDuringExecution

      • 조건을 만족하지 않는 노드에 우선적으로 스케줄링되지만, 필요하다면 다른 노드에 스케줄링될 수 있습니다.

7/02-node-anti-affinity.yaml

코드 블럭
apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values:
            - myapp
        topologyKey: "kubernetes.io/hostname"
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: app
              operator: In
              values:
              - otherapp
          topologyKey: "kubernetes.io/hostname"
  containers:
  - name: mycontainer
    image: nginx

...

  • 특정 파드가 다른 파드와 같은 노드 또는 다른 노드에 배치되도록 합니다.

7/03-pod-affinity.yaml

코드 블럭
apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  affinity:
    podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchLabels:
            app: frontend
        topologyKey: kubernetes.io/hostname
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        podAffinityTerm:
          labelSelector:
            matchLabels:
              app: backend
          topologyKey: kubernetes.io/hostname
containers:
- name: mycontainer
  image: nginx

...

  • Tolerations는 파드에 설정되며, 특정 Taint를 가진 노드에 스케줄링될 수 있도록 허용합니다.

7/04-pod-toleration.yaml

코드 블럭
apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  tolerations:
  - key: "disktype"
    operator: "Equal"
    value: "ssd"
    effect: "NoSchedule"
  containers:
  - name: mycontainer
    image: nginx

...