У меня проблема с присоединением моих рабочих узлов к трем настроенным мастерам.Стоит отметить, что я очень мало знаю о сетевой стороне этого (я бы предпочел, чтобы это объяснили, как будто мне пять, чтобы я мог быть уверен, что ничего не пропущу).
Я следил за руководством, расположенным по адресу:
https://dockerlabs.collabnix.com/kubernetes/beginners/Install-and-configure-a-multi-master-Kubernetes-cluster-with-kubeadm.html
с некоторыми вариациями - IP-адреса разные, а конфигурация для kubeadm.k8s.io/v1alpha3 не поддерживается текущим K8. Я обновился, чтобы использовать kubeadm.k8s.io/v1beta3, хотя два тега из исходной конфигурации не имеют параллелей (apiServerCertSANs и apiServerExtraArgs), и я не знаю, важны ли они. У меня версия Kubectl 1.24.0.
Мастера были инициализированы сообщением:
W0510 09:17:54.102466 8717 initconfiguration.go:306] ошибка распаковки схемы конфигурации. apiServerExtraArgs», неизвестное поле «apiserver-cert-extra-sans»
[init] Использование версии Kubernetes: v1.24.0
[preflight] Запуск проверки перед полетом
[preflight] Извлечение изображений, необходимых для настройки кластера Kubernetes
[предварительная проверка] Это может занять минуту или две, в зависимости от скорости вашего интернет-соединения.
[preflight] Вы также можете выполнить это действие заранее, используя «вытягивание образов конфигурации kubeadm»
[certs] Использование папки certificateDir «/etc/kubernetes/pki»
[certs] Создание сертификата и ключа «ca»
[certs] Генерация сертификата и ключа "apiserver"
[certs] apiserver, обслуживающий сертификат, подписан для DNS-имен [kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local master1] и IP-адресов [10.96.0.1 10.50.0.50 10.50.0.10]
[certs] Генерация сертификата и ключа «apiserver-kubelet-client»
[certs] Генерация сертификата и ключа «front-proxy-ca»
[certs] Генерация сертификата и ключа «front-proxy-client»
[certs] Внешний режим etcd: пропуск создания центра сертификации etcd/ca
[certs] Внешний режим etcd: пропуск генерации сертификата etcd/server
[certs] Внешний режим etcd: пропуск генерации сертификатов etcd/peer
[certs] Внешний режим etcd: пропуск создания сертификата etcd/healthcheck-client
[certs] Внешний режим etcd: пропуск генерации сертификата apiserver-etcd-client
[certs] Генерация ключа «sa» и открытого ключа
[kubeconfig] Использование папки kubeconfig «/etc/kubernetes»
[kubeconfig] Запись файла kubeconfig «admin.conf»
[kubeconfig] Запись файла kubeconfig «kubelet.conf»
[kubeconfig] Запись файла kubeconfig «controller-manager.conf»
[kubeconfig] Запись файла kubeconfig «scheduler.conf»
[kubelet-start] Запись файла среды kubelet с флагами в файл «/var/lib/kubelet/kubeadm-flags.env»
[kubelet-start] Запись конфигурации kubelet в файл «/var/lib/kubelet/config.yaml»
[kubelet-start] Запуск kubelet
[control-plane] Использование папки манифеста «/etc/kubernetes/manifests»
[control-plane] Создание статического манифеста пода для «kube-apiserver»
[control-plane] Создание статического манифеста пода для «kube-controller-manager»
[control-plane] Создание статического манифеста Pod для «kube-scheduler»
[wait-control-plane] Ожидание загрузки kubelet плоскости управления в виде статических подов из каталога «/etc/kubernetes/manifests». Это может занять до 4 минут
[apiclient] Все компоненты плоскости управления работоспособны через 6,521293 секунды.
[upload-config] Хранение конфигурации, используемой в ConfigMap «kubeadm-config», в пространстве имен «kube-system».
[kubelet] Создание ConfigMap «kubelet-config» в пространстве имен kube-system с конфигурацией для kubelets в кластере
[upload-certs] Пропуск фазы. См. --upload-certs
[mark-control-plane] Пометка узла master1 как уровня управления путем добавления меток: [node-role.kubernetes.io/control-plane node.kubernetes.io/exclude-from-external-load-balancers]
[mark-control-plane] Пометка узла master1 как плоскости управления путем добавления пометок [node-role.kubernetes.io/master:NoSchedule node-role.kubernetes.io/control-plane:NoSchedule]
[загрузочный токен] Использование токена: 1w1x1s.7qwcr1m1e5hj3yp3
[bootstrap-token] Настройка токенов начальной загрузки, информация о кластере ConfigMap, роли RBAC
[bootstrap-token] Настроены правила RBAC, позволяющие токенам Node Bootstrap получать узлы
[bootstrap-token] Настроены правила RBAC, позволяющие токенам Node Bootstrap публиковать CSR, чтобы узлы могли получать долгосрочные учетные данные сертификата.
[bootstrap-token] Настроены правила RBAC, позволяющие контроллеру csrapprover автоматически утверждать CSR из токена начальной загрузки узла.
[bootstrap-token] Настроены правила RBAC, чтобы разрешить ротацию сертификатов для всех клиентских сертификатов узлов в кластере.
[bootstrap-token] Создание ConfigMap «cluster-info» в пространстве имен «kube-public»
[kubelet-finalize] Обновление «/etc/kubernetes/kubelet.conf», чтобы указать на вращающийся сертификат и ключ клиента kubelet.
[аддоны] Применяемый необходимый аддон: CoreDNS
[аддоны] Применяемый необходимый аддон: kube-proxy
Ваша плоскость управления Kubernetes успешно инициализирована!
Но все три перечислены в узлах (по общему признанию, как NotReady, но я считаю, что это потому, что я не развернул что-то вроде Calico), и я дошел до того, что попытался добавить рабочие узлы. запуск предоставленной команды соединения сначала приводит к ошибке:
[preflight] Запуск проверки перед полетом
[предварительная проверка] Чтение конфигурации из кластера...
[preflight] FYI: вы можете посмотреть этот файл конфигурации с помощью «kubectl -n kube-system get cm kubeadm-config -o yaml»
Предварительная проверка фазы выполнения ошибки:
Не выполнено одно или несколько условий для размещения нового экземпляра плоскости управления.
[сбой загрузки сертификата для ЦС: не удалось загрузить файл сертификата /etc/kubernetes/pki/ca.crt: открыть /etc/kubernetes/pki/ca.crt: нет такого файла или каталога, ошибка загрузки ключа для учетной записи службы: не удалось загрузить файл закрытого ключа /etc/kubernetes/pki/sa.key: открыть /etc/kubernetes/pki/sa.key: нет такого > > файла или каталога, ошибка при загрузке сертификата для ЦС переднего прокси-сервера: не удалось t загрузить файл сертификата /etc/kubernetes/pki/front-proxy-ca.crt: открыть /etc/kubernetes/pki/front-proxy-ca.crt: такого файла или каталога нет]
Убедитесь, что:
- Кластер имеет стабильный адрес controlPlaneEndpoint.
- Предоставляются сертификаты, которые должны быть общими для экземпляров плоскости управления.
Чтобы увидеть трассировку стека этой ошибки, выполните с параметром --v=5 или выше.
Чтобы исправить это, я скопировал сертификаты с одного из мастеров на рабочий по адресу /etc/кубернетес/пки/
Затем я снова запустил соединение и получил следующую ошибку:
[preflight] Запуск проверки перед полетом
[предварительная проверка] Чтение конфигурации из кластера...
[preflight] FYI: вы можете посмотреть этот файл конфигурации с помощью «kubectl -n kube-system get cm kubeadm-config -o yaml»
[preflight] Выполнение предварительных проверок перед инициализацией нового экземпляра плоскости управления
Предварительная проверка фазы выполнения ошибки: [предварительная проверка] Произошли некоторые фатальные ошибки:
[ОШИБКА ExternalEtcdClientCertificates]: /etc/etcd/ca.pem не существует
[ОШИБКА ExternalEtcdClientCertificates]: /etc/etcd/kubernetes.pem не существует
[ОШИБКА ExternalEtcdClientCertificates]: /etc/etcd/kubernetes-key.pem не существует
[preflight] Если вы знаете, что делаете, вы можете сделать нефатальную проверку с помощью --ignore-preflight-errors=...
Чтобы увидеть трассировку стека этой ошибки, выполните с параметром --v=5 или выше.
Снова скопировал сертификаты с мастера по адресу /и т.д./и т.д./
. Наконец, я получаю эту ошибку:
[preflight] Запуск проверки перед полетом
[предварительная проверка] Чтение конфигурации из кластера...
[preflight] FYI: вы можете посмотреть этот файл конфигурации с помощью «kubectl -n kube-system get cm kubeadm-config -o yaml»
[preflight] Выполнение предварительных проверок перед инициализацией нового экземпляра плоскости управления
[preflight] Извлечение изображений, необходимых для настройки кластера Kubernetes
[предварительная проверка] Это может занять минуту или две, в зависимости от скорости вашего интернет-соединения.
[preflight] Вы также можете выполнить это действие заранее, используя «вытягивание образов конфигурации kubeadm»
[certs] Использование папки certificateDir «/etc/kubernetes/pki»
[certs] Использование существующего сертификата и ключа «front-proxy-client»
фаза выполнения ошибки control-plane-prepare/certs: ошибка при создании ресурсов PKI: не удалось записать или проверить сертификат «apiserver»: сертификат apiserver недействителен: x509: сертификат действителен для kubernetes, kubernetes.default, kubernetes.default.svc, kubernetes .default.svc.cluster.local, master2, а не worker1
Чтобы увидеть трассировку стека этой ошибки, выполните с параметром --v=5 или выше.
Если я копирую сертификаты с данного мастера, они отображаются как действительные для этого мастера (мастер2 выше). Как генерировать/использовать сертификаты для рабочего процесса, поскольку кажется, что они генерируются командой INIT, а не командой JOIN?
В качестве потенциального решения я рассмотрел внутреннее отключение SSL, как в этом сообщении
https://stackoverflow.com/questions/60970744/how-to-run-kubernetes-без-ssl-сети
но я не могу найти соответствующие разделы в моем YAML для внесения поправок. Я бы предпочел работать с SSL, если могу, но я открыт для того, чтобы отключить его, если это необходимо.