CoreDNS를 사용하며 겪은 문제들과 이를 해결하기 위한 Actions
Trouble
-
급변하는 트래픽 환경에서 CoreDNS의 부하 발생으로 인해 네트워크 문제 및 Latancy 급증하는 문제 발생하여 HPA에 의해 파드가 증가하면서 데이터베이스 커넥션 급증 등 전체 서비스에 영향이 전파됨
-
요청이 발생하면 동작하는 Task성 파드들이 유연함을 가진 노드형태를 띄고 있어서 적은 CoreDNS의 개수가 이를 커버하지 못해 간헐적으로 네트워크가 끊겨 파드가 정상 동작하지 못하는 문제
Actions?
CoreDNS가 처리할 수 있는 용량
Pods당 요구되는 리소스양이 존재하여 CoreDNS가 감당할 수 있는 수준에 따라 Avg Latency, QPS(Query per seconds)가 차이날 수 있음
이와 관련해 고가용성과 리소스 활용도가 중요한 경우 CoreDNS 구성을 조정하는 것이 유용할 수 있음
- CPA(Cluster Propotional Autoscaler)
- 클러스터의 전체 크기를 고려하여 CPA를 설정
- 사용중인 인스턴스 타입을 파악하고 가장 적절한 nodesPerReplica와 coresPerReplica를 설정
- 지속적인 모니터링을 통해 replica의 min, max 수치를 조정하고 perReplica를 최적화
- Advanced Configuration - TopologySpreadConstraints
- 토폴로지 확산 제약 조건을 사용하여 가용성 영역, 노드 및 기타 사용자 정의 토폴로지 도메인과 같은 장애 도메인 사이에서 Amazon EKS 클러스터 전체에 Pod가 분산되는 방식을 제어
- 이는 고가용성과 효율적인 리소스 활용을 달성하는 데 도움이 될 수 있음
- 또한 토폴로지 조건을 설정하여 Karpenter의 Scale에 영향을 끼치지 않도록 함
- 이 설정을 통해 Consolidation, Drift 등 CoreDNS의 영향 없이 Deprovisioning 과정을 수행할 수 있음
- Alert Conditions
- CoreDNS Error Rate, Panics, Request Duration, Request Rate의 Thresholds를 설정하여 즉각 대응 가능한 구조를 구성
- NewRelic 사용 시 Prometheus Agent를 설정하여 kube-dns를 integration하고 Agent 상태 대시보드를 구성