Забележка. превод: Статията е написана от Скот Лоу, инженер с богат опит в ИТ, който е автор/съавтор на седем печатни книги (основно за VMware vSphere). Сега той работи за нейното дъщерно дружество на VMware Heptio (придобит през 2016 г.), специализирано в облачни изчисления и Kubernetes. Самият текст служи като кратко и лесно за разбиране въведение в управлението на конфигурацията за Kubernetes с помощта на технология Персонализиране, който наскоро стана част от K8s.
Kustomize е инструмент, който позволява на потребителите да „персонализират прости YAML файлове без шаблони за различни цели, оставяйки оригиналния YAML непокътнат и използваем“ (описанието е заимствано директно от персонализирайте хранилището на GitHub). Kustomize може да се стартира директно или, от Kubernetes 1.14, да се използва kubectl -k за достъп до неговата функционалност (въпреки че от Kubernetes 1.15 отделният двоичен файл е по-нов от възможностите, вградени в kubectl). (Забележка. превод: И с неотдавнашното издание Kubernetes 1.16 персонализирайте с подкрепата на също и в помощната програма kubeadm.) В тази публикация искам да запозная читателите с основите на kustomize.
В своята най-проста форма/приложение, kustomize е просто колекция от ресурси (YAML файлове, които дефинират обекти на Kubernetes: внедрявания, услуги и т.н.) плюс списък с инструкции за промени, които трябва да бъдат направени в тези ресурси. Точно както make използва набора от инструкции, съдържащ се в Makefile, а Docker изгражда контейнера въз основа на инструкции от Dockerfile, персонализирайте употребите kustomization.yaml за съхраняване на инструкции за това какви промени потребителят иска да направи в набор от ресурси.
Ето примерен файл kustomization.yaml:
resources:
- deployment.yaml
- service.yaml
namePrefix: dev-
namespace: development
commonLabels:
environment: development
Няма да се опитвам да говоря за всички възможни полета във файла. kustomization.yaml (добре е написано за това тук), но ще дам кратко обяснение на конкретен пример:
Област resources показва какво (кои ресурси) ще се промени. В този случай той ще търси ресурси във файлове deployment.yaml и service.yaml във вашата директория (можете да посочите пълни или относителни пътища, ако е необходимо).
Област namePrefix инструктира kustomize да добави определен префикс (в този случай - dev-) за приписване name всички ресурси, определени в полето resources. По този начин, ако Deployment има name със стойност nginx-deployment, персонализирането ще го направи dev-nginx-deployment.
Област namespace инструктира kustomize да добави даденото пространство от имена към всички ресурси. В този случай Deployment and Service ще попаднат в пространството на имената development.
И накрая полето commonLabels съдържа набор от етикети, които ще бъдат добавени към всички ресурси. В нашия пример kustomize ще присвои етикет на ресурсите с името environment и смисъл development.
Ако потребителят го прави kustomize build . в директорията с файла kustomization.yaml и необходимите ресурси (т.е. файлове deployment.yaml и service.yaml), тогава на изхода ще получи текст с промените, посочени в kustomization.yaml.
Забележка. превод: Илюстрация от проектната документация за „простото“ използване на kustomize
Изходът може да бъде пренасочен, ако промените трябва да бъдат извършени:
kustomize build . > custom-config.yaml
Изходните данни са детерминистични (едни и същи входни данни ще произведат същите изходни резултати), така че не е нужно да записвате резултата във файл. Вместо това може да се предаде директно на друга команда:
kustomize build . | kubectl apply -f -
Функциите за персонализиране също могат да бъдат достъпни чрез kubectl -k (от Kubernetes версия 1.14). Имайте предвид обаче, че самостоятелният пакет kustomize се актуализира по-бързо от интегрирания пакет kubectl (поне такъв е случаят с изданието Kubernetes 1.15).
Читателите може да попитат: „Защо е цялата тази сложност, ако можете да редактирате файловете директно?“ Страхотен въпрос. В нашия пример, наистина може да модифициране на файлове deployment.yaml и service.yaml директно, но какво ще стане, ако те са разклонение на нечий друг проект? Директната промяна на файлове затруднява (ако не и невъзможно) пребазирането на разклонение, когато се правят промени в произхода/източника. Използването на kustomize ви позволява да централизирате тези промени във файл kustomization.yaml, оставяйки оригиналните файлове непокътнати и по този начин улеснявайки пребазирането на оригиналните файлове, ако е необходимо.
Ползите от kustomize стават очевидни в по-сложни случаи на употреба. В горния пример kustomization.yaml и ресурсите са в същата директория. Въпреки това, kustomize поддържа случаи на използване, при които има базова конфигурация и много нейни варианти, известни също като наслагвания. Например, потребител искаше да вземе Разгръщане и услуга за nginx, което използвах като пример, и да създаде версии за разработка, етапна и производствена версия (или варианти) на тези файлове. За да направи това, той ще се нуждае от гореспоменатите наслагвания и всъщност самите основни ресурси.
За да илюстрира идеята за наслагвания и основни ресурси (базови ресурси), нека приемем, че директориите имат следната структура:
Във файла base/kustomization.yaml потребители, използващи полето resources просто декларирайте ресурсите, които kustomize трябва да включва.
Във всеки от файловете overlays/{dev,staging,prod}/kustomization.yaml потребителите се отнасят до базовата конфигурация в полето resourcesи след това посочете конкретни промени за дадена среда. Например файл overlays/dev/kustomization.yaml може да изглежда като примера, даден по-рано:
resources:
- ../../base
namePrefix: dev-
namespace: development
commonLabels:
environment: development
В този случай файлът overlays/prod/kustomization.yaml може да бъде напълно различен:
resources:
- ../../base
namePrefix: prod-
namespace: production
commonLabels:
environment: production
sre-team: blue
Когато потребителят стартира kustomize build . в каталога overlays/dev, kustomize ще генерира опцията за разработка. Ако тичаш kustomize build . в каталога overlays/prod - получавате опция за производство. И всичко това - без да правите промени в оригинала (база) файлове, всички по декларативен и детерминиран начин. Можете да ангажирате основната конфигурация и директориите с наслагване директно към контрола на версиите, като знаете, че въз основа на тези файлове можете да възпроизведете желаната конфигурация по всяко време.
Забележка. превод: Илюстрация от проектната документация за използване на наслагвания в kustomize
Персонализиране може много повече от това, което е обхванато в тази статия. Въпреки това се надявам да послужи като добро въведение.
Допълнителни ресурси
Има много добри статии и публикации за kustomize. Ето няколко, които намерих за особено полезни:
Забележка. превод: Можете също да препоръчате блок от връзки, публикуван като Ресурси на уебсайта на помощната програма, последван от колекция от видеоклипове с най-новите доклади за kustomize.
Ако имате въпроси или предложения за подобряване на този материал, винаги съм отворен за обратна връзка. Можете да се свържете с мен на Twitter или Канал Kubernetes Slack. Забавлявайте се, променяйки своите манифести с kustomize!