У нас есть развертывание Kubernetes в Google Cloud Platform. Недавно мы столкнулись с одной из известных проблем, связанных с проблемой с kube-dns, которая возникает при большом количестве запросов https://github.com/kubernetes/kubernetes/issues/56903 (она больше связана с SNAT / DNAT и контрактом, но окончательный результат не работаетkube-dns).
После нескольких дней поисков по этой теме мы обнаружили, что у k8s уже есть решение, которое в настоящее время находится в альфа-версии (https://kubernetes.io/docs/tasks/administer-cluster/nodelocaldns/)
. Решение заключается в создании кэширования. CoreDNS как набор демонов на каждом узле k8s пока хорош.
Проблема в том, что после создания набора демонов вы должны указать kubelet использовать его с параметром --cluster-dns, и мы не можем найти какой-либо способсделать это в среде GKE. Google загружает кластер с помощью скрипта «configure-sh» в метаданных экземпляра. Существует возможность редактировать шаблон экземпляра и «жестко кодировать» требуемые значения, но это не вариант, если вы обновляете кластер или используетегоризонтальное автоматическое масштабирование всех измененных значений будет потеряно. Последняя идея заключалась в том, чтобы использовать собственный сценарий запуска, который извлекаетнастройте и обновите сервер метаданных, но это слишком сложная задача.