Kubernetes.Package manager - Helm. Часть 16

Thank you for reading this post, don't forget to subscribe!

На офи­ци­аль­ной стра­ни­це Helm назы­ва­ет сам себя «The package manager for Kubernetes«, но на деле Helm нечто боль­шее, чем про­сто мене­джер паке­тов для Kubernetes — ско­рее это систе­ма управ­ле­ния при­ло­же­ни­я­ми в Kubernetes, поз­во­ля­ю­щая выпол­нять их уста­нов­ку, отсле­жи­вать состо­я­ние, выпол­нять обнов­ле­ние, удаление.

Архитектура Helm

Helm опе­ри­ру­ет паке­та­ми при­ло­же­ний для запус­ка в Kubernetes, кото­рые в тер­ми­но­ло­гии само­го Helm назы­ва­ют­ся chart (схе­ма, или чер­тёж), и позволяет:

  • созда­вать новые чар­ты с нуля
  • упа­ко­ва­вать чар­ты в архив (tgz)
  • вести сов­мест­ную рабо­ту с чар­та­ми, исполь­зуя общие репозитории
  • уста­нав­ли­вать и уда­лять чар­ты в кла­сте­ре Kubernetes
  • управ­лять рели­за­ми уста­нов­лен­ных в кла­сте­ре чартов

Концепты Helm

Три основ­ных кон­цеп­та Helm:

  1. chart: пакет инфор­ма­ции, необ­хо­ди­мой для созда­ния при­ло­же­ния к кла­сте­ре Kubernetes
  2. config: инфор­ма­ция о настрой­ках и пара­мет­рах, кото­рые исполь­зут­ся chart-ом для созда­ния инстан­са при­ло­же­ния и управ­ле­ния его рели­за­ми
  3. release: рабо­та­ю­щий инстанс chart-а, свя­зан­ный с опре­де­лён­ным config-ом

Компоненты Helm

Helm мож­но раз­де­лить на две основ­ных части — кли­ент, и набор библиотек.

  • Helm client: ути­ли­та команд­ной стро­ки (весь Helm напи­сан на Go), отве­ча­ет за локаль­ную раз­ра­бот­ку чар­тов, вза­и­мо­дей­ствие с репо­зи­то­ри­я­ми чар­тов, управ­ле­ние рели­за­ми, и вза­и­мо­дей­ствие с биб­лио­те­кой Helm — отправ­ка новых чар­тов для уста­нов­ки, управ­ле­ние рели­за­ми запу­щен­ных приложений
  • Helm library: предо­став­ля­ет логи­ку рабо­ты Helm, отве­ча­ет за вза­и­мо­дей­ствие с API Kubernetes-кла­сте­ра, управ­ля­ет чар­та­ми и их кон­фи­га­ми, рели­за­ми, уста­нов­кой чар­тов в кла­стер, их обнов­ле­ние и удаление

Helm Charts

Итак, chartчарт — набор фай­лов, опи­сы­ва­ю­щий опре­де­лён­ный набор ресур­сов Kubernetes, с помо­щью кото­ро­го мож­но выпол­нить запуск пода с одним сер­ви­сом, напри­мер веб-сер­вер, или пол­но­цен­ное при­ло­же­ние, вклю­ча­ю­щее в себя и веб-сер­вер, и при­ло­же­ния фрон­тен­та, бекн­да, баз дан­ных, систем кеши­ро­ва­ния и т.д.

Структура файлов

Чар­ты орга­ни­зо­ва­ны в виде ката­ло­гов и фай­лов, где имя ката­ло­га верх­не­го уров­ня, содер­жа­ще­го дру­гие дирек­то­рии и фай­лы будет име­нем тако­го чарта.

Напри­мер:

[codesyntax lang="php"]

[/codesyntax]

Тут:

  • example-chart — ката­лог, имя чарта 
    • Chart.yaml — файл с мета­дан­ны­ми чар­та, опи­сы­ва­ю­щий что это за чарт, содер­жа­щий инфор­ма­цию о вер­си­ях, зави­си­мо­стях, авто­ре чар­та и так далее
    • charts: чарт может содер­жать subcharts — они будут рас­по­ла­гать­сяв этом каталоге
    • templates — содер­жит фай­лы шаб­ло­нов, кото­рые будут при­ме­не­ны к кла­сте­ру для запус­ка при­ло­же­ния, исполь­зуя шаб­ло­ни­за­тор Go
      • NOTES.txt — help-текст, кото­рый будет отоб­ра­жать­ся пользователям
      • deployment.yaml — при­мер мани­фе­ста с ресур­сом Kubernetes Deployment
      • service.yaml — при­мер мани­фе­ста с ресур­сом  Kubernetes Service
    • values.yaml — содер­жит зна­че­ния по-умол­ча­нию для шаб­ло­нов — Services, Deployments, и т.д.