En kort introduktion till Kustomize

Obs. övers.: Artikeln Ă€r skriven av Scott Lowe — en erfaren ingenjör inom IT, som Ă€r författare eller medförfattare till sju tryckta böcker (för det mesta om VMware vSphere). Han arbetar nu pĂ„ dess dotterbolag VMware — Heptio (förvĂ€rvat 2016), med fokus pĂ„ molnberĂ€kningar och Kubernetes. Texten utgör en kort och lĂ€ttförstĂ„elig introduktion till konfigurationshantering för Kubernetes med hjĂ€lp av tekniken Kustomize, som nyligen har blivit en del av K8s.

En kort introduktion till Kustomize

Kustomize Àr ett verktyg som lÄter anvÀndare "anpassa enkla och mallfria YAML-filer för olika ÀndamÄl, medan original-YAML förblir oförÀndrat och anvÀndbart" (beskrivningen Àr direkt lÄnad frÄn kustomize-repositoriet pÄ GitHub). Kustomize kan anropas direkt eller, frÄn och med Kubernetes 1.14, anvÀndas med kubectl -k för att fÄ Ätkomst till dess funktioner (Àven om i Kubernetes 1.15 en separat binÀr Àr nyare Àn funktionerna inbyggda i kubectl). (Obs. övers.: Med den senaste versionen av Kubernetes 1.16 kustomize endast manuellt via lÀget «about:debugging» och krÀver tillÀmpning av en patch. Àven i kubeadm-verktyget.) I denna publikation vill jag introducera lÀsarna till grunderna i kustomize.

I sin enklaste form/anvÀndning Àr kustomize helt enkelt en uppsÀttning resurser (YAML-filer som definierar Kubernetes-objekt: Deployments, Services etc.) plus en lista med instruktioner om vilka Àndringar som ska göras i dessa resurser. PÄ samma sÀtt som make anvÀnder en uppsÀttning instruktioner som finns i Makefile, och Docker bygger en container baserat pÄ instruktioner frÄn Dockerfile, anvÀnder kustomize kustomization.yaml för att lagra föreskrifter om vilka Àndringar anvÀndaren vill göra i uppsÀttningen resurser.

HÀr Àr ett exempel pÄ en fil kustomization.yaml:

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

Jag kommer inte att försöka berÀtta om alla möjliga fÀlt i filen kustomization.yaml (detta har skrivits bra om hÀr), men jag ger en kort förklaring av ett specifikt exempel:

  • FĂ€ltet resources anger vilka resurser som kustomize kommer att Ă€ndra. I detta fall kommer den att leta efter resurser i filerna deployment.yaml och service.yaml i sin katalog (vĂ€gar kan anges som fullstĂ€ndiga eller relativa vid behov).
  • FĂ€ltet namePrefix Ă„lĂ€gger kustomize att lĂ€gga till ett visst prefix (i detta fall — dev-) till attributet name för alla resurser som definieras i fĂ€ltet resources. SĂ„ om det finns i Deployment name med vĂ€rdet nginx-deployment, kommer kustomize att göra det till dev-nginx-deployment.
  • FĂ€ltet namnrymd föreskriver att kustomize ska lĂ€gga till det angivna namnomrĂ„det till alla resurser. I det hĂ€r fallet kommer Deployment och Service att hamna i namnomrĂ„det utveckling.
  • Slutligen, 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 resurserna en etikett med namnet miljö och vĂ€rdet utveckling.

Om anvÀndaren kör kustomize build . i katalogen med filen kustomization.yaml och nödvÀndiga resurser (dvs. filer deployment.yaml och service.yaml), sÄ fÄr han text med Àndringarna angivna i kustomization.yaml.

En kort introduktion till Kustomize
Obs. övers.: En illustration frÄn projektets dokumentation om "enkel" anvÀndning av kustomize

Utdata kan omdirigeras om det Àr nödvÀndigt att spara Àndringarna:

kustomize build . > custom-config.yaml

Utdata Àr deterministisk (om samma data matas in kommer samma resultat att genereras), sÄ det Àr inte nödvÀndigt att spara resultatet i en fil. IstÀllet kan det direkt överföras till ett annat kommando:

kustomize build . | kubectl apply -f -

TillgÄng till kustomize-funktioner kan ocksÄ fÄs genom kubectl -k (frÄn och med version 1.14 av Kubernetes). TÀnk pÄ att det fristÄende paketet kustomize uppdateras snabbare Àn det som Àr integrerat i kubectl (Ätminstone sÄ Àr det fallet med Kubernetes version 1.15).

LÀsare kan frÄga: "Varför behövs alla dessa komplicerade saker, om man kan redigera filerna direkt?". Bra frÄga. I vÄrt exempel skulle det faktiskt kan modifiera filerna deployment.yaml och service.yaml direkt, men vad hÀnder om de Àr en fork av nÄgon annans projekt? Att direkt Àndra filerna komplicerar (om inte gör det omöjligt) rebase av forken, nÀr Àndringar görs i kÀllan. AnvÀndning av kustomize möjliggör centralisering av dessa Àndringar i filen kustomization.yaml, vilket lÀmnar originalfilerna oförÀndrade och dÀrmed underlÀttar rebase av de ursprungliga filerna vid behov.

Fördelarna med kustomize blir uppenbara i mer komplexa anvÀndningsfall. I det tidigare exemplet kustomization.yaml och resurserna ligger i samma katalog. Men kustomize stödjer anvÀndningsscenarier dÀr det finns en grundkonfiguration och mÄnga varianter av den, Àven kÀnda som överlagringar. Till exempel ville anvÀndaren ta Deployment och Service för nginx, som jag anvÀnde som exempel, och skapa utvecklings-, staging- och produktionsversioner (eller varianter) av de filerna. För detta kommer han att behöva de ovannÀmnda overlays och sjÀlva basresurserna.

För att illustrera idén med overlays och basresurser (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 filen base/kustomization.yaml anvÀndare med hjÀlp av fÀltet resources deklarerar bara de resurser som kustomize ska inkludera.

I varje av filerna overlays/{dev,staging,prod}/kustomization.yaml refererar anvÀndare till den grundlÀggande konfigurationen i fÀltet resources, och anger sedan specifika Àndringar för denna miljö. Till exempel kan filen overlays/dev/kustomization.yaml se ut som exemplet som angavs tidigare:

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

Samtidigt kan filen overlays/prod/kustomization.yaml 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 en utvecklingsvariant. Om du kör kustomize build . i katalogen overlays/prod — fĂ„r du en produktionsvariant. Och allt detta — utan att göra nĂ„gra Ă€ndringar i de ursprungliga (bas) filer, och allt detta — pĂ„ ett deklarativt och deterministiskt sĂ€tt. Du kan committa den grundlĂ€ggande konfigurationen och overlay-katalogerna direkt till versionshanteringssystemet, vĂ€l medveten om att baserat pĂ„ dessa filer kan den nödvĂ€ndiga konfigurationen nĂ€r som helst Ă„terskapas.

En kort introduktion till Kustomize
Obs. övers.: Illustration frÄn projektets dokumentation om anvÀndning av overlays i kustomize.

Kustomize kan mycket mer Àn vad som beskrivs i denna artikel. Jag hoppas dock att den hÀr artikeln kommer att fungera 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:

Obs. övers.: Det kan ocksÄ rekommenderas att lÀsa lÀnkavsnittet som publicerades som Resurser pÄ verktygets webbplats, och den efterföljande samlingen av videor med de senaste förelÀsningarna om kustomize.

Om du har frÄgor eller förslag pÄ förbÀttringar av detta material Àr jag alltid öppen för feedback. Du kan kontakta mig pÄ Twitter eller i Slack-kanalen Kubernetes. Njut av att modifiera dina manifest med Kustomize!

P.S. frÄn översÀttaren

LÀs Àven i vÄr blogg:

KĂ€lla: habr.com

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