====== Бюджетная безотказная сеть для кластера ======
===== Реклама =====
* Всем привет! В нашем центре обучения вы научитесь разворачивать множество различных кластеров - pacemaker/corosync, ceph, kubernetes, и, у студентов часто возникает вопрос, а что случится, если "сломается" сеть между его узлами. Давайте на этот вопрос зададим другой - как сделать так, что бы сеть между узлами кластера "не сломалась"
===== Техническое задание =====
* Развернуть отказоустойчивую сеть с использованиием неуправляемых коммутаторов
* Мигрировать кластер в эту сеть с минимальным временем простоя
* Убедиться в отказоустойчивости решения
===== Запись вебинара =====
* Тэги: Linux, Bond, Ethernet, Cluster, Arp, High availability
* [[https://val.bmstu.ru/unix/video/Семинар%20Бюджетная%20безотказная%20сеть%20для%20кластера%2008.04.2025.mp4]]
===== Методическая подготовка =====
===== Шаг 1. Что у нас есть для начала =====
* [[Мониторинг кластера Kubernetes]] или [[Решение Ceph]] или [[Пакет Pacemaker]]
* [[Сети Cisco и Linux у Вас дома]]
* [[Утилита curl]] для тестирования работы приложения
===== Шаг 2. Создаем оказоустойчивую сеть =====
* Используя [[Материалы по GNS]], создаем оказоустойчивую сеть: cloud LAN и Switch1,2,3
===== Шаг 3. Настраиваем bonding, добавляем второй сетевой адаптер и включаем в оказоустойчивую сеть =====
(venv1) server:~# ansible all -f 4 -m apt -a 'pkg=ifenslave state=present update_cache=true' -i /root/kubespray/inventory/mycluster/hosts.yaml
* По очереди, на каждом узле проводим [[Настройка сети в Linux#Настройка bonding]]
server# cat /tmp/interfaces
...
iface bond0 inet static
address 192.168.24.22N
...
server# scp /tmp/interfaces kubeN:/etc/network/interfaces
server# ssh kubeN init 0
* Удаляем на узле адаптер Vbox, добавляем его в GNS, указываем два сетевых адаптера, подключаем к Switch1,2 и запускаем
* Проверяем работоспособность узла
cmder> kubectl get nodes
nodeN# ceph -s
nodeN# crm_mon
* [[https://stackoverflow.com/questions/55072235/how-to-delete-completed-kubernetes-pod|How to delete completed kubernetes pod?]]
kube1:~# kubectl get pods --field-selector=status.phase!=Running -A -o wide
kube1:~# kubectl delete pod --field-selector=status.phase==Succeeded -A
kube1:~# kubectl delete pod --field-selector=status.phase==Failed -A
===== Шаг 4. Тестируем отказоустойчивую сеть =====
* Удаляем отдельные линки ([[Настройка сети в Linux#Настройка bonding]])
* Ждем сообщение от мониторинга ([[Сервис Prometheus]] и [[Сервис Prometheus#prometheus-alertmanager]])
* Удаляем по очереди Switch1,2 (не забыть подключать к Switch3)
* Пробуем устроить Ethernet петлю
kube1:~# tcpdump -nniany arp
kube1:~# ip n flush all
===== Вопросы =====
===== Домашнее задание =====
- Написать ansible playbook для настройки bond ifupdown
- Используя GNS, проверить гипотезу о возможности использования одного IP адреса двумя компьютерами
===== Вернуть обратно =====
(venv1) server.corp24.un:~# ansible all -a 'init 0' -i /root/kubespray/inventory/mycluster/hosts.yaml
- Остановить проект
- Удалить все объекты из проекта
- Удалить VM из GNS
- Удалить проект
- Откатить VM kubeN на snapshot
- Запустить кластер