Добрый день.
Последние несколько месяцев я пытался запустить кластер Kubernetes для взаимных пыток и обучения.
За это время я прочитал большое количество разных статей, многие из которых были хорошими, но совершенно не подходящими для человека, не сталкивавшегося с кубером.
Отказ от ответственности В этой статье я не ставлю перед собой цели рассказать «как это делать правильно», я хочу рассказать, как заставить это работать и дать людям возможность учиться дальше, а не лысеть и седеть раньше положенного возраста.
Изначально я хотел запустить кластер на выделенном сервере с виртуальными машинами на Hyper-V, но понял, что «просто запустить мастер и соединить узлы» недостаточно для полноценного кластера, нужно еще установить сеть плагин, позаботьтесь о постоянных томах и желательно о каком-нибудь балансировщике нагрузки.
Дальнейшие попытки привели меня к Хетцнеру и владельцу ранчо.
Почему Хетцнер? У них есть одно очень существенное преимущество.
Вот цена виртуального сервера в Hetzner:
И его эквивалент в Mail Cloud:
Да, у hetzner нет управляемых баз данных, очередей, S3-хранилища и прочего, но того, что у них уже есть, вполне достаточно, чтобы получить работающий кластер, а все остальное можно запускать в нем, или на соседних серверах/выделенных (физический сервер) можно подключить к частной сети виртуальных серверов) Rancher берет на себя все (или почти все) хлопоты по сборке кластера, его администрированию и расширению, а также позволяет управлять им через ui, а не через консоль.
Прежде чем мы начнем, нам понадобится домен rancher и облачная учетная запись Hetzner, что, я надеюсь, вы сможете сделать без инструкций.
Итак, давайте начнем.
Прежде всего, мы создаем частную сеть.
Пойдем Хетцнер Облако , создаем проект, переходим на вкладку Сети, нажимаем Создать сеть, меняем подсеть с 16 на 8, запоминаем название нашей сети, оно нам пригодится в дальнейшем.
Затем перейдите на вкладку «Безопасность» -> «Токены API», нажмите «Создать токен API» и установите переключатель на «Чтение и запись»:
Подтверждаем, сохраняем токен, больше нам его не покажут:
Далее нам нужно создать сервер, на котором мы установим rancher. Перейдите на вкладку «Серверы» и нажмите «Добавить сервер».
Локацию выбираем по желанию, я выбрал Хельсинки (помните, локация пригодится).
Тип сервера - Стандартный CX21 (или больше, если вы богаты).
В столбце Сеть выберите сеть, которую вы создали ранее.
Ниже мы добавляем ваш открытый ключ, ниже указываем имя сервера (например, rancher), затем нажимаем «Создать и купить сейчас».
Ждем пару секунд пока сервер создастся.
Далее вам нужно указать на него свой домен (создать А-запись) и дождаться, пока сервер станет доступен через него.
После этого подключаемся к серверу по ssh (через putty или другой ssh-клиент) и приступаем к установке ранчера.
Сначала устанавливаем докер:
Затем запускаем контейнер с rancher:apt-get update apt install -y docker.io systemctl start docker systemctl enable docker
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
-v /root/rancher:/var/lib/rancher \
--privileged \
--name rancher-server \
rancher/rancher:latest \
--acme-domain your.domain.com
Измените your.domain.com на домен, который вы связали с сервером.
Ждем несколько минут, пока владелец ранчо завершит свои дела и получит SSL-сертификат. О фермере и докере В документации владельца ранчо рекомендуется использовать этот метод установки (один узел с использованием Docker) только для тестирования и разработки, но именно это мы и делаем.
Заходим в свой домен и видим окно приветствия.
Устанавливаем пароль администратора, указываем, что хотим администрировать несколько кластеров, и принимаем лицензионное соглашение.
Далее подтверждаем, что ранчер правильно определил домен и переходим на главную страницу.
Теперь вам нужно установить расширения для работы с hetzner. Для этого перейдите в Инструменты > Драйверы.
Следующая вкладка «Драйверы узлов» и нажмите «Добавить драйвер узла».
В открывшемся окне необходимо указать ссылки для скачивания плагина: В репозитории драйверов возьмите ссылку на последний релиз linux_amd64 (на данный момент это https://github.com/JonasProgrammer/docker-machine-driver-hetzner/releases/download/3.3.0/docker-machine-driver-hetzner_3.3.0_linux_amd64.tar.gz ) и скопируйте его в поле «URL-адрес загрузки».
В Репозитории плагинов пользовательского интерфейса возьмите ссылку на URL-адрес пользовательского пользовательского интерфейса (на данный момент это https://storage.googleapis.com/hcloud-rancher-v2-ui-driver/component.js ) и вставьте его в поле «URL пользовательского интерфейса».
Добавьте домен Storage.googleapis.com в белый список.
Нажмите «Создать», через пару секунд драйвер скачается и установится.
Теперь мы готовы развернуть кластер.
Перейдите на главную страницу (выпадающее меню справа от логотипа > Глобальный), нажмите «Добавить кластер».
В списке появится Hetzner, нажмите
В следующем окне введите желаемое имя кластера (поле «Имя кластера»), введите префикс для имени узла, установите флажки в столбцах «И т. д.» и «Панель управления», затем нажмите кнопку «Добавить шаблон узла»:
В открывшемся окне введите API Token Hetzner (я сказал, что он вам еще понадобится).
Далее выберите местоположение сервера (там, где вы разместили самый первый сервер), ОС, тип сервера (CP21 или выше).
Обязательно выберите частную сеть из списка, установите флажок «Использовать частную сеть» и дайте шаблону имя.
После создания шаблона необходимо добавить пул рабочих узлов, для этого нажмите кнопку «Добавить пул узлов», еще раз введите префикс с новой строки, установите флажок «Рабочий», укажите желаемое количество и шаблон сервера (выберите такой же, как мастер, или добавить новый, более мощный).
Затем спускаемся в «Параметры кластера», разворачиваем «Параметры Kubernetes», указываем нужную версию Kubernetes (желательно последнюю, так как hetzner поддерживает только три последние версии), Поставщик сети — Flannel, Поставщик облака — внешний, затем нажимаем «Редактировать как».
«Кнопка YAML».
Прежде чем нажать «Редактировать как YAML», вы можете пойти немного дальше и изменить настройки, если знаете, что они делают.
В открывшемся окне нужно добавить в rancher_kubernetes_engine_config следующий текст: .
rancher_kubernetes_engine_config: .
addons: |- --- apiVersion: v1 stringData: token: <API Token> network: <Network name> kind: Secret metadata: name: hcloud namespace: kube-system --- apiVersion: v1 stringData: token: <API Token> kind: Secret metadata: name: hcloud-csi namespace: kube-system addons_include: - https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml - https://raw.githubusercontent.com/hetznercloud/csi-driver/master/deploy/kubernetes/hcloud-csi.yml .
заменяется токеном hetzner (в двух местах), с именем частной сети, которое было указано на серверах.
Последние две строки со ссылками содержат Менеджер облачного контроллера И Драйвер интерфейса хранилища контейнеров .
На странице репозиториев есть таблицы с этими ссылками, выбирайте подходящие для версии kubernetes (берите CCM With Networks support) Это должно выглядеть примерно так:
Нажмите «Создать» и наблюдайте за волшебством: ранчер создаст серверы, установит на них все необходимое и объединит их в кластер.
После создания кластера нажмите на кнопку Cluster explorer (в шапке) и попадете в админку.
На этом установка кластера завершена, можно кликать по менюшкам и изучать содержимое kubernetes. В следующей статье я расскажу о развертывании и установке приложений через helm (на примере gitlab runner).
PS При создании сервиса LoadBalancer он не сможет запуститься самостоятельно, так как вам необходимо указать его физическое местоположение.
Для этого перейдите в раздел «Сервисы», щелкните три точки нужного сервиса > «Редактировать конфигурацию» > «Метки и аннотации» и добавьте аннотации.
load-balancer.hetzner.cloud/location — дата-центр load-balancer.hetzner.cloud/use-private-ip true
П.
П.
С.
: Здесь Утверждается, что этого можно избежать, добавив параметры в переменные кластера по умолчанию, но я не знаю, как это сделать.
Теги: #Kubernetes #Rancher #hetzner