반응형
개요
taint 이란?
taint 설정이 된 node은 POD 배포가 불가능하다.
taint 역할은 cordon 처럼 모든 pod가 배포되지 않게 설정하는 것이 아니라, toleration 옵션을 이용해서 지정한 pod만 배포되도록 설정하는 옵션이다.
ex) backed, front pod만 배포될 수 있도록 설정한다.
NodeSelector 설정하지 않은 pod들이 랜덤한 node에 배포되는 것을 막는 역할이다.
node에 문제가 생기거나, 셧다운 중일 때 해당 node에 배포되지 않도록 EKS가 자동으로 Taint를 설정한다
toleration 이란?
taint 설정이 된 node에 배포 할 수 있도록 도와주는 옵션이다.
[ taint 설정 방법 ]
1. taint 설정
- 기존에 배포된 pod들은 정상적으로 동작한다.
- 새로운 pod를 배포될 경우 배포가 안된다.
# 특정 노드에 taint 설정 명령어
kubectl taint nodes node-name key1=value1:NoSchedule
2. taint 제거
kubectl taint nodes node-name key1=value1:NoSchedule-
3. taint 설정 확인
kubectl describe node node-name
Taints: app=php-apache-toleration:NoSchedule
[ toleration 설정 테스트 ]
- 현재 노드에 taints 설정이 걸려있습니다.
- app=php-apache-toleration
kubectl describe node node-name
Taints: app=php-apache-toleration:NoSchedule
1. pod 배포
- toleration 설정 없이 pod 배포
vi php-apache.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
selector:
matchLabels:
run: php-apache
replicas: 3
template:
metadata:
labels:
run: php-apache
spec:
containers:
- name: php-apache
image: registry.k8s.io/hpa-example
ports:
- containerPort: 80
kubectl apply -f php-apache.yaml -n dw
2. pod 배포 확인
- node에 taint 설정으로 배포될 node가 없어서 Pending 상태로 빠짐
kubectl get pod -n dw
NAME READY STATUS RESTARTS AGE
php-apache1-859d7c6b64-5jsx4 0/1 Pending 0 71s
php-apache1-859d7c6b64-bcs4p 0/1 Pending 0 71s
php-apache1-859d7c6b64-hsk7t 0/1 Pending 0 71s
kubectl describe pod php-apache1-859d7c6b64-hsk7t -n dw
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 18s default-scheduler 0/8 nodes are available: 2 node(s) had taint {app: php-apache-toleration}, that the pod didn't tolerate, 6 node(s) didn't match Pod's node affinity/selector.
3. pod에 toleration 설정
- node에 Taints 설정 내용 : app=php-apache-toleration:NoSchedule
- POD에 Toleration 설정 : key(app), Value(php-apache-toleration)으로 일치해서 배포 가능
vi php-apache.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
selector:
matchLabels:
run: php-apache
replicas: 3
template:
metadata:
labels:
run: php-apache
spec:
containers:
- name: php-apache
image: registry.k8s.io/hpa-example
ports:
- containerPort: 80
tolerations:
- key: app
operator: Equal
value: php-apache-toleration
effect: NoSchedule
kubectl apply -f php-apache.yaml -n dw
4. pod 배포 확인
- node에 taint 설정으로 배포될 node가 없어서 Pending 상태로 빠짐
kubectl get pod -n dw
php-apache2-75b7dfb78f-dx8cw 1/1 Running 0 4m18s
[ Toleration operation 옵션 ]
- operator
- operator를 지정하지 않으면 Equal 설정됨 (default)
- Equal : KEY값과 Value 값을 지정
- Exists : value 값을 지정하면 안됨
반응형
'인프라 > 시스템 구축' 카테고리의 다른 글
[ EKS ] drain, cordon (0) | 2023.04.04 |
---|---|
[ EKS ] NodeSelector 설정 (0) | 2023.04.03 |
[ EKS ] EBS -> EFS 볼륨 변경 (0) | 2023.03.31 |
[ EKS ] EFS - (PV,PVC,POD) 설치 (0) | 2023.03.31 |
[ EKS ] aws-efs-csi-driver (0) | 2023.03.31 |