ืžื‘ื•ื ืงืฆืจ ืœ-Kustomize

ื”ืขืจื”. ืชืจื’ื•ื: ื”ืžืืžืจ ื ื›ืชื‘ ืขืœ ื™ื“ื™ Scott Lowe, ืžื”ื ื“ืก ื‘ืขืœ ื ื™ืกื™ื•ืŸ ืจื‘ ื‘-IT, ืฉื”ื•ื ื”ืžื—ื‘ืจ/ื”ืฉื•ืชืฃ ืฉืœ ืฉื‘ืขื” ืกืคืจื™ื ืžื•ื“ืคืกื™ื (ื‘ืขื™ืงืจ ื‘-VMware vSphere). ื›ืขืช ื”ื•ื ืขื•ื‘ื“ ื‘ื—ื‘ืจืช ื”ื‘ืช ืฉืœื” VMware Heptio (ื ืจื›ืฉื” ื‘-2016), ื”ืžืชืžื—ื” ื‘ืžื—ืฉื•ื‘ ืขื ืŸ ื•ื‘-Kubernetes. ื”ื˜ืงืกื˜ ืขืฆืžื• ืžืฉืžืฉ ื›ื”ืงื“ืžื” ืชืžืฆื™ืชื™ืช ื•ืงืœ ืœื”ื‘ื ื” ืœื ื™ื”ื•ืœ ืชืฆื•ืจื” ืขื‘ื•ืจ Kubernetes ื‘ืืžืฆืขื•ืช ื˜ื›ื ื•ืœื•ื’ื™ื” ื”ืชืืžื” ืื™ืฉื™ืช, ืฉื”ืคืš ืœืื—ืจื•ื ื” ืœื—ืœืง ืž-K8s.

ืžื‘ื•ื ืงืฆืจ ืœ-Kustomize

Kustomize ื”ื•ื ื›ืœื™ ื”ืžืืคืฉืจ ืœืžืฉืชืžืฉื™ื "ืœื”ืชืื™ื ืื™ืฉื™ืช ืงื‘ืฆื™ YAML ืคืฉื•ื˜ื™ื ืœืœื ืชื‘ื ื™ื•ืช ืœืžื˜ืจื•ืช ืฉื•ื ื•ืช, ื•ืœื”ืฉืื™ืจ ืืช YAML ื”ืžืงื•ืจื™ ืฉืœื ื•ืฉืžื™ืฉ" (ืชื™ืื•ืจ ืžื•ืฉืืœ ื™ืฉื™ืจื•ืช ืž kustomize ืžืื’ืจ ื‘- GitHub). ื ื™ืชืŸ ืœื”ืคืขื™ืœ ืืช Kustomize ื™ืฉื™ืจื•ืช ืื•, ื”ื—ืœ ืž-Kubernetes 1.14, ืœื”ืฉืชืžืฉ ื‘ื• kubectl -k ื›ื“ื™ ืœื’ืฉืช ืœืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœื• (ืื ื›ื™ ื ื›ื•ืŸ ืœ-Kubernetes 1.15, ื”ื‘ื™ื ืืจื™ ื”ื ืคืจื“ ื—ื“ืฉ ื™ื•ืชืจ ืžื”ื™ื›ื•ืœื•ืช ื”ืžื•ื‘ื ื•ืช ื‘-kubectl). (ื”ืขืจื”. ืชืจื’ื•ื: ื•ืขื ื”ืฉื—ืจื•ืจ ื”ืื—ืจื•ืŸ ืงื•ื‘ืจื ื˜ืก 1.16 ืœื”ืกืชื›ืœ ื ืชืžืš ืขืœ ื™ื“ื™ ื’ื ื‘ื›ืœื™ ื”ืฉื™ืจื•ืช kubeadm.) ื‘ืคื•ืกื˜ ื–ื”, ืื ื™ ืจื•ืฆื” ืœื”ืฆื™ื’ ืœืงื•ืจืื™ื ืืช ื”ื™ืกื•ื“ื•ืช ืฉืœ kustomize.

ื‘ืฆื•ืจื”/ืืคืœื™ืงืฆื™ื” ื”ืคืฉื•ื˜ื” ื‘ื™ื•ืชืจ ืฉืœื”, kustomize ื”ื•ื ืคืฉื•ื˜ ืื•ืกืฃ ืฉืœ ืžืฉืื‘ื™ื (ืงื‘ืฆื™ YAML ื”ืžื’ื“ื™ืจื™ื ืื•ื‘ื™ื™ืงื˜ื™ื ืฉืœ Kubernetes: Deployments, Services ื•ื›ื•') ื‘ืชื•ืกืคืช ืจืฉื™ืžื” ืฉืœ ื”ื•ืจืื•ืช ืœืฉื™ื ื•ื™ื™ื ืฉื™ืฉ ืœื‘ืฆืข ื‘ืžืฉืื‘ื™ื ืืœื”. ื‘ื“ื™ื•ืง ื›ืคื™ ืฉ-make ืžืฉืชืžืฉ ื‘ืขืจื›ืช ื”ื”ื•ืจืื•ืช ื”ื›ืœื•ืœื” ื‘ Makefile, ื•-Docker ื‘ื•ื ื” ืืช ื”ืงื•ื ื˜ื™ื™ื ืจ ื‘ื”ืชื‘ืกืก ืขืœ ื”ื•ืจืื•ืช ืž Dockerfile, ื”ืชืืžื” ืื™ืฉื™ืช ืฉืœ ืฉื™ืžื•ืฉื™ื 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. ืœืคื™ื›ืš, ืื ืœืคืจื™ืกื” ื™ืฉ name ืขื ืžืฉืžืขื•ืช nginx-deployment, ื”ืชืืžื” ืื™ืฉื™ืช ืชืขืฉื” ืืช ื–ื” dev-nginx-deployment.
  • ืฉื“ื” namespace ืžื•ืจื” ืœ-kustomize ืœื”ื•ืกื™ืฃ ืืช ืžืจื—ื‘ ื”ืฉืžื•ืช ื”ื ืชื•ืŸ ืœื›ืœ ื”ืžืฉืื‘ื™ื. ื‘ืžืงืจื” ื–ื”, ืคืจื™ืกื” ื•ืฉื™ืจื•ืช ื™ื™ื›ื ืกื• ืœืžืจื—ื‘ ื”ืฉืžื•ืช 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 ื™ืฉื™ืจื•ืช, ืื‘ืœ ืžื” ืื ื”ื ืžื–ืœื’ ืฉืœ ืคืจื•ื™ืงื˜ ืฉืœ ืžื™ืฉื”ื• ืื—ืจ? ืฉื™ื ื•ื™ ืงื‘ืฆื™ื ื™ืฉื™ืจื•ืช ืžืงืฉื” (ืื ืœื ื‘ืœืชื™ ืืคืฉืจื™) ืœื‘ืฆืข ื‘ืกื™ืก ืžื—ื“ืฉ ืฉืœ ืžื–ืœื’ ื›ืืฉืจ ืžืชื‘ืฆืขื™ื ืฉื™ื ื•ื™ื™ื ื‘ืžืงื•ืจ/ืžืงื•ืจ. ืฉื™ืžื•ืฉ ื‘-kustomize ืžืืคืฉืจ ืœืจื›ื– ืืช ื”ืฉื™ื ื•ื™ื™ื ื”ืœืœื• ื‘ืงื•ื‘ืฅ kustomization.yaml, ืžืฉืื™ืจื™ื ืืช ื”ืงื‘ืฆื™ื ื”ืžืงื•ืจื™ื™ื ืฉืœืžื™ื ื•ื‘ื›ืš ืžืงืœื™ื ืขืœ ื‘ืกื™ืก ืžื—ื“ืฉ ืฉืœ ื”ืงื‘ืฆื™ื ื”ืžืงื•ืจื™ื™ื ื‘ืžื™ื“ืช ื”ืฆื•ืจืš.

ื”ื™ืชืจื•ื ื•ืช ืฉืœ kustomize ืžืชื’ืœื™ื ื‘ืžืงืจื™ื ืฉื™ืžื•ืฉ ืžื•ืจื›ื‘ื™ื ื™ื•ืชืจ. ื‘ื“ื•ื’ืžื” ืœืขื™ืœ kustomization.yaml ื•ื”ืžืฉืื‘ื™ื ื ืžืฆืื™ื ื‘ืื•ืชื” ืกืคืจื™ื™ื”. ืขื ื–ืืช, kustomize ืชื•ืžืš ื‘ืžืงืจื™ื ืฉื‘ื”ื ื™ืฉ ืชืฆื•ืจืช ื‘ืกื™ืก ื•ื’ืจืกืื•ืช ืจื‘ื•ืช ืฉืœื”, ื”ื™ื“ื•ืข ื’ื ื‘ืฉื ืฉื›ื‘ื•ืช-ืขืœ. ืœื“ื•ื’ืžื”, ืžืฉืชืžืฉ ืจืฆื” ืœืงื—ืช Deployment and Service ืขื‘ื•ืจ nginx, ืฉื”ืฉืชืžืฉืชื™ ื‘ื• ื›ื“ื•ื’ืžื”, ื•ืœื™ืฆื•ืจ ื’ืจืกืื•ืช ืคื™ืชื•ื—, ื”ื™ืขืจื›ื•ืช ื•ื”ืคืงื” (ืื• ื’ืจืกืื•ืช) ืฉืœ ื”ืงื‘ืฆื™ื ื”ืœืœื•. ืœืฉื ื›ืš ื”ื•ื ื™ื–ื“ืงืง ืœืฉื›ื‘ื•ืช ื”ืืžื•ืจื•ืช ืœืขื™ืœ ื•ืœืžืขืฉื” ืœืžืฉืื‘ื™ื ื”ื‘ืกื™ืกื™ื™ื ืขืฆืžื.

ื›ื“ื™ ืœื”ืžื—ื™ืฉ ืืช ื”ืจืขื™ื•ืŸ ืฉืœ ืฉื›ื‘ื•ืช-ืขืœ ื•ืžืฉืื‘ื™ื ื‘ืกื™ืกื™ื™ื (ืžืฉืื‘ื™ ื‘ืกื™ืก), ื ื ื™ื— ืฉืœืกืคืจื™ื•ืช ื™ืฉ ืืช ื”ืžื‘ื ื” ื”ื‘ื:

- 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 ืชื™ื™ืฆืจ ืืช ืืคืฉืจื•ืช ื”ืคื™ืชื•ื—. ืื ืืชื” ืจืฅ kustomize build . ื‘ืงื˜ืœื•ื’ overlays/prod - ืืชื” ืžืงื‘ืœ ืืช ืืคืฉืจื•ืช ื”ื™ื™ืฆื•ืจ. ื•ื›ืœ ื–ื” - ืžื‘ืœื™ ืœื‘ืฆืข ืฉื™ื ื•ื™ื™ื ื‘ืžืงื•ืจ (ื‘ืกื™ืก) ืงื‘ืฆื™ื, ื”ื›ืœ ื‘ืฆื•ืจื” ื”ืฆื”ืจืชื™ืช ื•ื“ื˜ืจืžื™ื ื™ืกื˜ื™ืช. ืืชื” ื™ื›ื•ืœ ืœื‘ืฆืข ืืช ื”ืชืฆื•ืจื” ื”ื‘ืกื™ืกื™ืช ื•ืืช ืกืคืจื™ื•ืช ืฉื›ื‘ืช ื”ืขืœ ื™ืฉื™ืจื•ืช ืœื‘ืงืจืช ื’ืจืกืื•ืช, ื‘ื™ื“ื™ืขื” ืฉื‘ื”ืชื‘ืกืก ืขืœ ืงื‘ืฆื™ื ืืœื” ืืชื” ื™ื›ื•ืœ ืœืฉื—ื–ืจ ืืช ื”ืชืฆื•ืจื” ื”ืจืฆื•ื™ื” ื‘ื›ืœ ืขืช.

ืžื‘ื•ื ืงืฆืจ ืœ-Kustomize
ื”ืขืจื”. ืชืจื’ื•ื: ืื™ื•ืจ ืžืชื™ืขื•ื“ ื”ืคืจื•ื™ืงื˜ ืขืœ ืฉื™ืžื•ืฉ ื‘ืฉื›ื‘ื•ืช-ืขืœ ื‘-kustomize

ื”ืชืืžื” ืื™ืฉื™ืช ืฉืœ ืคื—ื™ืช ื”ืจื‘ื” ื™ื•ืชืจ ืžืžื” ืฉืžื›ื•ืกื” ื‘ืžืืžืจ ื–ื”. ืขื ื–ืืช, ืื ื™ ืžืงื•ื•ื” ืฉื–ื” ื™ืฉืžืฉ ื›ื”ืงื“ืžื” ื˜ื•ื‘ื”.

ืžืฉืื‘ื™ื ื ื•ืกืคื™ื

ื™ืฉ ื”ืจื‘ื” ืžืืžืจื™ื ื•ืคืจืกื•ืžื™ื ื˜ื•ื‘ื™ื ืขืœ kustomize. ื”ื ื” ื›ืžื” ืฉืžืฆืืชื™ ืฉื™ืžื•ืฉื™ื™ื ื‘ืžื™ื•ื—ื“:

ื”ืขืจื”. ืชืจื’ื•ื: ืืชื” ื™ื›ื•ืœ ื’ื ืœื”ืžืœื™ืฅ โ€‹โ€‹ืขืœ ื‘ืœื•ืง ืงื™ืฉื•ืจื™ื ืฉืคื•ืจืกื ื‘ืฉื ืžืฉืื‘ื™ื ื‘ืืชืจ ื”ืื™ื ื˜ืจื ื˜ ืฉืœ ื”ืฉื™ืจื•ืช, ื•ืื—ืจื™ื• ืื•ืกืฃ ืฉืœ ืกืจื˜ื•ื ื™ื ืขื ื”ื“ื™ื•ื•ื—ื™ื ื”ืื—ืจื•ื ื™ื ืขืœ kustomize.

ืื ื™ืฉ ืœืš ืฉืืœื•ืช ืื• ื”ืฆืขื•ืช ืœืฉื™ืคื•ืจ ื”ื—ื•ืžืจ ื”ื–ื”, ืื ื™ ืชืžื™ื“ ืคืชื•ื— ืœืžืฉื•ื‘. ื ื™ืชืŸ ืœื™ืฆื•ืจ ืื™ืชื™ ืงืฉืจ ื‘ ื˜ื•ื™ื˜ืจ ืื• ืขืจื•ืฅ Kubernetes Slack. ืชื”ื ื” ืœืฉื ื•ืช ืืช ื”ืžื ื™ืคืกื˜ื™ื ืฉืœืš ืขื kustomize!

ื .ื‘ ืžื”ืžืชืจื’ื

ืงืจื ื’ื ื‘ื‘ืœื•ื’ ืฉืœื ื•:

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”