...
코드 블럭 |
---|
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 |
...