Scheduling - 1

han·2022년 3월 7일
0

NodeName

  • 가장 간단한 형태의 노트 선택 제약 조건
  • Node가 추가되고 삭제되면서 Node 이름이 계속 변경될 수 있으므로 일반적으로는 사용하지 않는다
  • 만약 명명된 노드가 없으면, 파드가 실행되지 않고 따라서 자동으로 삭제될 수 있다.
  • 만약 명명된 노드에 파드를 수용할 수 있는 리소스가 없는 경우 파드가 실패한다.

예시

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
  nodeName: kube-01

NodeSelector

  • 가장 간단하고 권장되는 노드 선택 제약 조건의 형태
  • nodeSelector 는 PodSpec의 필드
  • 키-값 쌍의 매핑으로 지정(정확히 일치해야 한다)

예시

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  nodeSelector:
    disktype: ssd

node의 label에는 disktype=ssd 라는값이 있어야 한다.

NodeAffinity

  • nodeSelector와는 달리 파드에 키만 설정해두어도 그중 자원이 많은 노드에 할당
  • matchExpressions: key, value 셋팅
  • operator: In, NotIn, Exists, DoesNotExist, Gt, Lt.
    • Gt, Lt: value에 대해서 값이 크거나 작은 노드
  • requiredDuringSchedulingIgnoredDuringExecution: 파드가 스케쥴링 되기 위해 반드시 만족해야함
  • preferredDuringSchedulingIgnoredDuringExecution: 선호할 뿐이므로 만족하지 않아도 파드가 할당됨
    • weight: preferred 속성의 필수값. 선호하는 노드중에서도 어디를 더 선호하는지에 대한 가중치

예시

apiVersion: v1
kind: Pod
metadata:
  name: with-node-affinity
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: kubernetes.io/e2e-az-name
            operator: In
            values:
            - e2e-az1
            - e2e-az2
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        preference:
          matchExpressions:
          - key: another-node-label-key
            operator: In
            values:
            - another-node-label-value
  containers:
  - name: with-node-affinity
    image: k8s.gcr.io/pause:2.0

reference

https://kubernetes.io/ko/docs/concepts/scheduling-eviction/assign-pod-node/#%EC%96%B4%ED%94%BC%EB%8B%88%ED%8B%B0-affinity-%EC%99%80-%EC%95%88%ED%8B%B0-%EC%96%B4%ED%94%BC%EB%8B%88%ED%8B%B0-anti-affinity

0개의 댓글

관련 채용 정보