728x90
Manual Scheduling
- 파드가 Pending 상태인데, 별다른 이유 없이 Node: <none>이라면 kube-system namespace의 파드 목록을 조회해서 스케쥴러가 존재하는지 확인해보기(No scheduler presents.)
- 파드 생성시 spec.nodeName 필드를 정의해 직접 스케쥴링해줄 수 있다.
- 이미 실행중인 파드는 다른 노드로 이동시킬 수 없다. (.yaml 파일을 replace —force할 것)
Taints & Tolerations
노드에 특정 파드가 수용되지 않게 함(특정 taint 대한 toleration을 가진 파드는 해당 노드가 아닌 다른 taint가 없는 모든 노드에 수용될 수 있음)
- master node에는 자동으로 taint가 존재해서 별도의 파드가 스케쥴링되는 것을 막는다. 이를 해제할 수는 있으나 이대로 두는 것이 가장 좋음
- 위 커맨드의 결과: Taints: node-role.kubenetes.io/master:NoSchedule
- kubectl describe node kubemaster | grep Taint
Taints
노드에 스케쥴링되지 않도록 함
kubectl taint node [node-name] [key]=[value]:[effect]
- effect
- 종류
- NoSchedule: 기존에 해당 노드에 있는 파드들은 허용하지만, 새로운 파드들에 대해서는 해당 테인트를 용인하지 않는 이상 해당 노드에 스케쥴링될 수 없음
- NoExecute: 기존에 있던 파드들도 모두 방출되며, 새로운 파드도 해당 노드에 스케쥴링될 수 없음
- PreferNoSchedule: 해당 노드에 대한 스케쥴링을 선호하지 않음(기존에 있던 파드 허용. 새로운 파드에 대해서는 해당 노드 밖에 스케쥴링될 수 있는 곳이 없다면 허용)
- 종류
- 제거 시 Taint명 뒤에 - 를 붙일 수 있다.
- # ex) controlplane(마스터 노드)에 스케쥴링되지 않게끔 하는 테인트를 제거 kubectl taint node controlplane node.kubernetes.io/contol-plane:NoSchedule-
Tolerations
파드가 노드의 테인트(taint)를 용인할 수 있게 함
apiVersion: v1
kind: Pod
metadata:
name: [pod-name]
spec:
containers:
- name: [container-name]
image: [image-name]
tolerations:
key: [key]
operator: ["Equal" or "Exists"]
value: [value]
effect: [effect]
- key, value: 점(.), 하이픈(-), 언더스코어(_) 허용
- spec.tolerations의 하위 필드는 모두 더블 쿼텐션(“)으로 감싸져야 함
- spec.tolerations.operator:
반응형
'Kubernetes' 카테고리의 다른 글
k8s) Scheduling - 3. Requirements & Limits (1) | 2023.11.17 |
---|---|
k8s) Scheduling - 2. Node Selector & Node Affinity (1) | 2023.11.17 |
k8s) 명령형(Imperative) vs 선언형(Declarative) 관리 (1) | 2023.11.17 |
K8s) Kubernetes objects (0) | 2023.11.17 |
구성된 쿠버네티스 환경에 외부에서 접근하기 (0) | 2023.07.25 |