En kort introduktion till Kustomize

Notera. transl.: Artikeln skrevs av Scott Lowe, en ingenjör med lÄng erfarenhet av IT, som Àr författare/medförfattare till sju tryckta böcker (frÀmst pÄ VMware vSphere). Han arbetar nu för dess VMware-dotterbolag Heptio (förvÀrvade 2016), specialiserat pÄ cloud computing och Kubernetes. Texten i sig fungerar som en kortfattad och lÀttförstÄelig introduktion till konfigurationshantering för Kubernetes med hjÀlp av teknik Anpassa, som nyligen blev en del av K8s.

En kort introduktion till Kustomize

Kustomize Àr ett verktyg som gör det möjligt för anvÀndare att "anpassa enkla, mallfria YAML-filer för olika ÀndamÄl, och lÀmna den ursprungliga YAML intakt och anvÀndbar" (beskrivning lÄnad direkt frÄn kustomisera repository pÄ GitHub). Kustomize kan köras direkt eller, frÄn och med Kubernetes 1.14, anvÀndas kubectl -k för att komma Ät dess funktionalitet (Àven om frÄn och med Kubernetes 1.15 Àr den separata binÀren nyare Àn de funktioner som Àr inbyggda i kubectl). (Notera. transl.: Och med den senaste releasen Kubernetes 1.16 anpassa stöds av Àven i kubeadm-verktyget.) I det hÀr inlÀgget vill jag introducera lÀsarna till grunderna i kustomize.

I sin enklaste form/applikation Àr kustomize helt enkelt en samling resurser (YAML-filer som definierar Kubernetes-objekt: Deployments, Services, etc.) plus en lista med instruktioner för Àndringar som mÄste göras i dessa resurser. Precis som make anvÀnder instruktionsuppsÀttningen som finns i Makefile, och Docker bygger behÄllaren baserat pÄ instruktioner frÄn Dockerfile,anpassa anvÀndningsomrÄden kustomization.yaml för att lagra instruktioner om vilka Àndringar anvÀndaren vill göra i en uppsÀttning resurser.

HÀr Àr en exempelfil kustomization.yaml:

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

Jag ska inte försöka prata om alla möjliga fÀlt i filen. kustomization.yaml (det hÀr Àr vÀlskrivet om hÀr), men jag kommer att ge en kort förklaring av ett specifikt exempel:

  • FĂ€lt resources indikerar vad (vilka resurser) kustomize kommer att förĂ€ndras. I det hĂ€r fallet kommer den att leta efter resurser i filer deployment.yaml Đž service.yaml i din katalog (du kan ange fullstĂ€ndiga eller relativa sökvĂ€gar om det behövs).
  • FĂ€lt namePrefix instruerar kustomize att lĂ€gga till ett visst prefix (i det hĂ€r fallet - dev-) att tillskriva name alla resurser definierade i fĂ€ltet resources. SĂ„ledes, om Deployment har name med mening nginx-deployment, anpassa kommer att göra det dev-nginx-deployment.
  • FĂ€lt namespace instruerar kustomize att lĂ€gga till det givna namnomrĂ„det till alla resurser. I det hĂ€r fallet faller Deployment and Service in i namnomrĂ„det development.
  • Äntligen fĂ€ltet commonLabels innehĂ„ller en uppsĂ€ttning etiketter som kommer att lĂ€ggas till alla resurser. I vĂ„rt exempel kommer kustomize att tilldela en etikett till resurserna med namnet environment och mening development.

Om anvÀndaren gör det kustomize build . i katalogen med filen kustomization.yaml och nödvÀndiga resurser (d.v.s. filer deployment.yaml О service.yaml), dÄ kommer den att ta emot en text med de Àndringar som anges i kustomization.yaml.

En kort introduktion till Kustomize
Notera. transl.: Illustration frÄn projektdokumentationen om den "enkla" anvÀndningen av kustomize

UtgÄngen kan omdirigeras om Àndringar behöver genomföras:

kustomize build . > custom-config.yaml

Utdata Àr deterministiska (samma indata ger samma utdata), sÄ du behöver inte spara resultatet i en fil. IstÀllet kan det skickas direkt till ett annat kommando:

kustomize build . | kubectl apply -f -

Kutomize-funktionerna kan ocksÄ nÄs via kubectl -k (sedan Kubernetes version 1.14). Kom dock ihÄg att det fristÄende kustomize-paketet uppdateras snabbare Àn det integrerade kubectl-paketet (Ätminstone Àr det fallet med Kubernetes 1.15-utgÄvan).

LÀsare kan frÄga sig: "Varför all denna komplexitet om du kan redigera filerna direkt?" Bra frÄga. I vÄrt exempel, faktiskt kan man Àndra filer deployment.yaml О service.yaml direkt, men vad hÀnder om de Àr en gaffel av nÄgon annans projekt? Att Àndra filer direkt gör det svÄrt (om inte omöjligt) att basera om en gaffel nÀr Àndringar görs i ursprunget/kÀllan. Genom att anvÀnda kustomize kan du centralisera dessa Àndringar i en fil kustomization.yaml, lÀmnar originalfilerna intakta och gör det enklare att basera om originalfilerna om det behövs.

Fördelarna med kustomize blir uppenbara i mer komplexa anvÀndningsfall. I exemplet ovan kustomization.yaml och resurserna finns i samma katalog. Emellertid stöder kustomize anvÀndningsfall dÀr det finns en baskonfiguration och mÄnga varianter av den, Àven kÀnd som överlag. Till exempel ville en anvÀndare ta Deployment and Service för nginx, som jag anvÀnde som exempel, och skapa utvecklings-, iscensÀttnings- och produktionsversioner (eller varianter) av dessa filer. För att göra detta kommer han att behöva de ovan nÀmnda överlÀggen och faktiskt sjÀlva de grundlÀggande resurserna.

För att illustrera idén med överlÀgg och underliggande resurser (basresurser), lÄt oss anta att katalogerna har följande struktur:

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

I fil base/kustomization.yaml anvÀndare som anvÀnder fÀltet resources deklarera helt enkelt vilka resurser som kustomize ska inkludera.

I var och en av filerna overlays/{dev,staging,prod}/kustomization.yaml anvÀndare hÀnvisar till baskonfigurationen i fÀltet resources, och ange sedan specifika Àndringar för given miljö. Till exempel fil overlays/dev/kustomization.yaml kan se ut som exemplet tidigare:

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

I det hÀr fallet filen overlays/prod/kustomization.yaml kan vara helt annorlunda:

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

NÀr anvÀndaren kör kustomize build . i katalogen overlays/dev, kommer kustomize att generera utvecklingsalternativet. Om du springer kustomize build . i katalogen overlays/prod - du fÄr produktionsalternativet. Och allt detta - utan att göra nÄgra Àndringar i originalet (bas) filer, allt pÄ ett deklarativt och deterministiskt sÀtt. Du kan överföra baskonfigurationen och överlÀggskatalogerna direkt till versionskontroll, med vetskapen om att du kan Äterskapa den önskade konfigurationen nÀr som helst baserat pÄ dessa filer.

En kort introduktion till Kustomize
Notera. transl.: Illustration frÄn projektdokumentationen om anvÀndning av överlÀgg i kustomize

Anpassa burken mycket mer Àn vad som tas upp i den hÀr artikeln. Jag hoppas dock att det fungerar som en bra introduktion.

Ytterligare resurser

Det finns mÄnga bra artiklar och publikationer om kustomize. HÀr Àr nÄgra som jag tyckte var sÀrskilt anvÀndbara:

Notera. transl.: Du kan ocksÄ rekommendera ett block med lÀnkar publicerade som Resurser pÄ verktygets webbplats, följt av en samling videor med de senaste rapporterna om kustomize.

Om du har frÄgor eller förslag för att förbÀttra detta material Àr jag alltid öppen för feedback. Du kan kontakta mig pÄ Twitter eller Kubernetes Slack-kanal. Ha kul med att modifiera dina manifest med kustomize!

PS frÄn översÀttaren

LÀs Àven pÄ vÄr blogg:

KĂ€lla: will.com

Köp pĂ„litlig hosting för webbplatser med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster