Ручное добавление ноды в кластер
Предисловие
Иногда нет возможности разместить серверы внутри одного broadcast домена, тогда можно добавить машину самостоятельно, без механизма auto discovery.
Для выполнения этой инструкции понадобится:
- openssl
- base64
- kubectl
- kubeconfig администратора
- Адрес (K8SCPIP) и CA controlplane
Подготовка сервера
Подробно процесс подготовки описан в разделе Подготовка ОС. Выполните все шаги из той инструкции.
Генерация конфигурации для host-agent
Внимание!
В этой инструкции будут использоваться placeholder! Замените вручную их на соответствующие параметры.
Для удобства они будут отмечены зелёным цветом, вот так
Генерация нового приватного ключа
openssl genrsa -out $hostname.key 2048
Генерирация CSR и кодирование его в base64
Внимание
При генерации CSR очень важно заполнить поля Organization name (O) и Common Name (CN).
Organization Name всегда должен быть равен byoh:hosts
Common Name заполните по следующему паттерну byoh:host:$hostname
Запустите генерацию CSR:
openssl req -new -key $hostname.key -out $hostname.csr
Появится помощник с интерактивными вопросами. Для регистрации сервера в кластере заполните их без ошибок.
Ответы на интерактивные вопросы
Organization Name (eg, company) [Internet Widgits Pty Ltd]: byoh:hosts
Common Name (e.g. server FQDN or YOUR name) []: byoh:host:$hostname
Получите содержимое запроса сертификата в base64:
cat $hostname.csr | base64 | tr -d '\n'
Создайте CertificateSigningRequest
---
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
name: byoh-csr-$hostname
spec:
request: $csr_base64
signerName: kubernetes.io/kube-apiserver-client
usages:
- client auth
expirationSeconds: 31536000
Примените его в менеджмент кластере с помощью kubectl apply.
Проверьте его статус:
kubectl get csr byoh-csr-$hostname
Получите сертификат
kubectl get csr byoh-csr-$hostname -o jsonpath='{.status.certificate}'
Закодируйте ключ в base64
cat $hostname.key | base64| tr -d '\n'
Создаем kubeconfig для машины
Переменные $apiserver_addr и $apiserver_ca вы можете скопировать с уже зарегистрированных машин или в cluster-admin kubeconfig, который хранится на любом мастере по пути /etc/kubernetes/admin.conf
Заметка
kubeconfig из веб-интерфейса rancher не подойдёт.
---
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: $apiserver_ca
server: $apiserver_addr
name: default-cluster
contexts:
- context:
cluster: default-cluster
namespace: default
user: default-auth
name: default-context
current-context: default-context
kind: Config
preferences: {}
users:
- name: default-auth
user:
client-certificate-data: $cert_base64 # можно получить с помощью kubectl get csr byoh-csr-$hostname -o jsonpath='{.status.certificate}'
client-key-data: $key_base64 # можно получить с помощью cat $hostname.key | base64 | tr -d '\n'
Сохраните этот конфиг на машине, которую планируете завести в кластер по пути /root/.byoh/config.
Владелец и группа файла должны быть root, права 0600(rw-------).
Запустите агент с помощью systemctl start host-agent. Проверьте в менеджмент кластере появление машины с помощью
kubectl get byoh $hostname