서론
Kubernetes(쿠버네티스)를 설정하다보면 tolerations와 taints라는 것이 보일 것이다.
taints와 tolerations가 무엇이고 설정은 어떻게 하는지 알아보자.
AWS EKS에서 설정하는 법으로 예시를 들어보겠다.
Taints란?
간단하게 말하면 Taints는 노드가 pod를 제외시킬 수 있는 설정이다.
다르게 말하면 특정 노드에 대해 특정 pod만 실행할 수 있도록 역할을 제한하기 위한 목적으로 사용된다.
하나의 노드에 여러 taints를 설정할 수 있다.
예를 들어, Batch를 돌리는 노드에서는 Batch에 관련된 pod만 실행되어야한다. 그렇다면 해당 Batch 노드에 taints설정을 하여 제한할 수 있다.
Tolerations란?
Tolerations는 pod에 적용되는 설정이다. tolerations를 통해 스케쥴러는 그와 일치하는 테인트가 있는 파드만 실행한다.
여기서 taints와 tolerations는 함께 작동하여 pod가 부적절한 노드에 스케쥴되지 않게한다.
하나의 pod에 여러 tolerations를 설정할 수 있다.
예를 들어, AWS Batch를 모니터링하기 위하여 cloudwatch나 fluent-bit을 설치한다면 해당 Demonset에 아래와 같이 배치노드에 스케쥴될 수 있도록 설정한다.
tolerations:
- key: "batch.amazonaws.com/batch-node"
operator: "Exists"
Taints 설정하기
AWS EKS에서 Taints는 노드 그룹 별로 설정할 수 있는데
여러 방법으로 설정이 가능하다.
- yaml파일로 적용 예시
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: eks-taint-demo
region: us-west-1
# Unmanaged nodegroups with and without taints.
nodeGroups:
- name: ng1
instanceType: m5.xlarge
minSize: 2
maxSize: 3
taints:
- key: classified_workload
value: "true"
effect: NoSchedule
- key: machine_learning_workload
value: "true"
effect: NoSchedule
- name: ng2
instanceType: m5.xlarge
minSize: 2
maxSize: 3
- 기존 노드그룹에 taints 업데이트
https://docs.aws.amazon.com/cli/latest/reference/eks/update-nodegroup-config.html
이 외에도 kubectl이나 aws 콘솔 창에서도 수정이 가능하다.
NoSchedule | toleration이 없으면 pod 스케쥴 X | 기존에 실행되던 pod 적용 X |
PreferNoSchedule | 특정 상황에 따라서 pod가 스케쥴 될 수 있다. | 기존에 실행되던 pod 적용 X |
NoExecute | toleration이 없으면 pod 스케쥴 X | 기존에 실행되던 pod 적용 O (toleration이 없으면 실행중인 pod도 종료) |
Tolerations 설정하기
아래는 Tolerations를 설정하는 Deployment.yaml의 예시이다.
operator에는 Equal과 Exists가 있는데 Equal은 key와 value, effect가 모두 일치하는지 확인하고 Exists는 key만 체크한다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: microservice-deployment
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: java-microservice
template:
metadata:
labels:
app.kubernetes.io/name: java-microservice
spec:
tolerations:
- key: "<Taint key1>"
operator: Equal
value: "<Taint value>"
effect: "NoSchedule"
- key: "<Taint key2>"
operator: Exists
effect: "NoSchedule"
- key: "<Taint key3>"
operator: Exists
containers:
- name: java-microservice-container
image: <account_number>.dkr.ecr<region>.amazonaws.com/<repository_name>:latest
ports:
- containerPort: 4567
'AWS' 카테고리의 다른 글
AWS Batch - EventBridge를 이용한 상태 변경 처리 하기 (0) | 2024.06.17 |
---|---|
AWS EKS NodeSelector 설정하기 (0) | 2024.02.19 |
AWS Batch와 EKS(k8s)를 사용하여 배치를 돌려보자 (0) | 2024.01.29 |
[AWS] SageMaker AutoScaling 자동화 (0) | 2023.08.07 |
[AWS] S3 이벤트 알림 (트리거) 설정 (0) | 2023.07.20 |