인프라/시스템 구축

[ EKS ] taint, toleration 설정

김붕어87 2023. 4. 3. 13:32
반응형
개요
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