Úvod
Testování nové funkce nebo upgrade ve výrobě je stresující proces. Chcete změny zavádět často, ale bez ovlivnění uživatelského dojmu. Chcete-li během této fáze minimalizovat prostoje, nastavte implementace Canary, aby se přechod zjednodušil.
Nasazení canary můžete použít na jakékoli infrastruktuře. V souladu s tím je to jedna ze strategií nasazení v Kubernetes.
Zjistěte, co jsou nasazení canary, jak fungují a jak provést nasazení canary na Kubernetes.
Předpoklady
- Přístup k příkazovému řádku/terminálu
- Docker nainstalovaný v systému
- Kubernetes nebo Minikube
- Plně nakonfigurovaný nástroj příkazového řádku kubectl na vašem místním počítači
Co je to kanárské nasazení?
Kanárkové nasazení je upgradovaná verze stávajícího nasazení se všemi požadovanými aplikačními kódy a závislostmi. Používá se k testování nových funkcí a upgradů, aby se zjistilo, jak zvládají produkční prostředí.
Když přidáte nasazení canary do clusteru Kubernetes, je spravováno službou prostřednictvím selektorů a štítky . Služba směruje provoz do podů, které mají zadaný štítek. To vám umožní snadno přidávat nebo odebírat nasazení.
Množství provozu, které kanárek získá, odpovídá počtu lusků, které roztočí. Ve většině případů začínáte tím, že na kanárku nasměrujete menší procento provozu a postupem času toto číslo zvýšíte.
S nastavením obou nasazení můžete sledovat chování kanárků, abyste viděli, zda nenastanou nějaké problémy. Jakmile budete spokojeni se způsobem, jakým zpracovává požadavky, můžete upgradovat všechna nasazení na nejnovější verzi.
Nastavení nasazení Canary na Kubernetes
Níže uvedené kroky ukazují, jak nastavit nasazení canary. Pro tento článek jsme vytvořili jednoduchý cluster Kubernetes podů Nginx se základní statickou HTML stránkou se dvěma větami. Verze nasazení se liší podle obsahu, který zobrazují na webové stránce.
Proces nastavení vašeho nasazení Canary se bude lišit podle aplikace, kterou používáte.
Krok 1:Vytáhněte obrázek dockeru
Prvním krokem je stáhnout nebo vytvořit image pro kontejnery ve vašem clusteru Kubernetes. Protože v tomto příkladu vytváříme kontejnery Nginx, používáme obraz Nginx dostupný na Docker Hub.
1. Stáhněte si obrázek pomocí:
docker pull nginx
2. Ověřte, zda jej máte, uvedením všech místních obrázků:
docker image ls
Krok 2:Vytvořte nasazení Kubernetes
1. Vytvořte definici nasazení pomocí souboru yaml. Použijte textový editor podle svého výběru a zadejte název souboru. Soubor pojmenujeme nginx-deployment.yaml a vytvořte jej pomocí Nano :
nano nginx-deployment.yaml
2. Přidejte do souboru následující obsah:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
version: "1.0"
spec:
containers:
- name: nginx
image: nginx:alpine
resources:
limits:
memory: "128Mi"
cpu: "50m"
ports:
- containerPort: 80
volumeMounts:
- mountPath: /usr/share/nginx/html
name: index.html
volumes:
- name: index.html
hostPath:
path: /Users/sofija/Documents/nginx/v1
Vytvořili jsme 3 repliky podů Nginx pro cluster Kubernetes. Všechny moduly mají štítek version: "1.0
Kromě toho mají hostitelský svazek obsahující index.html namontované na kontejner. Ukázkový soubor HTML se skládá z:
<html>
<h1>Hello World!</h1>
<p>This is version 1</p>
</html>
3. Uložte a ukončete soubor.
4. Vytvořte rozmístění spuštěním:
k apply -f nginx-deployment.yaml
5. Zkontrolujte, zda jste úspěšně nasadili moduly pomocí:
k get pods -o wide
Výstup by měl zobrazovat tři spuštěné moduly Nginx .
Krok 3:Vytvořte službu
Dalším krokem je vytvoření definice služby pro cluster Kubernetes. Služba bude směrovat požadavky na zadané moduly.
1. Vytvořte nový yaml soubor s:
nano nginx-deployment.service.yaml
2. Poté přidejte následující obsah:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: LoadBalancer
selector:
app: nginx
version: "1.0"
ports:
- port: 8888
targetPort: 80
Soubor yaml specifikuje typ služby – LoadBalancer . Dává službě pokyn, aby vyrovnala pracovní zátěž mezi moduly pomocí štítků app: nginx
a version: "1.0"
. Aby mohl být modul součástí služby, musí mít oba štítky.
3. Uložte a ukončete soubor služby.
4. Nyní vytvořte službu:
kubectl apply -f nginx-deployment.service.yaml
Krok 4:Zkontrolujte první verzi clusteru
Chcete-li ověřit, že služba běží, otevřete webový prohlížeč a přejděte na adresu IP a číslo portu definované v souboru služby.
Chcete-li zobrazit externí adresu IP služby, použijte příkaz:
kubectl get service
Pokud používáte Kubernetes lokálně , použijte jako IP adresu localhost.
Protože ukázkový cluster, který jsme vytvořili, běží lokálně na portu 8888, adresa URL je:
http://localhost:8888
V prohlížeči by se mělo zobrazit Ahoj světe zpráva z verze 1 .
Krok 5:Vytvořte rozmístění Canary
S verzí 1 aplikace na místě, nasadíte verzi 2 , kanárkové nasazení.
1. Začněte vytvořením yaml soubor pro nasazení canary. Spusťte příkaz:
nano nginx-canary-deployment.yaml
2. Přidejte do souboru následující obsah:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-canary-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
version: "2.0"
spec:
containers:
- name: nginx
image: nginx:alpine
resources:
limits:
memory: "128Mi"
cpu: "50m"
ports:
- containerPort: 80
volumeMounts:
- mountPath: /usr/share/nginx/html
name: index.html
volumes:
- name: index.html
hostPath:
path: /Users/sofija/Documents/nginx/v2
Obsah souboru nasazení canary se liší třemi důležitými parametry:
- Název v metadatech je
nginx-canary-deployment
. - Má štítek
version: “2.0”
. - Je propojen s html souborem index.html který se skládá z:
<html>
<h1>Hello World!</h1>
<p>This is version 2</p>
</html>
3. Uložte a ukončete soubor.
4. Vytvořte rozmístění canary pomocí příkazu:
k apply -f nginx-canary-deployment.yaml
5. Ověřte, že jste úspěšně nasadili tři další moduly:
k get pods -o wide
Výstup by měl zobrazovat Díky nasazení Nginx canary , spolu s původními moduly Nginx .
Krok 6:Spusťte nasazení Canary
Otevřete webový prohlížeč a přejděte na stejnou IP adresu jako v kroku 4. Všimnete si, že na webové stránce nejsou žádné změny. Je to proto, že soubor služby je nakonfigurován tak, aby načítal zůstatek pouze pody se štítkem version: "1.0"
.
Chcete-li otestovat aktualizované moduly, musíte upravit soubor služby a nasměrovat část provozu do version: "2.0"
.
1. Chcete-li tak učinit, otevřete yaml soubor s:
nano nginx-deployment.service.yaml
2. Najděte a odstraňte řádek version: “1.0”
. Soubor by měl obsahovat následující:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: LoadBalancer
selector:
app: nginx
ports:
- port: 8888
targetPort: 80
3. Uložte změny a ukončete soubor.
4. Vytvořte aktualizovanou službu pomocí příkazu:
k apply -f nginx-deployment.service.yml
5. Provoz je nyní rozdělen mezi moduly verze 1 a verze 2. Pokud webovou stránku několikrát obnovíte, uvidíte různé výsledky v závislosti na tom, kam služba přesměruje váš požadavek.
Krok 7:Monitorujte chování Canary
Po spuštění obou nasazení sledujte chování nového nasazení. V závislosti na výsledcích můžete nasazení vrátit zpět nebo upgradovat na novější verzi.
Zrušit nasazení Canary
Pokud si všimnete, že kanár nefunguje podle očekávání, můžete nasazení vrátit zpět a odstranit upgradované moduly pomocí:
kubectl delete deployment.apps/nginx-canary-deployment
Služba pokračuje ve vyrovnávání zátěže provozu do počátečních modulů (verze 1).
Zavést upgradované nasazení
Pokud dojdete k závěru, že nasazení canary funguje podle očekávání, můžete směrovat veškerý příchozí provoz do upgradované verze. Existují tři způsoby, jak to udělat:
1. Upgradujte první verzi úpravou obrazu Docker a vytvořením nového nasazení. Poté odstraňte kanárky pomocí:
kubectl delete deployment.apps/nginx-canary-deployment
2. Upgradované moduly si můžete ponechat a ty s verzí 1 odebrat štítek:
kubectl delete deployment.apps/nginx
3. Případně můžete upravit service.yaml a přidejte verzi specifikátor do selector
označení. To dává nástroji pro vyrovnávání zatížení pokyn, aby směroval provoz pouze do verze 2 pod.