Как-то в комментах задавали вопрос, чем участие в Слёрме отличается от чтения мануалов по Кубернетес. Я попросил Павла Селиванова, спикера Слёрм-2 и МегаСлёрм, дать небольшой пример того, что он будет рассказывать на Слёрмах. Передаю слово ему.


Я администрирую кластер Кубернетес. Недавно мне понадобилось обновить версию k8s и, в том числе, перезапустить все машины в кластере. Я начал процесс в 12:00, и к концу рабочего дня все было готово. Причем в первый раз я еще следил за ходом обновления, а во второй — ушел на обед на 1,5 часа (справедливости ради, прихватив ноутбук). Кластер обновился сам, без моего участия и незаметно для клиентов, разработка ничего не заметила, деплои продолжались, сервис работал как обычно.


Как это выглядело.


Вероятные проблемы


При ребуте машин есть два плохих сценария.


  1. Разработчик запустил приложение/redis в один инстанс. Как аккуратно ни выводи машину из обслуживания, случится даунтайм.
  2. Есть 2 реплики приложения, и в одну идет деплой. Она погасла, осталась единственная реплика, и тут приходит админ и гасит последнюю реплику. Опять же, пока не поднимется реплика после деплоя, будет даунтайм.

Я бы мог согласовать ребут с разработкой, мол, остановите деплой, проверьте инстансы, я буду перезапускать машины, но мне по душе идея DevOps, что человеческое общение нужно свести к минимуму. Лучше один раз настроить автоматизацию, чем каждый раз согласовывать свои действия.


Условия задачи


Я пользуюсь Амазоном с его удобством и стабильностью. Все автоматизировано, можно создавать и гасить виртуалки, проверять их доступность и т.д.


Кластер Кубернетес разворачивается, управляется и обновляется через утилиту kops, которую я очень люблю.
При обновлении kops автоматически дрейнит ноду (kubectl drain node), дожидается, пока все будет эвакуировано с этой ноды, удаляет ее, создает в Амазоне новую ноду с нужной версией компонентов Кубернетес, присоединяет ее к кластеру, проверяет, что нода хорошо въехала в кластер, и так со всеми нодами по кругу, пока везде не будет нужная версия Кубернетес.


Решение


В CI я при помощи kube-lint проверяю все манифесты, которые будут запущены в Кубернетес. Helm Template выкидывает все, что собирается запускать, я на выгрузку натравливаю линтер, который все оценивает по заданным правилам.


Например, одно из правил гласит, что для любого приложения в кластере Кубернетес количество реплик должно быть не меньше 2.
Если реплик нет вообще (что по дефолту равняется 1), их 0 или 1, kube-lint запрещает деплой в кластер, чтобы избежать проблем в будущем.


Допустим, деплой by design устроен так, что остается одна реплика. На этот случай есть pod disruption budget, где для приложения, запущенного в Кубернетес, устанавливается max_unavailable и min_available. Если нужно, чтобы всегда была хотя бы 1 реплика, ставим min_available = 1.
Было 2 реплики, запустился деплой, 1 реплика умерла, осталась 1. На машине, где реплика живет, админ запускает kubectl drain node. По идее Кубернетес должен начать эту живую реплику удалять и перевозить на другую ноду. Но срабатывает pod disruption budget. Кубернетес говорит админу: извини, тут живет реплика, если мы ее удалим, то нарушим pod disruption budget. Умный drain node висит до истечения таймаута и пытается задрейнить ноду. Если деплой окончен и обе реплики стали доступны, реплика на этой ноде будет выведена.


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


Мои темы на Слёрме:


  • Знакомство с Kubernetes, основные компоненты
  • Устройство кластера, основные компоненты, отказоустойчивость, сеть k8s
  • Продвинутые абстракции Kubernetes
  • Логирование и мониторинг

Мои темы на МегаСлёрме:


  • Процесс создания отказоустойчивого кластера изнутри
  • Авторизация в кластере при помощи внешнего провайдера
  • Безопасные и высокодоступные приложения в кластере
  • Реализация стратегий деплоя отличных от RollingUpdate
  • Траблшутинг в Kubernetes

Комментарии (7)


  1. gecube
    03.10.2018 16:00
    +1

    Отлично. Рекламная статья? Типа можно сделать убер-обновление, но мы вам не покажем? Покупайте Слерм?
    Единственное ценное из статьи — информация, что используется kops. Да и то спорно стоит ли использовать его, а не любое другое решение.


    1. aSkobin Автор
      03.10.2018 16:12
      -1

      Статья про то, чем материал Слерма отличается от чтения мануалов, что было заявлено в первых же предложениях.
      Показаны два сценария проблем, показано их решение. Если для вас это тривиально, поздравляю.


      1. gecube
        03.10.2018 16:23
        +1

        Т.е. всю статью можно было свести к «На МегаСлёрме (и только там — мое добавление) я покажу полный набор правил… »

        Коллеги, я призываю все-таки делиться наработками. Те же EPAMовцы (за что им честь и хвала) — не утаивают свои playbook'и и методики и проводят бесплатные обучающие курсы для DevOps (ссылку не дам, кто хочет — сам найдет).


        1. aSkobin Автор
          03.10.2018 16:37

          Так и ваш комментарий можно свести к фразе «Сволочи, вы не увидите моих денег!» Вот и поговорили.
          На ютубе лежат в открытом доступе все лекции с первого Слерма (кто хочет — найдет).
          До недавнего времени в открытом же доступе лежал git.
          Я хотел написать конкретную вещь: про отличие практики от мануала. Я про это спросил Павла, я про это написал. Когда мы решим поделиться наработками, поделимся.
          Правда, я подозреваю, что тогда вы придете в комментарии и напишете, что мы все делаем неправильно. :)


          1. gecube
            03.10.2018 16:54

            На ютубе лежат в открытом доступе все лекции с первого Слерма (кто хочет — найдет).

            Да, спасибо, уже видел. К сожалению, не впечатлился. Желаю учесть ошибки проведения первого Слерма и исправить их )
            Правда, я подозреваю, что тогда вы придете в комментарии и напишете, что мы все делаем неправильно. :)

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


            1. aSkobin Автор
              03.10.2018 16:58

              Учли. Получилось ли исправить — скоро увидим.


    1. past
      04.10.2018 13:21

      Все еще веселее. Статья про то, как все здорово в GKE.