Pull to refresh

Comments 32

Зеленый деплой. Два раза ку.
PS: имхо многовато мемов, местами мешаются. Но расписано хорошо.

Да - расписано очень хорошо.

Только у меня вопрос, а почему не GitHub Actions или Argo Workflows + Argo CD + Argo Rollouts? C точки зрения цены - это все бесплатно, но уже не так лампово, это да...

Выбрал гитлаб я по нескольким причинам:

1. Все собрано в одном месте и не нужно бегать по разным сервисам.

2. Нравится, что в нем практически все работает из коробки (кроме тестирования =/ ).

3. Когда начинал с ним возиться (в начале года), то и цена использования была адекватна, сейчас это конечно уже минус.

4. И, наконец, примитивная вкусовщина.

Но, если задаться целью максимально сэкономить (не знаю насчет удобства использования и установки), то ваши варианты выглядят интересно, особенно Argo Workflows.

Ещё гитлаб можно бесплатно селф-хостить (правда, не уверен насчёт интеграции с кубером)

UPD: А, ну в статье про это есть.

В бесплатной версии подключается только один кластер кубера

Без проблем работает бесплатная селфхостед версия уже с тремя кластерами куба и кучей проектов с самописанным cicd.

А там доступны все те же функции? Типа кубернетис дашборд или канареечный деплой? А какие системки на этой машине, которая хостит гитлаб?

Прекрасная статья. Спасибо автору.

Но есть ошибка. 2к21 это 2210 год.

К - кило означает тысяча (10^3)

2.21 * 10^3 = 2210

Как вы правильно заметили К - тысяча. А значит 2к21 и говорится как - две тысячи двадцать один С:

Вообще это не я придумал). Это уж довольно устойчивое из года в год выражение. И пошла она от игр NBA 2K** -> NBA 2K19, NBA 2K16, NBA 2K20 и тд. Вот например если погуглить эту фразу.

Можно на гитлабе сэкономить если разместить в кубере оператор ранеров и скалировать их, а тариф использовать бесплатный. Функционал сохранится, цена упадёт.

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

Спасибо за статью.
Как только нод становится больше одной - возникает проблема агрегации логов. Какие могут быть легковесные решения без использования elk стека?

Вообще это хороший вопрос, пока у меня нет ответа на него). Действительно я пытался запустить elk на этом кластере, но он очень ресурсоемкий. Возможно когда нибудь придется решать эту проблему)

Попробуйте loki от создателей графаны, он на гошечке и экономичный.

Спасибо, интересный проект)

Кластер решил делать минимальный, состоящий из двух узлов — master и worker.

А можно пояснить что означает это раздение на master и worker? На один узел идет деплой на другом билд?

Мастер нода отводится чисто для обслуживания и поддержки кластера, тут не запускаются ресурсы пользователя. А вот воркер ноды обслуживают чисто клиента, в том числе и билды (если gitlab runner развернуть).

Ещё вы могли использовать k3s, тогда хватило бы одного узла. А в случае расширения, можно было бы добавить новых узлов.

Оно и k8s можно развернуть на одном узле (minikube в частности). Имхо в случае всего двух нод можно обойтись без выделенного мастера, разве что там памяти мало, тогда лучше развести во избежание конкуренции за память и вызова OOMKiller'a. Ну и k8s расширяться тоже неплохо умеет.
То бишь worker только нужен что бы выкатываться на мастер ноду? Тогда не избыточно ли такая конфигурация для этой ноды? там же она часто работает

Выкатывают приложение (или все пользовательские ресурсы) только на worker ноды.

Например тут хорошо расписано:

Главный узел - это узел, который контролирует и управляет набором рабочих узлов. На мастер узле работают следующие процессы:

1. Kube-APIServer - Вся внешняя связь с кластером осуществляется через API-сервер.

2. Kube-Controller-Manager - контроллер-менеджер реализует управление в кластере.

3. Etcd - база данных состояний кластера.

4. Kube Scheduler - планирует действия для рабочих узлов на основе событий, происходящих в etcd.

Это все запускается только на мастер ноде и нужно для управления всем кластером.

Пример: есть кластер, он состоит из одной мастер ноды ив двух воркер нод. Если выйдет из строя мастер нода, то все до свидания кластеру и нашим сервисам. А вот если выйдет из строя воркер нода, то куб это заметит, и все пользовательские ресурсы перезапустит на второй рабочей ноде, таким образом будет небольшой простой в работе сервиса. Для надежности делают резервную мастер ноду - если вдруг выходит из строя главная, то резервная мастер нода перехватывает управление кластером на себя. Такие кластеры уже называют High-Availability clusterHA cluster.

Или вот с офф сайта:

Мастер Kubernetes отвечает за поддержание желаемого состояния для вашего кластера. Когда вы взаимодействуете с Kubernetes, например, используя интерфейс командной строки kubectl, вы работаете с мастером Kubernetes вашего кластера.

Под "мастером" понимается совокупность процессов, которые управляют состоянием кластера. Обычно все эти процессы выполняются на одном узле кластера, и поэтому этот узел называется главным (master). Мастер также может быть реплицирован для доступности и резервирования.

ЕМНИП воркер-ноды могут совпадать с мастер-нодами, но так делать не рекомендуется. Проблема просто в количестве процессов, но строгой необходимости разнести мастер и воркер не вижу.

Спасибо за разъяснение. Стало понятно, кто чем занимается)

Осталось небольшое сомнение, что для мастер ноды нужен такой же по производительности VPS как для worker, но нигде данных по этому поводу не смог найти

Да, как правильно заметил @F1RST для мастера минимальные - 2 CPU, 2Gb RAM. А воркер нода может быть вообще любой. Хоть 1 CPU и 1GB RAM, но логично делать, конечно, рабочие машины производительными.

А можно сделать мощную мастер ноду, включить специальную настроечку в кубе, и тогда все рабочие нагрузки будут запускаться на мастер ноде, про это выше упомянул @vesper-bot.

А почему вы опираетесь на инструкции по установке k8s, где указано в качестве CRI Docker.

Вы же в курсе, что Docker как CRI в k8s deprected ?

Kubernetes is deprecating Docker as a container runtime after v1.20.

Точнее вопрос такой, а зачем использовать то, что уже объявлено deprecated ?

А какие рантаймы умеют запускать контейнеры докера, при этом имеют нормальный (v1alpha1 или выше, как по ссылке нааписано) CRI для кубера? А докер-контейнеры местами стали стандартом де-факто для запуска микросервисов.

Признаюсь, я просто не знал что Docker как среда выполнения контейнеров устарела С:, спасибо что подсветили. Ребята, разработчики куба, в своем блоге подробно расписали, почему они так делают и как жить дальше (тут и тут)

Кратко для тех, кто впервые слышит: не надо паниковать, Docker всё также будет использоваться для разработки. Просто при установке кластера теперь надо выбирать другую среду выполнения контейнеров типа containerd и CRI-O.

В версии куба 1.20 и 1.22 всё будет работать как и раньше. В этой статье конкретно они и ставятся.

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

Оу… мда, оконфузился. Спасибо за объяснения. И да, проверил развернутые у нас рантаймы, там containerd в качестве интерфейса.

К тому же, чтобы это заработало нужно для домена awesomeservice.tech уметь настраивать автоподдомены

A запись на *.domain.com и при необходимости на *.appname domain.com, что там настраивать)

Sign up to leave a comment.