ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Kustomize

ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².: Π‘Ρ‚Π°Ρ‚ΡŒΡŽ написал Scott Lowe β€” ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ с большим стаТСм Π² ИВ, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ/соавтором сСми ΠΏΠ΅Ρ‡Π°Ρ‚Π½Ρ‹Ρ… ΠΊΠ½ΠΈΠ³ (прСимущСствСнно ΠΏΠΎ VMware vSphere). БСйчас ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Π΅Ρ‘ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΉ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ VMware β€” Heptio (ΠΏΠΎΠ³Π»ΠΎΡ‰Π΅Π½Π° Π² 2016 Π³ΠΎΠ΄Ρƒ), ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡΡΡŒ Π½Π° ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… вычислСниях ΠΈ Kubernetes. Π‘Π°ΠΌ ΠΆΠ΅ тСкст слуТит Ρ‘ΠΌΠΊΠΈΠΌ ΠΈ простым для понимания Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π² ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ конфигурациями для Kubernetes с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Kustomize, Π½Π΅Π΄Π°Π²Π½ΠΎ вошСдшСй Π² состав K8s.

ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Kustomize

Kustomize – это инструмСнт, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Β«Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ простыС ΠΈ свободныС ΠΎΡ‚ шаблонов Ρ„Π°ΠΉΠ»Ρ‹ YAML ΠΏΠΎΠ΄ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ†Π΅Π»ΠΈ, оставляя ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ YAML Π½Π΅Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΌ ΠΈ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹ΠΌ для использования» (описаниС позаимствовано прямо ΠΈΠ· рСпозитория kustomize Π½Π° GitHub). Kustomize ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ»ΠΈ, начиная с Kubernetes 1.14, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ kubectl -k для доступа ΠΊ Π΅Π³ΠΎ функциям (хотя ΠΏΠΎ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Π½Π° Kubernetes 1.15 ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ Π½ΠΎΠ²Π΅Π΅, Ρ‡Π΅ΠΌ возмоТности, встроСнныС Π² kubectl). (ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².: А с Π½Π΅Π΄Π°Π²Π½ΠΈΠΌ Ρ€Π΅Π»ΠΈΠ·ΠΎΠΌ Kubernetes 1.16 kustomize поддСрТиваСтся Π΅Ρ‰Ρ‘ ΠΈ Π² ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅ kubeadm.) Π’ этой ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ я Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ с основами kustomize.

Π’ своСй ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΉ Ρ„ΠΎΡ€ΠΌΠ΅/ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ kustomize β€” это просто Π½Π°Π±ΠΎΡ€ рСсурсов (YAML-Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Kubernetes: Deployments, Services ΠΈ Ρ‚.Π΄.) плюс список инструкций ΠΏΠΎ измСнСниям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ внСсти Π² эти рСсурсы. Подобно Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ make ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½Π°Π±ΠΎΡ€ инструкций, содСрТащийся Π² Makefile, Π° Docker собираСт ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π° основС инструкций ΠΈΠ· Dockerfile, kustomize ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ kustomization.yaml для хранСния прСдписаний ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ измСнСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ…ΠΎΡ‡Π΅Ρ‚ внСсти Π² Π½Π°Π±ΠΎΡ€ рСсурсов.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° kustomization.yaml:

resources:
- deployment.yaml
- service.yaml
namePrefix: dev-
namespace: development
commonLabels:
  environment: development

НС Π±ΡƒΠ΄Ρƒ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ±ΠΎ всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… полях Π² Ρ„Π°ΠΉΠ»Π΅ kustomization.yaml (ΠΎΠ± этом Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ написано здСсь), Π½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Π΄Ρƒ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ объяснСниС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

  • ПолС resources ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ (ΠΊΠ°ΠΊΠΈΠ΅ рСсурсы) Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒ kustomize. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ рСсурсы Π² Ρ„Π°ΠΉΠ»Π°Ρ… deployment.yaml ΠΈ service.yaml Π² своСм ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ (ΠΏΡ€ΠΈ нСобходимости ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹Π΅ ΠΈΠ»ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ).
  • ПолС namePrefix прСдписываСт kustomize’Ρƒ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ прСфикс (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС β€” dev-) ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ name всСх рСсурсов, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² ΠΏΠΎΠ»Π΅ resources. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли Π² Deployment’Π΅ Π΅ΡΡ‚ΡŒ name со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ nginx-deployment, kustomize сдСлаСт ΠΈΠ· Π½Π΅Π³ΠΎ dev-nginx-deployment.
  • ПолС namespace прСдписываСт kustomize’Ρƒ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ пространство ΠΈΠΌΠ΅Π½ ΠΊΠΎ всСм рСсурсам. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС, Deployment ΠΈ Service ΠΏΠΎΠΏΠ°Π΄ΡƒΡ‚ Π² пространство ΠΈΠΌΠ΅Π½ development.
  • НаконСц, ΠΏΠΎΠ»Π΅ commonLabels содСрТит Π½Π°Π±ΠΎΡ€ Π»Π΅ΠΉΠ±Π»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΊΠΎ всСм рСсурсам. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ kustomize присвоит рСсурсам ΠΌΠ΅Ρ‚ΠΊΡƒ с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ environment ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ development.

Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ kustomize build . Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ с Ρ„Π°ΠΉΠ»ΠΎΠΌ kustomization.yaml ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ рСсурсами (Ρ‚.Π΅. Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ deployment.yaml ΠΈ service.yaml), Ρ‚ΠΎ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ тСкст с измСнСниями, прописанными Π² kustomization.yaml.

ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Kustomize
ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².: Π˜Π»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΠΎ «простому» использованию kustomize

Π’Ρ‹Π²ΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ измСнСния:

kustomize build . > custom-config.yaml

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ (ΠΏΡ€ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Π²Ρ…ΠΎΠ΄Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅), поэтому ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Ρ„Π°ΠΉΠ». ВмСсто этого Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ сразу ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

kustomize build . | kubectl apply -f -

Доступ ΠΊ функциям kustomize Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· kubectl -k (начиная с вСрсии 1.14 Kubernetes). Однако ΠΈΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ kustomize быстрСС обновляСтся, Π½Π΅ΠΆΠ΅Π»ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² kubectl (ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ ΠΌΠ΅Ρ€Π΅, Ρ‚Π°ΠΊ обстоят Π΄Π΅Π»Π° с Ρ€Π΅Π»ΠΈΠ·ΠΎΠΌ Kubernetes 1.15).

Π§ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ: Β«Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹ всС эти слоТности, Ссли ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ?Β». ΠžΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ вопрос. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ deployment.yaml ΠΈ service.yaml Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Π½ΠΎ Ρ‡Ρ‚ΠΎ, Ссли ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ„ΠΎΡ€ΠΊΠΎΠΌ Ρ‡ΡŒΠ΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°? НСпосрСдствСнноС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² затрудняСт (Ссли Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ) rebase Ρ„ΠΎΡ€ΠΊΠ°, ΠΊΠΎΠ³Π΄Π° вносятся измСнСния Π² источник/исходник. ИспользованиС kustomize позволяСт Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти измСнСния Π² Ρ„Π°ΠΉΠ»Π΅ kustomization.yaml, оставив ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΌΠΈ ΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, облСгчая ΠΏΡ€ΠΈ нСобходимости rebase исходных Ρ„Π°ΠΉΠ»ΠΎΠ².

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° kustomize становятся ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌΠΈ Π² Π±ΠΎΠ»Π΅Π΅ слоТных случаях использования. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ kustomization.yaml ΠΈ рСсурсы находятся Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ. Однако kustomize ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ сцСнарии использования, ΠΊΠΎΠ³Π΄Π° Π΅ΡΡ‚ΡŒ базовая конфигурация ΠΈ мноТСство Π΅Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², Ρ‚Π°ΠΊΠΆΠ΅ извСстных ΠΊΠ°ΠΊ overlays. НапримСр, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π·Π°Ρ…ΠΎΡ‚Π΅Π» Π²Π·ΡΡ‚ΡŒ Deployment ΠΈ Service для nginx, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я использовал Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ development-, staging- ΠΈ production-вСрсии (ΠΈΠ»ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹) Ρ‚Π΅Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Для этого Π΅ΠΌΡƒ понадобятся упомянутыС Π²Ρ‹ΡˆΠ΅ overlays ΠΈ, собствСнно, сами Π±Π°Π·ΠΎΠ²Ρ‹Π΅ рСсурсы.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ идСю overlays ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… рСсурсов (base resources), ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ структуру:

- base
  - deployment.yaml
  - service.yaml
  - kustomization.yaml
- overlays
  - dev
    - kustomization.yaml
  - staging
    - kustomization.yaml
  - prod
    - kustomization.yaml

Π’ Ρ„Π°ΠΉΠ»Π΅ 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 сгСнСрируСт Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ development. Если ΠΆΠ΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ kustomize build . Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ overlays/prod β€” получится Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ production. И всС это β€” Π±Π΅Π· внСсСния ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ (base) Ρ„Π°ΠΉΠ»Ρ‹, ΠΈ всС это β€” Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΈ Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ способом. МоТно ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒ Π±Π°Π·ΠΎΠ²ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ΠΈ ΠΎΠ²Π΅Ρ€Π»Π΅ΠΉΠ½Ρ‹Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ прямо Π² систСму управлСния вСрсиями, зная, Ρ‡Ρ‚ΠΎ Π½Π° основС этих Ρ„Π°ΠΉΠ»ΠΎΠ² Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ воспроизвСсти Π½ΡƒΠΆΠ½ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ.

ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Kustomize
ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².: Π˜Π»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΠΎ использованию overlays Π² kustomize

Kustomize ΡƒΠΌΠ΅Π΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС, Ρ‡Π΅ΠΌ рассказано Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅. Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, надСюсь, ΠΎΠ½Π° послуТит Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ рСсурсы

Π•ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… статСй ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΉ ΠΎ kustomize. Π’ΠΎΡ‚ нСсколько, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я посчитал особо ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ:

ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².: Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΎΠ²Π΅Ρ‚ΠΎΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊ ссылок, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΊ Resources Π½Π° сайтС ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Π·Π° Π½ΠΈΠΌΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Π²ΠΈΠ΄Π΅ΠΎ с послСдними Π΄ΠΎΠΊΠ»Π°Π΄Π°ΠΌΠΈ ΠΏΡ€ΠΎ kustomize.

Если Ρƒ вас Π΅ΡΡ‚ΡŒ вопросы ΠΈΠ»ΠΈ прСдлоТСния ΠΏΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ этого ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°, я всСгда ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ ΠΊ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи. Π‘Π²ΡΠ·Π°Ρ‚ΡŒΡΡ со ΠΌΠ½ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π² Twitter ΠΈΠ»ΠΈ Π² Slack-ΠΊΠ°Π½Π°Π»Π΅ Kubernetes. ΠŸΠΎΠ»ΡƒΡ‡Π°ΠΉΡ‚Π΅ ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΠ΅, модифицируя свои манифСсты с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ kustomize!

P.S. ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°

Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π² нашСм Π±Π»ΠΎΠ³Π΅:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ