add: join node
This commit is contained in:
parent
e6d139fb0e
commit
9b646dfa28
@ -764,7 +764,7 @@ vrrp_instance ORANGENET {
|
||||
auth_pass ********
|
||||
}
|
||||
virtual_ipaddress {
|
||||
192.168.1.250
|
||||
192.168.1.250/24
|
||||
}
|
||||
track_script {
|
||||
check_apiserver
|
||||
@ -1035,6 +1035,145 @@ Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
|
||||
|
||||
Then you can join any number of worker nodes by running the following on each as root:
|
||||
|
||||
kubeadm join 192.168.1.XX2:6443 --token t0t422.og4cir4p5ss3fai5 \
|
||||
--discovery-token-ca-cert-hash sha256:1ed6fee1ce62bbe16266526b5c672081b693def06717279b0b794121ff5cd926
|
||||
kubeadm join 192.168.1.XX2:6443 --token здесь-будет-токен-для-подключения-узла-к-кластеру \
|
||||
--discovery-token-ca-cert-hash sha256:здесь-будет-хэш-сертификата-кластера
|
||||
```
|
||||
|
||||
Конфигурационный файл kubectl (~/.kube/config) создается при инициализации кластера с помощью команды kubeadm init. Если каталог .kube не был создан, возможно, вы пропустили шаги, которые следуют после инициализации кластера. Чтобы создать каталог .kube и скопировать конфигурационный файл, выполните следующие команды:
|
||||
Создайте каталог .kube в домашнем каталоге:
|
||||
mkdir -p $HOME/.kube
|
||||
Скопируйте конфигурационный файл admin.conf в каталог .kube:
|
||||
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
|
||||
Измените владельца файла конфигурации на текущего пользователя:
|
||||
sudo chown $(id -u):$(id -g) $HOME/.kube/config
|
||||
Эти команды создадут каталог .kube и скопируют конфигурационный файл, чтобы kubectl мог использовать его для подключения к кластеру.
|
||||
|
||||
|
||||
Проверим api-сервера:
|
||||
```shell
|
||||
kubectl get componentstatuses
|
||||
```
|
||||
|
||||
И увидим что-то вроде:
|
||||
```text
|
||||
Warning: v1 ComponentStatus is deprecated in v1.19+
|
||||
NAME STATUS MESSAGE ERROR
|
||||
scheduler Healthy ok
|
||||
controller-manager Healthy ok
|
||||
etcd-0 Healthy ok
|
||||
```
|
||||
|
||||
#### Добавление рабочих узлов в кластер
|
||||
|
||||
На узле который хотим добавить создадим файл конфигурации `kubeadm-config.yaml`. Его можно создавать в любом месте,
|
||||
так как он будет не нужен после добавления узла в кластер. Я предпочитаю создавать его в домашнем каталоге, в папке
|
||||
`.config` (эта папка обычно создается автоматически и в ней хранятся конфигурационные файлы для различных программ):
|
||||
```shell
|
||||
mkdir -p ~/.config
|
||||
nano ~/.config/kubeadm-config.yaml
|
||||
```
|
||||
|
||||
Пример конфигурации для добавления узла в кластер (поменяйте IP-адрес мастер-узла, токен и хэш сертификата на свои):
|
||||
```yaml
|
||||
kind: JoinConfiguration
|
||||
discovery:
|
||||
bootstrapToken:
|
||||
apiServerEndpoint: "192.168.1.XX2:6443" # Укажите IP и порт API-сервера (master-узла)
|
||||
token: "сюда-вставить-токен-который-получили-при-инициализации-кластера"
|
||||
caCertHashes:
|
||||
- "sha256:сюда-вставить-хэш-сертификата-который-получили-при-инициализации-кластера"
|
||||
nodeRegistration:
|
||||
criSocket: "unix:///var/run/cri-dockerd.sock" # Укажите путь к cri-dockerd сокету
|
||||
```
|
||||
|
||||
Токен и хэш сертификата для добавления узла в кластер был выведен в консоль после инициализации кластера. Узнать
|
||||
их можно на мастер-узле командой:
|
||||
```shell
|
||||
kubeadm token create --print-join-command
|
||||
```
|
||||
|
||||
Примечательно, что команда каждый раз генерирует новый токен (хеш сертификата остается неизменным). Токен используется
|
||||
только для первоначального добавления узла в кластер и действует ограниченное время (24 часа). Поэтому, если узел
|
||||
не был добавлен в кластер в течение этого времени, необходимо получить новый токен.
|
||||
|
||||
Теперь добавим узел в кластер:
|
||||
```shell
|
||||
sudo kubeadm join --config ~/.config/kubeadm-config.yaml
|
||||
```
|
||||
|
||||
Получим приблизительно следующий вывод:
|
||||
```text
|
||||
[preflight] Running pre-flight checks
|
||||
[preflight] Reading configuration from the cluster...
|
||||
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
|
||||
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
|
||||
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
|
||||
[kubelet-start] Starting the kubelet
|
||||
[kubelet-check] Waiting for a healthy kubelet at http://127.0.0.1:10248/healthz. This can take up to 4m0s
|
||||
[kubelet-check] The kubelet is healthy after 1.005191806s
|
||||
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap
|
||||
|
||||
This node has joined the cluster:
|
||||
* Certificate signing request was sent to apiserver and a response was received.
|
||||
* The Kubelet was informed of the new secure connection details.
|
||||
|
||||
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
|
||||
```
|
||||
|
||||
Если теперь на основном узле выполнить команду:
|
||||
```shell
|
||||
kubectl get nodes
|
||||
```
|
||||
|
||||
То увидим, что узел добавлен в кластер:
|
||||
```text
|
||||
NAME STATUS ROLES AGE VERSION
|
||||
opi5plus-1 NotReady control-plane 17h v1.30.8
|
||||
opi5plus-2 NotReady <none> 12m v1.30.8
|
||||
```
|
||||
|
||||
Но на присоединенном узле эта команда не будет работать, и мы увидим приблизительно следующую ошибку:
|
||||
```text
|
||||
...
|
||||
...
|
||||
E0104 18:14:56.016385 86048 memcache.go:265] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp [::1]:8080: connect: connection refused
|
||||
The connection to the server localhost:8080 was refused - did you specify the right host or port?
|
||||
```
|
||||
|
||||
Это происходит потому, что конфигурационный файл `kubectl` не был скопирован на узел. Сначала на новом, присоединенном
|
||||
узле, создадим каталог `.kube` в домашнем каталоге:
|
||||
```shell
|
||||
mkdir -p $HOME/.kube
|
||||
```
|
||||
|
||||
И на мастер-узле скопируем конфигурационный файл `kubectl` на присоединенный узел (не забываем заменить `[user]` на
|
||||
имя пользователя):
|
||||
```shell
|
||||
sudo scp /etc/kubernetes/admin.conf [user]@opi5plus-2:~/.kube/config
|
||||
```
|
||||
|
||||
В процессе копирования потребуется ввести пароль пользователя. После этого на присоединенном узле тоже можно будет
|
||||
выполнять команды `kubectl` и управлять кластером и его узлами. Тем не менее `kubectl get nodes` показывает, что узлы
|
||||
не готовы к работе (**NotReady**). Это происходит потому, что на узлах не установлен сетевой плагин и нет сетевого
|
||||
взаимодействия между узлами.
|
||||
|
||||
В Kubernetes существует несколько популярных CNI-плагинов (CNI -- Container Network Interface), каждый из которых
|
||||
имеет свои особенности и предназначен для различных сценариев использования. Вот некоторые из них:
|
||||
|
||||
* **Flannel** -- Простое и легковесное решение для сетевой подсистемы Kubernetes. Использует VXLAN для создания
|
||||
оверлейной сети. Подходит для простых кластеров и небольших сетей.
|
||||
* **Calico** -- Обеспечивает сетевую политику и безопасность на уровне сети. Поддерживает как оверлейные, так
|
||||
и не оверлейные сети. Подходит для кластеров с высокими требованиями к безопасности и масштабируемости.
|
||||
* **Weave** -- Обеспечивает простую настройку сети и автоматическое обнаружение узлов. Поддерживает шифрование
|
||||
трафика между узлами. Подходит для кластеров, где требуется простота настройки и безопасность.
|
||||
* **Cilium** -- Основан на eBPF и обеспечивает высокую производительность и безопасность. Поддерживает сетевые
|
||||
политики на уровне приложений. Подходит для кластеров с высокими требованиями к производительности и безопасности.
|
||||
* **Kube-Router** -- Объединяет функции маршрутизации, балансировки нагрузки и сетевых политик. Использует BGP для
|
||||
маршрутизации. Подходит для кластеров, где требуется интеграция с существующей сетевой инфраструктурой.
|
||||
|
||||
Сетевое взаимодействие между узлами обеспечивается с помощью манифеста сетевого плагина. Например, для установки
|
||||
```shell
|
||||
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
|
||||
```
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user