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 , som nyligen har blivit en del av K8s.

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 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 kustomize À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 ), men jag ger en kort förklaring av ett specifikt exempel:
- FĂ€ltet
resourcesanger vilka resurser som kustomize kommer att Àndra. I detta fall kommer den att leta efter resurser i filernadeployment.yamlochservice.yamli 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 attributetnameför alla resurser som definieras i fĂ€ltetresources. SĂ„ om det finns i Deploymentnamemed vĂ€rdetnginx-deployment, kommer kustomize att göra det tilldev-nginx-deployment. - FĂ€ltet
namnrymdfö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Ädetutveckling. - Slutligen, fÀltet
commonLabelsinnehÄ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 namnetmiljöoch vÀrdetutveckling.
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.

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.yamlUtdata À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.

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 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Ä eller i . 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
