
Как устроен Helm transcript
Просто Devops · @prosto_devops
Words
2,605
Runtime
17:41
Speaking pace
147wpm
Reading time
11min
147 words per minute, below the 160 25th percentile of 349 measured videos. That distribution comes from the 349-video hook study.
Opening (first 30 seconds)
Всем привет. Вы на канале Просто Devops. И сегодня у нас ролик, который в комментариях вы просили чаще всего. Как вы могли догадаться из названия, говорить мы будем сегодня про Helmл. А если вы не смотрели наши ролики про Кубернетис, то самое время это сделать, потому что то, о чём мы будем говорить дальше, лучше всего будет понятно именно после просмотра этих роликов. Ну а теперь мы начинаем. И начинаем мы с простой ситуации.
74 words, the words spoken in the first 30 seconds at 147 words per minute.
Sentence shape
| Measure | This transcript |
|---|---|
| Sentences | 211 |
| Average words per sentence | 12.3 |
| Longest sentence | 53 words |
| Questions asked | 2 |
| Sentences containing a number | 6 |
Most used terms
- values4
- helm2
- registry2
- replicas2
- val2
- yamal2
- 3way1
- 3way merge1
- chart1
- chart yaml1
- charts1
- charts crd1
What this transcript is
Every word below is the caption track YouTube publishes for this video, pulled from the video itself and reproduced unchanged. It is not Prepublish's writing, not a summary, and not a re-transcription: it is the video's own published captions. Russian captions, generated automatically by YouTube, in the video’s original language. Source: the video on YouTube. A channel that would rather this page did not exist can ask for its removal through the contact page, and it is removed.
Transcript
Всем привет. Вы на канале Просто Devops. И сегодня у нас ролик, который в комментариях вы просили чаще всего. Как вы могли догадаться из названия, говорить мы будем сегодня про Helmл. А если вы не смотрели наши ролики про Кубернетис, то самое время это сделать, потому что то, о чём мы будем говорить дальше, лучше всего будет понятно именно после просмотра этих роликов. Ну а теперь мы начинаем. И начинаем мы с простой ситуации. Вы разложили приложение по манифестам, выполнили команду, которая показана на экране, и всё поднялось и заработало. Проходит неделя, и вам нужно теперь это всё удалить, целиком, ничего не забыв. И вот тут выясняется одна неприятная деталь. Вы не знаете, что именно вы установили. И кластер тоже не знает, потому что в Kubernetis нет такой сущности, [музыка] как приложение. И сегодня мы как раз-таки разберём, как эту проблему решает Хелм, что такое чарт и как значения попадают в манифесты. Вдобавок разберём, что происходит с момент установки, где хелм хранит то, что он поставил, и почему откат работает не так, как многие думают. Подписывайтесь на канал, если вы этого ещё не сделали, а мы начинаем. Возьмём самый скучный сервис, какой только может быть. Одно приложение, одна база и никакой дополнительной экзотики. В кластере под него будет деплоймент, который будет держать нужное количество подов, сервис, чтобы до них можно было достучаться. Исс, чтобы пустить трафик снаружи, Configmap с настройками, секрет с паролями. Возможно, будет ХПА, который будет добавлять поды под нагрузкой, плюс сервис-аккаунт с [музыка] правами. Семь объектов на самый простой случай. И это ещё скромно. А теперь смотрите самую важную деталь. Связь между этими семью объектами существует только у вас в голове, когда вы это делаете, и в директории, где лежат файлы. Сам кластер видит семь независимых записей, между которыми нет никакого родства. Он не знает, что это одно приложение. И отсюда мы с вами получаем три проблемы. И если вы уже работаете девопсом, то с каждой из них вы даже могли сталкиваться. Проблема первая: вам нужны три окружения.
[музыка] условный def, stage и прот. А это значит, что вот эти семь файлов размножаются копированием на три окружения. При этом в каждом из них отличается, ну, дай бог, 15 строк. Там тег образа, какой-нибудь, количество реплик, возможно, домен, возможно, лимиты по ресурсам. И дальше начинается проблема. Что-то поправили для продового окружения, в деф не перенесли. Что-то поправили для деф-окружения, в прот не перенесли. И через какое-то время окружения разъезжаются, так, что бак можно воспроизвести только на конкретном окружении. Это самая большая проблема. Вторая проблема - это то, что не существует операции обновить приложение и не существует операции удалить приложение. Есть только операция применить конкретные манифесты и удалить конкретный объект. Поэтому, если мы, например, удаляем deploлоймент или сервис, при этом забываем про условный Configm Mapap, то он остаётся висеть в кластере ровно до того момента, пока его случайно кто-нибудь не обнаружит. А третья проблема называется Чужой софт. Например, вам нуженс-контроллер или какой-нибудь оператор для базы, и вы идёте в репозиторий или в какую-то документацию и копируете оттуда 20-30 манифестов, которые впервые в жизни видите, и надеетесь, что автор, который всё это здесь сложил, ничего не забыл, всё правильно расписал, и если вы это запустите, то всё у вас будет работать. И на самом деле все три проблемы абсолютно про одно и то же. не хватает какого-то слоя, который знает, что вот эта вся пачка объектов является одним целым. И именно вот это делает хлм. Если спросить у кого-нибудь, что такое ХЛМ, то чаще всего вам ответят, что это шаблонизатор для Ямол или менеджер пакетов для Кубера. Проблема в том, что это определение непонятное. А сейчас мы сделаем так, чтобы стало понятно. Хлм выполняет три разные задачи. Первая из них - это шаблонизация, чтобы вместо трёх копий одних и тех же файлов у вас был один комплект с полями, куда будут подставляться нужные значения. Возвращаемся к примеру с тремя окружениями и вспоминаем, что деф от прода у нас отличается только некоторыми параметрами. Поэтому нам достаточно иметь один шаблон, а эти параметры указывать конкретно под каждое окружение. Вторая его задача - это как раз-таки быть пакетным менеджером.
[музыка] Соответственно, любое чужое приложение вы можете поставить из registry, где их огромное количество, всего-навсего одной командой, то есть ровно так, как ставится пакети в любом дистрибутиве. И третья задача, она же главная - это то, что он является менеджером релизов. [музыка] У установленного приложения появляется имя, номер ревизии и история. И кластер наконец-то начинает понимать, что конкретные 7, 8, 10, [музыка] 15 объектов относятся к одной установке. которую можно обновить целиком, откатить целиком и снести целиком. И вот тут надо, на самом деле, заострить внимание, потому что если бы Хэллм являлся только шаблонизатором, то он бы давно проиграл, потому что подставлять значение умеет и [музыка] условный кастомайз, причём без лишних сущностей. А Хэлм выиграл эту гонку как раз за счёт третьего пункта. Но прежде чем залазить внутрь холма, давайте разберём несколько терминов, которые помогут вам понять то, что будет дальше. Первый из них - это чарт. По сути, тот же самый пакет. Это директория с шаблонами, значениями по умолчанию и файлом, где написано имя и версия. Сам чарт может лежать в гите, может лежать в режистри и сам по себе ничего делать не будет. Второй термин - это values.
Vales - это файл с параметрами. Допустим, сколько реплик [музыка] будет, какой будет тег образа, какой домен и так далее и тому подобное. Соответственно, имея один чарт, мы можем иметь бесконечное количество вальюсов под разные окружение. Третий термин релиз. И тут проходит граница, потому что чарт - это то, что у нас лежит в репозитории, а релиз - это то, что уже установлено и работает [музыка] в кластере под собственным именем. Один чарт, как я уже сказал, можно установить 10 раз под разными именами, и получится 10 независимых релизов. И четвёртый термин - это ревизия. Это номер версии релиза. Установили впервые, первая ревизия, обновили, стала вторая. Обновили ещё раз, третья. И так далее. Но перед тем, как мы продолжим, нужно разложить по местам ещё три вещи. Соответственно, сам хлм, чарт и registry, то есть склад этих самых чартов. И начнём с самого хелма. Это одна программа, то есть один исполняемый файл, который лежит на машине рядом спct. На этом всё. В кластере нет ни одной его части, ни сервера, ни агента, ни пода, ни своей базы, ничего. При этом работает HM точно так же, как всем привычный куб CTL. Если не привычный, смотрите предыдущие ролики про Kuber. Что он делает? Он берёт ваш конфиг доступа, идёт в аписервер и делает запросы от вашего имени и с вашими правами. А это значит, что?
[музыка] что если у вас, например, нет права создавать деплойменты, значит хел их создать не сможет, потому что ему откажет сам кластер. При этом самый, наверное, важный момент, о котором стоит сказать, про который, в том числе, спрашивают на собеседованиях - это то, где сам этот хлм существует. Так вот, Хэллм в кластер не устанавливается, и в целом это сделать невозможно. Хэлм ставится только себе, а если он работает в пайплайне, то это тот же самый бинарник, просто запущенный на раннере. А самое главное заключается в том, что всё, о чём я рассказываю, вы уже сейчас можете сделать самостоятельно, а самое главное, абсолютно бесплатно. Ведь мы специально к выходу этого ролика на своём сайте опубликовали ознакомительную практику по холму. Девять шагов, по которым вас заботливо проведёт наш новый маскот Подыч. И в рамках этой практики вы сами сделаете всё то, о чём мы уже успели поговорить и о том, о чём мы будем говорить далее. А если захочется чего-то ещё, то милости просим в полигон, в котором также лежит 10 абсолютно бесплатных задач. А если и это вкатит, то дальше есть буotcamp. Все ссылки в описании. А мы продолжаем. Тут разобрались. Теперь переходим к чартам. Чарт - это директория с предсказуемой структурой. Внутри лежит главный файл chart.yaml, который является идентификатором всего пакета. Он хранит версию, имя, версию самого приложения. Дальше идут вальюсы. valy yamal, которые хранят значения по умолчанию, которые создатель чарта посчитал разумными, правильными и подходящими для условного большинства задач. Дальше у нас идёт директория templates с шаблонами манифестов, плюс директория Charts [музыка] для зависимостей. И ещё есть директория CRD, к которой мы вернёмся чуть позже. А сейчас поговорим о том, как работают шаблоны. Сам по себе шаблон выглядит точно так же, как обычный манифест. Просто в нём вместо конкретных значений стоят специальные заглушки, которые в дальнейшем будут принимать значения переменных. Для наглядности посмотрите вот сюда. Берём чистый чарт. В нём написано replicas, после чего указано число, в нашем случае три. В шаблоне написано просто replicas, а дальше в двойных фигурных скобках ссылка на значения из values. То же самое происходит с образом, доменом, лимитами и всем, что мы захотим обернуть в переменные. Теперь логично переходим к тому, откуда берутся сами значения, потому что источников этих значений несколько, и они [музыка] имеют свойство друг друга перебивать. Сначала берётся values. Из самого чарта, то есть значение по умолчанию. Поверх накладывается уже наш файл, который мы передаём с флагом -F, а поверх него ложится то, что мы указываем прямо в командной строке. Соответственно, чем мы находимся правее в этой цепочке, чем выше, как бы, тем мы сильнее. Опять же рассмотрим на примере. Вот у нас есть чарт нашего сервиса. Лежит он у нас в гите. Рядом с ним лежит файл values тире. И value-pro.yamal.
[музыка] И отличаются они теми самыми параметрами, которые для Дева и прода разные. Ну, допустим, количество реплик, опять же, какие-то домены и так далее и тому подобное. И, соответственно, теперь нет размножения одинаковых файлов, о котором я говорил в начале ролика, а вся разница указана в конкретных переменных в конкретных валюсах. [музыка] Ну и последний пункт - это хранилище. Свой чарт можно ставить прямо из директории, а чужой надо откуда-то взять. И для этого нужен regдстрим, то есть сетевое хранилище, откуда тянет чарты по имени и по версии. Мы указываем адрес, дальше ставим пакет одной командой, как в Линуксе, из подключенного репозитория. И раньше такие режистри поднимали отдельно специально под чарты. Ну а сейчас чарты чаще всего лежат в том же самом реджистре, где лежит всё остальное, включая наши образы контейнеров и другие артефакты. Теперь разбираем то, как выглядит установка приложения с помощью хлма выполняете команду Helm Install. Дальше Хэллм сначала собирает чарт и подтягивает зависимости, подставляет значения в шаблоны и получает на выходе обычные манифесты, ровно такие, как мы бы написали руками. После чего эти манифесты уже отправляются в кластер, а Хэллм, в свою очередь записывает слепок того, что отправил. А теперь внимание знатоки, вопрос. Мы только что выяснили, что - это просто программа на вашей машине или на раннере, а значит, логично предположить, что список установленного она держит где-то у себя, допустим, в скрытой директории рядом с конфигом. Логично. Но на самом деле это не так. Слепок лежит в самом кластере обычным секретом в том же наймсйсе, где стоит приложение. Имя у этого секрета очень понятное, вы его видите на экране. Внутри секрета лежит чарт valюс и полностью отредеренный манифест, сжатый и закодированный в текст. Из этого одного факта и выводится почти всё поведение холма. Да, то есть список релизов у нас живёт конкретно в кластере. Соответственно, любой, кто пользуется кластером, видит один и тот же список. Плюс откат версии работает именно потому, что предыдущий слепок физически лежит рядом. Каждая ревизия - это отдельный секрет. Откат не пересобирает чарт и не думает, каким приложение было раньше. Хэлм просто достаёт из архива готовый экземпляр и применяет его заново. Но ничего не проходит бесследно, и у всего есть свои подводные камни. Секрет ограничен по размеру, потому что за ним стоит хранилище кластера со своими лимитами. Поэтому жирный чарт с большим количеством манифестов и тяжёлыми описаниями ресурсов в этот лимит упирается и установка падает с ошибкой, которая на первый взгляд вообще не про размер. И раз уж мы уже заговорили про хранение, то есть ещё одна очень важная деталь. Как я уже сказал, в секрете хранится весь снимок целиком. И наш Valюс там лежит обычным текстом. Поэтому применяем главное правило: никаких паролей и токенов в вальюсе. Но, кстати, всё, что я вам сейчас рассказываю, так было не всегда. В холме второй версии в кластере жил специальный серверный компонент с названием Тиллер, и все команды шли через него. При этом у самого тиллера были права почти на всё и сразу, и поэтому тот, кто может дотянуться до тиллера, фактически управляет кластером целиком, независимо от собственных прав. И в третьей версии хелма этот самый тиллер вырезали, и клиент пошёл в вапе напрямую, тем самым повысив безопасность. Теперь поговорим про обновление. И здесь, на самом деле, очень много интересных деталях, о которых стоит знать до того, как вы впервые вообще столкнётесь с холмом. Во-первых, как оно вообще работает. Хэллм сравнивает три вещи: что было записано в прошлом снимке, что получилось в новом манифесте и что реально лежит в кластере на данный момент. Отсюда появилось название 3wayм merge, то есть слияние по трём источникам. И именно поэтому Хелм замечает, что кто-то мог поправить объект руками и не затирает молча чужие изменения. В четвёртой версии Хелма, актуальной на данный момент, эту логику довели до конца. Теперь применение по умолчанию идёт через серверсайт, то есть решение о том, как слить изменения, принимает сам аписервер кластера, а не клиент на вашей машине. И кластер ведёт учёт, какое поле кем управляется. И если наш с вами апгрейд лезет в поле, которым владеет кто-то другой, то мы получаем явный конфликт, а не просто перезапись. Теперь про откат, вернее, про то, как он работает. Ролбэк часто воспринимают буквально как машину времени. Применили и всё стало ровно, как было. Нет, работает это немножечко не так. Откат возвращает манифест, но никак не состояние мира. Он вернёт прежний тег образа, прежнее количество реплик, прежней настройки, но он не вернёт данные, которые за это время могли измениться в базе. Он не отменит миграцию, которая уже применилась. Он не поднимет вольм, который удалили при обновлении. То есть всё, что произошло за пределами манифеста, остаётся как есть. И вторая деталь, которая тоже очень важна, откат не отматывает чётчик назад. Он создаёт новую ревизию с содержимым старой. То есть, если у вас было в какой-то момент три ревизии, вы откатились ко второй, то их стало четыре, где четвёртая повторяет вторую. И история в Хелме от этого только растёт. И это на самом деле правильно, потому что журнал нельзя переписывать задним числом. Но тут нужно хранить в голове следующее. Этот журнал не бесконечный. На него существует лимит. Этот лимит может отличаться. Он задаётся настройками, но важно помнить, что он есть, потому что иначе вы рискуете стать жертвой собственных нервных исправлений. Например, выкатили неудачный релиз, что-то поправили, выкатили новый, оно всё равно работает неправильно. Дальше делаете ролбэк, он перезаписывает ревизию.
[музыка] Этот цикл повторяется несколько раз, и в какой-то момент вы понимаете, что у вас весь журнал заполнен буквально неисправными версиями, которых вы наплодили буквально дубликатами. И чтобы такого не было, просто держите в голове о том, что журнал не бесконечный, у него есть какое-то ограничение, и это ограничение в идеале узнать заранее. И дальше я бы мог привести ещё очень много таких ситуаций, с которыми можно столкнуться при работе с холмом, но тогда ролик бы затянулся. Вместо этого мы собрали все такие ситуации в отдельную шпаргалку, которая лежит у нас в Telegram-канале. Переходите, забирайте и будьте в курсе о том, как Трублшутьх Hлм. А подвести итог можно очень просто, буквально вернувшись в начало ролика. У Кубернетиса нет понятия приложения. Есть только отдельные объекты, которые ничего друг о друге не знают, а ХЛМ приносит это самое понятие. А на этом всё. В следующем ролике разберём реальные вопросы собеседований по куберу, в которых тоже будет, кстати говоря, Хэллм. Подписывайтесь на канал, чтобы не пропустить новый ролик. Пишите комментарии, пишите свои идеи для следующих роликов. Ставьте лайки, подписывайтесь на канал. Всем спасибо за просмотр. Всем пока-пока.
The words are the caption track's own and nothing is reworded or re-transcribed. Paragraph breaks are placed between sentences so the text reads as prose.
Use this transcript
Three free tools that work on the material around a video like this one. No signup, no login.
Hook Analyzer
Paste the first 30 seconds of your own draft for a hook score and rewrites.
Policy Pre-Flight
Check your draft against YouTube's advertiser-friendly guidelines before you record it.
Channel Skill Generator
Read this channel's public videos and transcripts, and download a writing brief for it.