반응형
Kubernetes의 Taint와 Toleration은 클러스터의 Node에 특정 제약 조건을 추가하여 Pod가 실행될 수 있는 Node를 제한하는 메커니즘입니다. 이를 통해 특정 Node에서 실행될 수 있는 Pod를 제어하거나, 중요하거나 특별한 Node를 보호하는 데 사용됩니다.
1. Taint란?
- Taint는 Node에 설정되는 속성으로, 해당 Node에서 특정 Pod가 실행되지 못하도록 "오염"시키는 역할을 합니다.
- Pod가 Taint를 허용하지 않으면 그 Node에 스케줄링되지 않습니다.
- Taint는 다음과 같은 형식으로 구성됩니다:
<key>=<value>:<effect>
- key: 식별자 역할을 하는 이름.
- value: Taint에 추가적인 정보를 제공.
- effect: Taint가 작동하는 방식.
- NoSchedule: 해당 Node에 스케줄링을 금지.
- PreferNoSchedule: 해당 Node에 스케줄링을 피하려고 시도.
- NoExecute: 기존 Pod를 해당 Node에서 제거.
Taint 추가 예제
kubectl taint nodes <노드이름> key=value:NoSchedule
예: 특정 Node에 key=value Taint를 추가하여 해당 Node에 스케줄링되지 않도록 설정.
kubectl taint nodes node1 special-purpose=true:NoSchedule
2. Toleration이란?
- Toleration은 Pod에 설정되며, 특정 Taint를 "무시"하고 해당 Node에 스케줄링될 수 있도록 허용합니다.
- Pod가 Node의 Taint를 Tolerate하면 해당 Node에서 실행될 수 있습니다.
Toleration 구성
Toleration은 다음과 같은 형식으로 설정됩니다:
tolerations:
- key: "special-purpose"
operator: "Equal"
value: "true"
effect: "NoSchedule"
- key: Taint의 키와 일치해야 함.
- operator: 비교 방식 (Equal 또는 Exists).
- value: Taint의 값과 일치해야 함 (operator가 Equal인 경우).
- effect: Node Taint와 일치하는 효과 (NoSchedule, PreferNoSchedule, NoExecute).
3. Taint와 Toleration의 관계
- Taint는 Node에 설정되고, Toleration은 Pod에 설정됩니다.
- 특정 Node에 Taint가 설정되어 있어도, 해당 Taint를 Tolerate하는 Pod는 스케줄링될 수 있습니다.
- Node의 Taint는 기본적으로 모든 Pod를 차단하지만, Toleration을 통해 허용할 수 있습니다.
4. 사용 예제
특정 Node에만 스케줄링 허용
Node에 Taint 추가:
kubectl taint nodes node1 special-purpose=true:NoSchedule
Pod에 Toleration 설정:
apiVersion: v1
kind: Pod
metadata:
name: toleration-pod
spec:
containers:
- name: nginx
image: nginx
tolerations:
- key: "special-purpose"
operator: "Equal"
value: "true"
effect: "NoSchedule"
- 이 설정을 통해 special-purpose=true:NoSchedule Taint가 설정된 Node에서만 Pod가 실행됩니다.
5. Taint와 Toleration의 주요 효과
Effect설명
NoSchedule | Taint를 허용하지 않는 Pod는 해당 Node에 절대 스케줄링되지 않음. |
PreferNoSchedule | 스케줄러가 가능한 한 해당 Node에 스케줄링하지 않으려고 시도함. |
NoExecute | 기존에 실행 중인 Pod도 Taint를 허용하지 않으면 해당 Node에서 제거됨. |
6. Taint와 Toleration의 실제 사용 사례
- 특수 작업용 Node 격리
- 예: GPU가 설치된 Node에서만 특정 워크로드를 실행.
- 설정: GPU Node에 Taint를 설정하고 GPU 워크로드에 Toleration 추가.
- Control Plane 보호
- Control Plane Node에 Taint를 추가해 워크로드 Pod가 실행되지 않도록 설정:
bash코드 복사kubectl taint nodes <control-plane-node> node-role.kubernetes.io/control-plane=:NoSchedule
- Control Plane Node에 Taint를 추가해 워크로드 Pod가 실행되지 않도록 설정:
- 노후화된 Node에서의 Pod 제한
- 성능이 떨어지는 Node에 PreferNoSchedule Taint를 추가하여 스케줄링을 최소화.
7. Pod와 Taint 상호작용 확인
명령어로 확인할 수 있습니다:
- Pod 설명 확인:
kubectl describe pod <pod-name>
- Node에 설정된 Taint 확인:
kubectl describe node <node-name>
Taint와 Toleration은 클러스터 내 리소스를 효율적으로 활용하고 안정적인 운영을 위해 중요한 역할을 합니다. 이를 잘 활용하면 특정 요구 사항에 따라 Node를 유연하게 관리할 수 있습니다.
반응형
댓글