Isang Maikling Panimula sa Kustomize

Tandaan. transl.: Ang artikulo ay isinulat ni Scott Lowe, isang inhinyero na may malawak na karanasan sa IT, na siyang may-akda/katuwang may-akda ng pitong naka-print na aklat (pangunahin sa VMware vSphere). Nagtatrabaho na siya ngayon para sa subsidiary nitong VMware na Heptio (nakuha noong 2016), na dalubhasa sa cloud computing at Kubernetes. Ang teksto mismo ay nagsisilbing isang maigsi at madaling maunawaan na panimula sa pamamahala ng pagsasaayos para sa Kubernetes gamit ang teknolohiya I-customize, na kamakailan ay naging bahagi ng K8s.

Isang Maikling Panimula sa Kustomize

Ang Kustomize ay isang tool na nagbibigay-daan sa mga user na "i-customize ang simple, walang template na mga YAML file para sa iba't ibang layunin, na iniiwan ang orihinal na YAML na buo at magagamit" (deskripsyon na hiniram nang direkta mula sa customize repository sa GitHub). Maaaring direktang patakbuhin ang Kustomize o, sa paggamit ng Kubernetes 1.14 kubectl -k upang ma-access ang functionality nito (bagaman sa Kubernetes 1.15, ang hiwalay na binary ay mas bago kaysa sa mga kakayahan na binuo sa kubectl). (Tandaan. transl.: At sa kamakailang paglabas Kubernetes 1.16 i-customize suportado ng din sa kubeadm utility.) Sa post na ito, gusto kong ipakilala sa mga mambabasa ang mga pangunahing kaalaman sa kustomize.

Sa pinakasimpleng anyo/application nito, ang kustomize ay isang koleksyon lamang ng mga mapagkukunan (YAML file na tumutukoy sa mga bagay ng Kubernetes: Mga Deployment, Mga Serbisyo, atbp.) at isang listahan ng mga tagubilin para sa mga pagbabagong kailangang gawin sa mga mapagkukunang iyon. Tulad ng paggamit ng make sa set ng pagtuturo na nakapaloob sa Makefile, at binubuo ng Docker ang lalagyan batay sa mga tagubilin mula sa Dockerfile, i-customize ang mga gamit kustomization.yaml upang mag-imbak ng mga tagubilin tungkol sa kung anong mga pagbabago ang gustong gawin ng user sa isang hanay ng mga mapagkukunan.

Narito ang isang halimbawang file kustomization.yaml:

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

Hindi ko susubukan na pag-usapan ang lahat ng posibleng mga field sa file. kustomization.yaml (ito ay mahusay na isinulat tungkol sa dito), ngunit magbibigay ako ng maikling paliwanag ng isang partikular na halimbawa:

  • Field resources ay nagpapahiwatig kung ano ang (aling mga mapagkukunan) ang customize ay magbabago. Sa kasong ito, maghahanap ito ng mga mapagkukunan sa mga file deployment.yaml ΠΈ service.yaml sa iyong direktoryo (maaari mong tukuyin ang buo o kamag-anak na mga landas kung kinakailangan).
  • Field namePrefix nagtuturo sa kustomize na magdagdag ng isang tiyak na prefix (sa kasong ito - dev-) upang ipatungkol name lahat ng mga mapagkukunan na tinukoy sa larangan resources. Kaya, kung mayroon ang Deployment name may kahulugan nginx-deployment, gagawin ito ng customize dev-nginx-deployment.
  • Field namespace nagtuturo sa kustomize na idagdag ang ibinigay na namespace sa lahat ng mapagkukunan. Sa kasong ito, mahuhulog ang Deployment at Serbisyo sa namespace development.
  • Sa wakas, ang field commonLabels naglalaman ng isang hanay ng mga label na idaragdag sa lahat ng mapagkukunan. Sa aming halimbawa, ang kustomize ay magtatalaga ng isang label sa mga mapagkukunan na may pangalan environment at kahulugan development.

Kung gagawin ng gumagamit kustomize build . sa direktoryo na may file kustomization.yaml at ang mga kinakailangang mapagkukunan (ibig sabihin, mga file deployment.yaml ΠΈ service.yaml), pagkatapos ay sa output ay makakatanggap ito ng isang teksto na may mga pagbabagong tinukoy sa kustomization.yaml.

Isang Maikling Panimula sa Kustomize
Tandaan. transl.: Ilustrasyon mula sa dokumentasyon ng proyekto sa "simpleng" paggamit ng kustomize

Maaaring i-redirect ang output kung kailangang gawin ang mga pagbabago:

kustomize build . > custom-config.yaml

Ang output data ay deterministic (ang parehong input data ay magbubunga ng parehong mga resulta ng output), kaya hindi mo kailangang i-save ang resulta sa isang file. Sa halip, maaari itong maipasa nang direkta sa isa pang utos:

kustomize build . | kubectl apply -f -

Ang mga tampok na customize ay maaari ding ma-access sa pamamagitan ng kubectl -k (mula noong bersyon 1.14 ng Kubernetes). Gayunpaman, tandaan na ang standalone na customize package ay na-update nang mas mabilis kaysa sa pinagsamang kubectl package (kahit ito ang kaso sa paglabas ng Kubernetes 1.15).

Maaaring itanong ng mga mambabasa: "Bakit lahat ng kumplikadong ito kung maaari mong direktang i-edit ang mga file?" Mahusay na tanong. Sa aming halimbawa, talaga maaari baguhin ang mga file deployment.yaml ΠΈ service.yaml direkta, ngunit paano kung sila ay isang tinidor ng proyekto ng ibang tao? Ang direktang pagbabago ng mga file ay nagpapahirap (kung hindi imposible) na i-rebase ang isang tinidor kapag ang mga pagbabago ay ginawa sa pinagmulan/pinagmulan. Ang paggamit ng kustomize ay nagbibigay-daan sa iyong isentralisa ang mga pagbabagong ito sa isang file kustomization.yaml, na iniiwan ang orihinal na mga file na buo at sa gayon ay ginagawang mas madaling i-rebase ang mga orihinal na file kung kinakailangan.

Ang mga benepisyo ng kustomize ay nagiging maliwanag sa mas kumplikadong mga kaso ng paggamit. Sa halimbawa sa itaas kustomization.yaml at ang mga mapagkukunan ay nasa parehong direktoryo. Gayunpaman, sinusuportahan ng kustomize ang mga kaso ng paggamit kung saan mayroong base configuration at maraming variant nito, na kilala rin bilang mga overlay. Halimbawa, nais ng isang user na kunin ang Deployment at Serbisyo para sa nginx, na ginamit ko bilang isang halimbawa, at lumikha ng mga bersyon ng pag-unlad, pagtatanghal ng dula at produksyon (o mga variant) ng mga file na iyon. Upang gawin ito, kakailanganin niya ang mga nabanggit na overlay at, sa katunayan, ang mga pangunahing mapagkukunan mismo.

Upang ilarawan ang ideya ng mga overlay at pinagbabatayan na mapagkukunan (base resources), ipagpalagay natin na ang mga direktoryo ay may sumusunod na istraktura:

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

Nasa file base/kustomization.yaml gumagamit gamit ang field resources ideklara lang ang mga mapagkukunang dapat isama ng kustomize.

Sa bawat isa sa mga file overlays/{dev,staging,prod}/kustomization.yaml tinutukoy ng mga user ang base configuration sa field resources, at pagkatapos ay ipahiwatig ang mga partikular na pagbabago para sa ibinigay na kapaligiran. Halimbawa, file overlays/dev/kustomization.yaml maaaring magmukhang katulad ng halimbawang ibinigay kanina:

resources:
- ../../base
namePrefix: dev-
namespace: development
commonLabels:
  environment: development

Sa kasong ito, ang file overlays/prod/kustomization.yaml maaaring ganap na naiiba:

resources:
- ../../base
namePrefix: prod-
namespace: production
commonLabels:
  environment: production
  sre-team: blue

Kapag tumakbo ang gumagamit kustomize build . sa catalog overlays/dev, bubuo ng customize ang opsyon sa pag-develop. Kung tatakbo ka kustomize build . sa catalog overlays/prod - makukuha mo ang opsyon sa produksyon. At lahat ng ito - nang hindi gumagawa ng anumang mga pagbabago sa orihinal (base) mga file, lahat sa isang deklaratibo at deterministikong paraan. Maaari mong i-commit ang base configuration at overlay na mga direktoryo nang direkta sa version control, alam na batay sa mga file na ito maaari mong kopyahin ang nais na configuration anumang oras.

Isang Maikling Panimula sa Kustomize
Tandaan. transl.: Ilustrasyon mula sa dokumentasyon ng proyekto sa paggamit ng mga overlay sa kustomize

I-customize ang maaari marami higit pa sa tinatalakay sa artikulong ito. Gayunpaman, umaasa ako na ito ay nagsisilbing isang magandang panimula.

Karagdagang Mga Mapagkukunan

Maraming magagandang artikulo at publikasyon tungkol sa kustomize. Narito ang ilan na nakita kong partikular na kapaki-pakinabang:

Tandaan. transl.: Maaari ka ring magrekomenda ng isang bloke ng mga link na nai-publish bilang Mga mapagkukunan sa website ng utility, na sinusundan ng isang koleksyon ng mga video na may pinakabagong mga ulat tungkol sa kustomize.

Kung mayroon kang mga tanong o mungkahi para sa pagpapabuti ng materyal na ito, palagi akong bukas sa feedback. Maaari mo akong kontakin sa kaba o Kubernetes Slack channel. Magsaya sa pagbabago ng iyong mga manifest gamit ang kustomize!

PS mula sa tagasalin

Basahin din sa aming blog:

Pinagmulan: www.habr.com

Magdagdag ng komento