개요
Affinity: 친밀감, 관련성, 친연성, 밀접한 관계 라는뜻의 명사
이 속성을 활용하면 Node나 Pod에 대해 선호하는 Node나 Pod 또는 그 반대의 상황을 구성할 수 있다.
Affinity와 Anti-affinity
Affinity
Affinity는 특정 Pod 들을 같은 위치에 배치하기 위해 사용하는 매커니즘임
서비스의 구성과 특성에 따라 연관성이 높은 위치에 구성하고 싶은 경우에 사용할 수 있음
- 예) Redis cache 옆에 web server를 배치해서 네트워크의 지연을 최소화 하기 위해 동일한 위치에 Pod를 배포해보자
- 예) 로그 수집기를 수집 대상 애플리케이션과 같은 Node에 배치해 지연을 최소화 해보자
Anti-affinity
Anti-affinity는 Affinity 매커니즘과 반대로 서로 떨어트려 배치하기 위한 매커니즘
고가용성, 재해복구, 안정화 등 여러목적을 위해서 Pod를 서로 떨어드려 배치하는데 사용할 수 있음
- 예) 고가용성을 보장하기 위해 애플리케이션을 각기 다른 Node에 분산시켜 배포하자
- 예) 같은 서비스의 Pod를 서로 다른 zone에 분산하여 재해 발생시 다른 한쪽에서 서비스를 유지할 수 있게 배포하자.
Required vs Preferred 의 구분
requiredDuringSchedulingIgnoreDuringExecution
Pod 배치시 선언되어 있는 조건을 완벽하게 만족해야함, 만약 조건에 부합하지 않는 경우 배치하지 않음
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- ssd
- 위와 같은 경우 disktype이 ssd가 아닌 경우 Pod를 배치하지 않음
preferredDuringSchedulingIgnoreDuringExecution
조건을 만족하면 좋지만, 그렇지 않더라도 배치는 함
가중치(weight)를 기반으로 배치되기 때문에 높은 가중치를 만족하는 조건에 배치함
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
preference:
matchExpressions:
- key: disktype
operator: In
values:
- ssd
- disktype이 ssd로 선언되어 있으나, ssd가 존재하지 않는 경우 hdd 환경 등에도 배치가 진행됨
Affinity의 종류
Node Affinity
특정 Node에 Pod를 배치하기 위해 사용
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- ssd
- disktype이 ssd인 Node에만 Pod를 배치하도록 선언함
- required로 선언했기 때문에 만약 ssd가 존재하지 않는 경우 Pending 상태로 유지됨
Pod Affinity
특정 Pod의 옆에 새로운 Pod를 배치함
podAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app: redis
topologyKey: kubernetes.io/hostname
- Redis app에 위치한 Node에만 Pod를 위치시킴
- 만약 Redis app이 없다면?
- 위 구조에서는 preferred 이므로, redis가 없더라도 배치가 진행됨
- 만약 required로 선언된 경우 pending 상태로 유지됨
Pod Anti-Affinity
특정 Pod가 위치한 Node에서 떨어져서 배치
PodAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchLabels:
app: web
topologyKey: kubernetes.io/hostname
- Web app이 위치한 Node가 아닌 다른 Node에 위치하도록 선언
- web이라는 애플리케이션이 A라는 Node에 위치하는 경우 A Node가 아닌 다른 Node에 배치
- preferred로 선언되었고 다른 Node가 없다면?
- web 애플리케이션이 있지만 다른 Node가 없으므로 web이 위치한 Node에 배치함
'Infra > Kubernetes' 카테고리의 다른 글
| Kubernetes) Health check (0) | 2025.12.01 |
|---|