Úvod
Kubernetes nativně nabízí základní nástroje nezbytné pro správu nasazení aplikací. I když je použití nezpracovaných manifestů YAML přímočarý proces, vývoj v prostředí mikroslužeb se rychle vymkne kontrole s počtem nasazení nezbytných k podpoře celého systému.
Tento článek porovnává dva oblíbené nástroje, jejichž cílem je zjednodušit správu nasazení aplikací – Helm a Kustomize.
Kormidlo:Klíčové vlastnosti
Helm je správce balíčků pro Kubernetes. Pomáhá při instalaci a správě aplikací Kubernetes tím, že využívá grafy kormidla, balíčky obsahující soubory YAML upravené pomocí jazyka šablon Go a funkce šablon z knihovny Sprig.
Využitím šablon a dynamických hodnot Helm nabízí možnost vyladit konfiguraci během životního cyklu vývoje softwaru.
S uvedením Helm 3 přestal Helm záviset na Tilleru při generování dynamického konfiguračního souboru. To eliminuje jeden z hlavních bezpečnostních problémů Helm 2 – široká oprávnění, která jsou standardně udělována všem s přístupem k Tilleru. Helm nyní obsahuje komponenty správy privilegovaného přístupu s Role-Based Access Control (RBAC) a Custom Resource Definitions (CRD).
Další užitečnou vlastností Helm šablony je zapouzdření. Definice YAML objektů Kubernetes, jako je Deployment, Service, ConfigMap nebo Kubernetes Secret, lze zapouzdřit do jediné šablony. Tato vlastnost je užitečná pro konfiguraci v době nasazení.
Jednoduchý graf kormidla se skládá z:
- A Chart.yaml soubor, který deklaruje graf.
- A values.yaml soubor, který obsahuje parametry grafu pro použití se šablonami.
- Adresář šablon obsahující soubory šablon pro vytváření obsahu grafu.
Soubor šablony má strukturu souboru YAML, ale obsahuje také proměnné šablony, které jsou při nasazení nahrazeny hodnotami uvedenými v souboru values.yaml soubor.
To je obsah typického souboru deployment.yaml vypadat takto:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Values.test }}
labels:
app: {{ .Values.test }}
spec:
selector:
matchLabels:
app: {{ .Values.test }}
template:
metadata:
labels:
app: {{ .Values.test }}
tier: web
spec:
containers:
- name: {{ .Values.test }}
image: {{ .Values.test }}
ports:
- containerPort: 8080
Ve výše uvedeném příkladu se Helm podívá do values.yaml soubor pro hodnotu test
variabilní. Relevantní values.yaml soubor obsahuje definici proměnné:
test: default
Na základě values.yaml Definice, Helm sestaví následující deployment.yaml soubor:
apiVersion: apps/v1
kind: Deployment
metadata:
name: default
labels:
app: default
spec:
selector:
matchLabels:
app: default
template:
metadata:
labels:
app: default
tier: web
spec:
containers:
- name: default
image: default
ports:
- containerPort: 8080
Helm nabízí možnost přepsat hodnoty v values.yaml pomocí --set
příznak při vydávání příkazů sestavení v CLI.
Zahrnuje také helm lint
příkaz, který prozkoumá problémy v grafu a ověří, že byl navržen podle standardů.
Přizpůsobení:Klíčové funkce
Kustomize je nástroj, který k přizpůsobení objektů Kubernetes používá vrstvy a opravy místo šablon. Představuje souborkustomization.yaml manifest, do kterého uživatelé ukládají konfigurace specifické pro nasazení.
Nástroj je zabudován do kubectl od verze 1.14, což znamená, že je nyní nativní v Kubernetes. Můžete jej však nainstalovat i samostatně.
S Kustomize mohou uživatelé spravovat libovolný počet konfigurací Kubernetes, každou s vlastním odlišným přizpůsobením, pomocí deklarativního přístupu. Umožňuje vývojářům definovat více verzí aplikace a spravovat je v podadresářích. Základní adresář obsahuje běžné konfigurace, zatímco podadresáře obsahují záplaty specifické pro verzi.
Každý adresář obsahuje svůj kustomization.yaml soubor, který určuje, jaké změny je třeba provést v konfiguraci a které prostředky by měly být použity. Například následující kustomization.yaml soubor přidá společný štítek app:test
na oba deployment.yaml a service.yaml v základním adresáři:
commonLabels:
app: my-wordpress
resources:
- deployment.yaml
- service.yaml
Změny se poté použijí zadáním následujícího příkazu do příkazového řádku:
kubectl apply -k base
Příkaz se liší, pokud se Kustomize používá jako samostatný nástroj:
kustomize build base | kubectl apply -f -
Kormidlo a Kubernetes:Klady a zápory
Klady
- Helm nabízí mnoho funkcí, které jdou nad rámec jednoduché správy konfigurace nasazení aplikace, jako je balení, háky a vrácení zpět.
- Zjednodušuje instalaci aplikací tím, že uživatelům umožňuje nastavit výchozí hodnoty, které mohou v případě potřeby dále konfigurovat pomocí hodnot.
- Helm je vývojářům dobře známý, má mnoho uživatelů a skvělou online podporu.
- Funkce šablony Helm umožňují zavádět podmínky a smyčky, definovat pomocníky a přistupovat ke knihovně funkcí Sprig.
- Většina běžně používaných aplikací má své grafy Helm dostupné online, což šetří čas a zvyšuje produktivitu.
Nevýhody
- Helm přidává další vrstvy abstrakce a má strmou křivku učení.
- Omezuje přizpůsobení aplikací na již existující možnosti konfigurace.
- Šablony jsou náchylné k chybám, zejména pokud jde o správné zarovnání YAML.
- Helm není v Kubernetes nativně podporován, což vytváří externí závislost.
- Často je to nezbytné. Helm vkládá hodnoty do šablon za běhu, takže pokud se šablona změní, systém se může lišit od toho, co uživatel očekává.
- Grafy stále vyžadují přizpůsobení za běhu, což ztěžuje jejich správu při implementaci kanálu CI/CD.
- Méně čitelné šablony časem nevyhnutelně vedou k menší přizpůsobitelnosti.
- Trpí bezpečnostními problémy, které vyplývají z nedostatečné viditelnosti a transparentnosti během instalace aplikací.
Kustomize a Kubernetes:Klady a zápory
Klady
- Kustomize se snadno používá.
- Je deklarativní, v souladu s filozofií Kubernetes.
- Kustomize podporuje zděděný základní model, díky kterému je škálovatelný lépe než Helm.
- Použití nativní verze integrované do kubectl eliminuje externí závislosti.
- Usnadňuje používání běžně dostupných aplikací.
- Používá pouze prosté soubory YAML.
Nevýhody
- Kustomize nenabízí mnoho funkcí.
- Není navržen tak, aby dodržoval zásadu DRY (Neopakujte se).
- Uživatelé musí ručně deklarovat zdroje a opravy v kustomization.yaml a soubor musí být ručně aktualizován při každém přidání nového souboru.
- Nativní verze vložená do kubectl je mnohem starší než současná samostatná verze.
- Online podporu pro Kustomize je obtížné najít.
Kustomize vs Helm:Srovnávací tabulka
Funkce | Kormidlo | Přizpůsobit |
---|---|---|
Šablony | Ano | Ne |
Překryvné vrstvy | Ne | Ano |
Balení | Ano | Ne |
Ověřovací háčky | Ano | Ne |
Vrácení změn | Ano | Ne |
Nativní integrace K8 | Ne | Ano |
Deklarativní povaha | Většinou nezbytně nutné | Ano |
Viditelnost a průhlednost | Slabé | Silné |
Jak si vybrat?
Chcete-li se rozhodnout, zda zvolit Helm nebo Kustomize, zvažte následující:
- Zvolte Kustomize, pokud plánujete napsat všechny konfigurace sami a dobře rozumíte tomu, jak YAML funguje. Zatímco Kustomize umožňuje rychle provádět složité úpravy, vyžaduje, abyste byli schopni vizualizovat, jak do sebe záplaty a vrstvy zapadají.
- Na druhou stranu, pokud chcete, aby vaši vývojáři mohli přidávat nové aplikace a služby bezpečným a snadným způsobem, je vytváření Helmových grafů lepším řešením.
- Dalším důvodem, proč si vybrat Helm, je potřeba snížit množství času, který strávíte se soubory YAML. Šablony kormidla obsahují argumenty, které usnadňují pochopení toho, jak služby fungují, aniž byste se příliš ponořili do YAML.
Vzhledem k tomu, že Helm i Kustomize nabízejí výhody specifické pro nástroje a dobře se doplňují, nejlepším postupem by bylo používat oba nástroje vedle sebe. Helm je zvláště užitečný pro balení, sdílení a instalaci aplikací, které jsou dobře definované, zatímco Kustomize funguje nejlépe pro úpravy stávajících aplikací Kubernetes na poslední chvíli.