DevOps

Kubernetes - Taints Tolerations, Node Affinity 예시

Vince_rf 2024. 10. 29. 01:02

1. Node Affinity

Node Affinity는 파드가 특정 라벨이 있는 노드에 스케줄링되도록 요구하거나 선호하도록 설정할 수 있습니다.

  • 필수 설정: 특정 조건이 충족되지 않으면 파드가 해당 노드에 배치되지 않습니다.
  • yaml
     
    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: "node-type"
                    operator: In
                    values: ["high-performance"]
  • 선호 설정: 조건이 충족되는 노드를 선호하되, 필수는 아닙니다.
  • yaml
     
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 1
          preference:
            matchExpressions:
              - key: "zone"
                operator: In
                values: ["us-west-1", "us-west-2"]

2. Taint Toleration

노드에 Taint를 설정하고 파드가 이를 Toleration(허용)할 수 있도록 설정하여, 특정 파드만 해당 노드에 배치할 수 있게 합니다.

  • Taint 설정 (노드에 적용)예를 들어, key=value Taint를 NoSchedule로 설정하면, 이를 허용하는 Toleration이 없는 파드는 해당 노드에 스케줄링되지 않습니다.
    kubectl taint nodes <node-name> key=value:NoSchedule
  • yaml
  • apiVersion: v1
    kind: Node
    metadata:
      name: my-node
    spec:
      taints:
        - key: "key1"
          value: "value1"
          effect: "NoSchedule"
        - key: "key2"
          value: "value2"
          effect: "NoExecute"
  • Toleration 설정 (파드에 적용)이 Toleration을 설정한 파드는 key=value:NoSchedule Taint가 있는 노드에 스케줄링될 수 있습니다.
  • yaml
     
apiVersion: v1
kind: Pod
metadata:
  name: toleration-pod
spec:
  tolerations:
    - key: "key"
      operator: "Equal"
      value: "value"
      effect: "NoSchedule"