У меня есть кластер GKE с двумя пулами узлов. Один из них - это пулы испорченных узлов для использования конкретными модулями.
После добавления пула испорченных узлов я понял, что Kubernetes пытался запланировать pod kube-dns на узлах пула, но не смог.
Насколько я понял, на всех узлах должен быть развернут kube-dns, если я хочу, чтобы разрешение DNS работало. Может, это неверное предположение?
Поскольку kube-dns (и другие вещи в kube-system) управляются GKE, а не мной, я понятия не имею, как:
В настоящее время вы используете 1.1.5.12.-gke, вы должны были развернуть как минимум:
kube-dns
развертываниеkube-dns-autoscaler
развертываниеСогласно документам kube-dns-autoscaler:
kube-dns масштабируется для обслуживания требований DNS кластера. Это масштабирование контролируется kube-dns-autoscaler который по умолчанию развернут во всех кластерах GKE. kube-dns-autoscaler регулирует количество реплик в развертывании kube-dns в зависимости от количества узлов и ядер в кластере.
Предпочтительный способ настройки kube-dns в кластере должен:
linear: '{"coresPerReplica":256,"min":1,"nodesPerReplica":16, "preventSinglePointFailure": true}'
где:
"preventSinglePointFailure": true controller ensures at least 2 replicas if there are more than one node.
Используя эти параметры для текущих реплик, он будет рассчитан как:
replicas = max( ceil( cores × 1/coresPerReplica ) , ceil( nodes × 1/nodesPerReplica ) )
kubectl scale --replicas=0 deployment/kube-dns-autoscaler --namespace=kube-system
kubectl scale --replicas=1 deployment/kube-dns --namespace=kube-system
В настоящее время проблема, с которой вы столкнулись, возникает по умолчанию kube-dns
конфигурация развертывания:
toleration:
- key: CriticalAddonsOnly
operator: Exists
- key: components.gke.io/gke-managed-components
operator: Exists
Эта конфигурация предотвращает возможность планировать поды на узлах с вашими пользовательскими загрязнениями.
Я бы посоветовал проверить - почему ваши поды не могут быть запланированы в кластере в пуле по умолчанию (вероятно, из-за нехватки ресурсов в пуле по умолчанию), и я бы подумал об изменении размера этого пула по умолчанию.
Другое решение - развернуть пользовательский kube-dns or core-dns
конфигурация.
Кстати kube-dns
живет в kube-system
пространство имен. Сделайте так, чтобы ваши узлы были доступны для планирования подов в этом пространстве имен, потому что это необходимо для нормальной работы вашего кластера.
Очевидно, настраиваемые допуски не поддерживаются в некоторых системных модулях, таких как kube-dns, heapster, kube-dns-autoscaler. Поскольку они управляются GKE, GKE периодически повторно утверждает модули, отклоняя любые изменения, сделанные кем-либо еще.
Эта проблема все еще открыта и отслеживается здесь https://github.com/kubernetes/kubernetes/issues/57659