добавление мастера в кластер Kubernetes: кластер не имеет стабильного адреса controlPlaneEndpoint - PullRequest
2 голосов
/ 26 апреля 2019

Как добавить второго мастера в плоскость управления существующего кластера Kubernetes 1.14? Доступная документация , очевидно, предполагает, что оба мастера (в стековой плоскости управления и узлах etcd) создаются одновременно. Я недавно создал своего первого мастера с kubeadm init --pod-network-cidr=10.244.0.0/16, поэтому у меня нет kubeadm-config.yaml, как указано в этой документации.

Вместо этого я попробовал следующее:

kubeadm join ... --token ... --discovery-token-ca-cert-hash ... \
  --experimental-control-plane --certificate-key ...

Часть kubeadm join ... --token ... --discovery-token-ca-cert-hash ... - это то, что предлагается при запуске kubeadm token create --print-join-command на первом мастере; обычно он служит для добавления другого работника. --experimental-control-plane предназначен для добавления другого мастера. Ключ в --certificate-key ... такой, как предлагается, запустив kubeadm init phase upload-certs --experimental-upload-certs на первом мастере.

Я получаю следующие ошибки:

[preflight] Running pre-flight checks
[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. 
The recommended driver is "systemd". Please follow the guide at 
https://kubernetes.io/docs/setup/cri/
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
error execution phase preflight: 
One or more conditions for hosting a new control plane instance is not satisfied.

unable to add a new control plane instance a cluster that doesn't have a stable
controlPlaneEndpoint address

Please ensure that:
* The cluster has a stable controlPlaneEndpoint address.
* The certificates that must be shared among control plane instances are provided.

Что означает, что мой кластер не имеет стабильного controlPlaneEndpoint адреса? Может ли это быть связано с controlPlaneEndpoint в выводе от kubectl -n kube-system get configmap kubeadm-config -o yaml, который в настоящее время является пустой строкой? Как я могу преодолеть эту ситуацию?

Ответы [ 2 ]

2 голосов
/ 26 апреля 2019

Согласно HA - Создать балансировщик нагрузки для kube-apiserver :

  • В облачной среде вы должны размещать узлы плоскости управления позади балансировщика нагрузки пересылки TCP. Этот балансировщик нагрузки распределяет трафик на все исправные узлы плоскости управления в своем списке целей. проверка работоспособности аписервера - это проверка TCP на порт
    kube-apiserver прослушивает (значение по умолчанию :6443).
  • Балансировщик нагрузки должен иметь возможность связываться со всеми узлами плоскости управления на порту аписервер. Он также должен разрешать входящий трафик на его порт прослушивания.
  • Убедитесь, что адрес балансировщика нагрузки всегда соответствует адресу ControlPlaneEndpoint.

Чтобы установить ControlPlaneEndpoint config, вы должны использовать kubeadm с флагом --config. Взгляните здесь для примера файла конфигурации:

apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
kubernetesVersion: stable
controlPlaneEndpoint: "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT"

Примеры конфигурационных файлов Kubeadm разбросаны по многим разделам документации. Я рекомендую вам прочитать GoDoc /apis/kubeadm/v1beta1, в котором есть полные примеры файлов YAML, используемых различными типами конфигурации kubeadm.


Если вы настраиваете автономную плоскость управления, попробуйте использовать функцию kubeadm alpha selfhosting:

[..] ключевые компоненты, такие как сервер API, диспетчер контроллера и планировщик запускается как модули DaemonSet, настроенные через API Kubernetes вместо статических модулей, настроенных в кубеле через статические файлы.

Этот PR ( # 59371 ) может прояснить различия в использовании собственной конфигурации.

0 голосов
/ 26 апреля 2019

Вам необходимо скопировать сертификаты (etcd / api server / ca и т. Д.) С существующего мастера и поместить на второй мастер. затем запустите сценарий инициализации kubeadm. поскольку сертификаты уже присутствуют, этап создания сертификата пропускается, а остальные этапы инициализации кластера возобновляются.

...