Назад | Перейти на главную страницу

Планирование kube-dns на зараженных узлах в GCP

У меня есть кластер 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 в кластере должен:

  • Настроив kube-dns-autoscaler ConfigMap


    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