클러스터에 포드 분산
현재 AWS의 자동 확장 정책을 사용하여 매일 고정 된 시간에 EKS 작업자 노드 (최소 + 원하는 10, 최대 15)를 시작합니다. 120 개의 포드와 30 개의 배포가 있습니다.
당연히 하나의 노드 만 먼저 작동합니다. 그런 다음 두 번째 노드. 그 후 마지막 노드가 작동합니다. 이러한 이유로 Kubernetes는 첫 번째 노드에 모든 포드를 추가합니다. 시나리오에서 포드가 균등하게 배포 될 수있는 방법이 있습니까?
답변
Descheduler를 살펴 보십시오 . 이 프로젝트는 클러스터가 불균형이라고 생각 될 때 포드를 죽이는 것을 목표로하는 Kubernetes 작업으로 실행됩니다.
LowNodeUtilization전략은 귀하의 케이스에 맞는 것 같다 :
이 전략은 활용도가 낮은 노드를 찾고 가능한 경우 다른 노드에서 포드를 제거합니다.이 전략은 이러한 활용도가 낮은 노드에서 제거 된 포드의 재생이 예약되기를 희망합니다.
또 다른 옵션은 약간의 혼돈 엔지니어링을 수동으로 적용하여 배포에 롤링 업데이트를 강제하는 것입니다. 바라건대 스케줄러는 포드가 다시 생성 될 때 균형 문제를 해결합니다.
당신은을 사용할 수 있습니다 kubectl rollout restart my-deployment
. kubectl delete pod
롤아웃은 "재조정"중에 가용성을 보장하기 때문에 단순히를 사용하여 팟 (Pod)을 삭제하는 것보다 낫습니다 (팟을 모두 삭제하면 재조정 가능성이 높아집니다).
어떤 pod가 어떤 노드로 이동하는지 제어 할 수 있으므로 선호도와 반 친화도를 조사해야합니다. 반친 화성을 사용하면 노드에 각 배포의 포드가 1 개만 있도록 할 수 있습니다. 이것은 약간 과잉이며 IIRC를 통해 정확히 작동하지 않을 것입니다. 노드에 제한이있는 여러 포드를 가질 수 있습니다.
https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes-using-node-affinity/