Как стать автором
Обновить

Комментарии 22

Меня одного смутило "Bare-metal" в названии и рассказ о том как запустить всё на виртуалках?..

Ещё конечно бы хотелось услышать обоснование аж трёх мастеров для тестового кластера, тогда как и продакшн справится с одним. Ведь вы же знаете что мастер не критичен для работы кластера, это control-plane. Им кластер управляется, то есть если мастера выключить, то всё мгновенно не исчезент в варпе, просто пропадёт возможность что-то менять и вообще доступ к API. но поды всё так же будут запущены и будут работать и отвечать? Знаете же да? Что в кластере с одним мастером если его перегрузить пока он перегружается особо ничего не произойдёт? Ну так зачем в тестовом кластере ТРИ мастера?

Bare-metal имеется ввиду не готовое решение в облаке, а уставка кубернетес на ноды (в домашних условиях виртуалку проще создать, чем собирать железные сервера).

Три мастера - в статье говорилось что это эмуляция кубернетеса в продакшн. И кофигурация трех мастеров это не одно и тоже, что кофигурация одного мастера

В статье говорится про "production ready" кластер или если по умному high-available. Основное условие такого кластера это резервные мастер ноды, то есть необходимо иметь в запасе дополнительные ноды, которые могут быть вообще неактивными.

Почему три мастер ноды? Есть такое понятие как кворум, необходимо всегда иметь в кластере нечетное количество мастер нод, чтобы они могли между собой проголосовать кто сейчас будет "главным". Кворум используется и kubernetes кластере и в etcd кластере. Я немного упростил про выбор "главного", если интересно можно почитать про lease.

В статье говорится про тестовый кластер для экспериментов.

И давайте ещё раз, как high-available соотносится с мастерами? мастер это control-plane, если он выключится, high-availability данных не изменится, всё что в кластере запущено так и будет работать и отвечать. Пропадёт возможность управлять кластером, но это всё. На доступность данных это не повлияет.

high-availability данных не изменится

Это уже не будет high-availabe кластер, если у него один мастер. Никто не спорит с тем, что при выходе из строя мастера запущенные приложения продолжат работу. В лучшем случае хост с мастер нодой "моргнёт", ребутнется, затем поднимется и нода восстановится. А если мастер не самополечится? Полезную нагрузку (приложения и сервисы) больше нельзя будет обновить, откатить, а в случае выхода из строя нельзя будет запланировать на другую worker ноду. И толку тогда от такого кластера?

Я уже ставил кластер с одной мастер нодой на VPS серверах, они не жили больше 4 месяцев, причем ставил у разных облачных провайдеров.

И это всё так же не имеет смысла для домашнего стенда описанного в статье.

Не представляю что надо делать с кластером чтобы убить его мастер за 4 месяца.

У меня есть тестовый стенд с которым я что только не делал, и сертификаты на нём кончались, и неудачное обновление CNI выводило из строя всю сеть, но мастер это просто пара процессов и файлы в двух директориях на диске. Причём не так много. Пока эти файлы целые - ничего с мастером не случиться.

Все эти мануалы о том как надо бахнуть три мастера обязательно, а то развернуться ворота в ад это безусловно классно, если вы делаете кластер для сбербанка. Но для домашней лаборатории три виртуалки для задачи с которой справляется raspberrypi просто потому что так написано в документациях которые писали люди которые прочли другие документации - это чистый карго культ и шаманизм делания ради делания без понимания что вы делаете.

>>> Устанавливаем на bm kubernetes

>>> Долистал до половины - все еще мануал по созданию виртуалок

>>> Ура, устанавливаем куб - ну кароч кубспрей там в паре мест конфиги поправили и кароч оно работает, если что потом можете конфиги поправить

Ну тупо топ инструкция я считаю, дайте еще

А почему не терраформ и опенстек?

Скрипткидди гораздо проще бездумно скопировать .tf чем из статьи выдергивать команды и запускать в консоли 🤣

  1. Ставим на железо убунту.

  2. Ставим microk8s

Готово, у вас k8s bare metal. Хотите ВМок? Без проблем, kubevirt)

Если виртуалка ставилась с какогото кастомного модифицированного имиджа, как у меня, то кьюбспрей может и не отработать. Нужна именно ванильная ось. С дебианом были проблемы, нужно переключить iptables в легаси режим.

Насколько я понимаю в качестве CNI у вас Calico? Тогда зачем нужен MetalLB, если bird в составе calico-node отлично анонсирует по iBGP весь диапазон ClusterIP, а если очень надо - то и дальше? Я дома ради общего развития упоролся и развернул куберовский кластер с мастером на сервачке на антресоли и несколькими воркерами, в том числе на еще одном совсем маленькой машинке, которая заодно играет роль роутера - и сервисы, которые деплоятся с обычным ClusterIP отлично видны с любого устройства во внутренней сети - даже если там кубера нет. При том никакой оверлейной сети нет, всё работает за счет маршрутизации.

Ну у меня не было задачи куда-то это открывать во внешнюю локалку дальше моей рабочей машины. Всё же в рамках одной и той же локальной машины использовать iBGP - это лишнее, наверное. Но можно, если хочется.

Локально с виртуалками всё еще проще - по идее должно быть достаточно просто прописать на хосте маршрут до подсетки ClusterIP через любую из куберовских нод, а маршрут обратно с виртуалок скорее всего уже есть. Это действительно будет простым решением, а не MetalLB, который в L2-режиме активно рассылает ARP-анонсы, а в L3 - это тот же iBGP.

К слову - даже iBGP далеко не такой монстр, как может показаться из названия, и например в моем случае вообще не потребовал никакой конфигурации - как только поднялись поды calico-node на всех узлах "волшебным" образом возникли нужные маршруты.

Официальная документация рекомендует использовать для этого minikube. Canonical продвигает свой MicroK8s. Есть ещё k0s, k3s, kind — в общем, инструменты на любой вкус.

Все эти игрушечные кластеры подходят максимум для целей разработки или проверки концепций.

Игрушечные? Конечно же нет. Когда слышу, что K3s подходит только для локальной машины и не серьёзных задач, то сразу понимаю, что серьезного опыта работы у вас с ним нет.

Тут выход один — поднять нормальный кластер на виртуалках.

Виртуалки - это прекрасная возможность потратить кучу системных ресурсов на ОС каждой из виртуалок и в целом много лишних действий, но зачем это делать, если есть, например, K3D (не путать с K3s) где можно прекрасно запустить сколько хотите master'ов и worker'ов в docker контейнерах? Говорю про Linux, где для docker не нужна никакая виртуализация.

Можно даже поднять рядом в виртуалке, допустим, Gitlab CE, подцепить к нему ваш кластер и обкатывать CI/CD.

Для этого достаточно поставить Gitlab runner в ваш кластер Helm'ом и это 2 строчки кода и никаких виртуалок. Впрочем, если хотите поставить целый self hosted Gitlab, то это тот же helm install в тот же кубер.

В целом статьи на Хабре всё больше разочаровывают тем, что они про каких-то сферических коней в вакууме и совершенно не понятно в какие же такие ограничения дистрибутива того или иного кубера кто-то вообще упирается со своим hello world?

Виртуалки - это прекрасная возможность потратить кучу системных ресурсов
на ОС каждой из виртуалок и в целом много лишних действий, но зачем это
делать, если есть, например, K3D (не путать с K3s) где можно прекрасно
запустить сколько хотите master'ов и worker'ов в docker контейнерах?

Если задача состоит в том, чтобы быстро был кубер и в нём что-то запустить "двумя строчками кода", то пойдёт любой из десятка вариантов для локальной разработки. Об этом я сказал в начале статьи. Цель всех этих заморочек с виртуалками - чтобы хотя бы формально ваш демо-стенд был приближен к реальности, в которой будут работать приложения. Допустим, надо имитировать нештатную ситуацию. Например, проверить на практике, как ваше приложение поведёт себя, если отвалится один из воркеров из-за сетевых проблем, на некоторое время, а потом опять подключится?

Я достаточно внимательно прочёл вашу статью и мой комментарий выше остаётся в силе.

Цель всех этих заморочек с виртуалками - чтобы хотя бы формально ваш демо-стенд был приближен к реальности, в которой будут работать приложения. 

Приложения работающие в кубере работают в контейнерах. Контейнеры обрели такую популярность в том числе потому, что они, упрощённо говоря, максимально приближенно работают и на локальной машине в докере и в Kubernetes в облаке. Ваш локальный демо стенд может отличаться от облака только количеством памяти (может и нет), скоростью дисков (может и нет) и т.п. и естественно отсутствием таких облачных ресурсов как elastic load balancer & etc.

Используя K3D вы можете поднять несколько master и worker нод в docker контейнерах и даже несколько кластеров одновременно и играться с их конфигурацией сколько угодно (да, даже с сетью), только с K3D вы можете себе позволить больше чем с виртуалка и значительно проще, т.к., в отличие от виртуалки, докер контейнер не тратит столько ресурсов системы для запуска полноценной ОС и настройка крайне проста.

Ну, у вас несколько не bare metal, крутите то в тяжелой VM. А раз крутите убунту то вообще лучше сделать кубер типа k3s в LXC/LXD - без VM оверхеда и в 10 раз проще.

https://github.com/corneliusweig/kubernetes-lxd/blob/master/README-k3s.md

убунтовкий microk8s крайне не рекомендую... падуч без внятного объяснения причин, ставится через snap - который может его начать обновлять без спроса и прибьет в процессе кластер к чертям, о чем много ругани в гитхабе, и на что забила убунта

А раз крутите убунту то вообще лучше сделать кубер типа k3s в LXC/LXD - без VM оверхеда и в 10 раз проще.

Естественно, можно было. Мы сознательно добавляем оверхед, чтобы стенд был более-менее похож на продакшн, вряд ли на проде будет использоваться lxc. Взамен получаем возможность тренироваться и отрабатывать разные сценарии, например, ломать и шатать кластер.

Как вариант вместо kvm и libvirt можно использовать lxc. Ресурсов меньше требуется.

https://habr.com/ru/post/420913/

Зарегистрируйтесь на Хабре, чтобы оставить комментарий