쿠버네티스 - Affinity

Moon Blue의 IT 로그 📝·2023년 12월 12일
0

Affinity 는 파드가 어떤 노드에 스케줄링되어야 하는지 또는 특정 노드에 스케줄링되지 않아야 하는지를 지정하는 메커니즘입니다. 어피니티는 파드와 노드 간의 관계를 정의하여 파드를 특정 노드에 더 자주 또는 덜 자주 스케줄링할 수 있게 해줍니다.

📌 Node Affinity

  • 특정 노드에 파드를 스케줄링하거나 스케줄링하지 않기 위한 규칙을 정의합니다. 노드 어피니티는 세부적으로 requiredDuringSchedulingIgnoredDuringExecution과 preferredDuringSchedulingIgnoredDuringExecution로 나뉩니다.
  • requiredDuringSchedulingIgnoredDuringExecution: 지정된 규칙을 만족하는 노드에만 스케줄링됩니다.
  • preferredDuringSchedulingIgnoredDuringExecution: 지정된 규칙을 가장 잘 만족하는 노드에 스케줄링됩니다.
apiVersion: v1
kind: Pod
metadata:
  name: with-node-affinity
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: topology.kubernetes.io/zone
            operator: In
            values:
            - antarctica-east1
            - antarctica-west1
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        preference:
          matchExpressions:
          - key: another-node-label-key
            operator: In
            values:
            - another-node-label-value
  containers:
  - name: with-node-affinity
    image: registry.k8s.io/pause:2.0

📌 Pod Affinity

  • 특정 파드가 어떤 노드에 스케줄링되어야 하는지 또는 스케줄링되지 않아야 하는지를 정의합니다. 마찬가지로, 파드 어피니티도 requiredDuringSchedulingIgnoredDuringExecution과 preferredDuringSchedulingIgnoredDuringExecution 유형이 있습니다.
  • 어피니티 규칙은 레이블 셀렉터를 사용하여 정의됩니다. 레이블은 노드나 파드에 부여되는 키-값 쌍이며, 어피니티는 이러한 레이블을 기반으로 어떤 노드나 파드에 어떤 파드를 스케줄링할지를 결정합니다.
apiVersion: v1
kind: Pod
metadata:
  name: with-pod-affinity
spec:
  affinity:
    podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: security
            operator: In
            values:
            - S1
        topologyKey: topology.kubernetes.io/zone
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: security
              operator: In
              values:
              - S2
          topologyKey: topology.kubernetes.io/zone
  containers:
  - name: with-pod-affinity
    image: registry.k8s.io/pause:2.0

어피니티를 사용하면 특정 노드에 특정 타입의 워크로드를 할당하거나, 특정 파드가 같은 노드에 스케줄링되도록 할 수 있습니다. 이는 성능 최적화, 데이터 로컬리티, 네트워크 토폴로지 고려 등과 관련된 다양한 시나리오에서 유용합니다.

profile
What a Beautiful World~ 🌏

0개의 댓글