GNU/Linux >> Znalost Linux >  >> Linux

Jak provádět kanárské nasazení s Istio

Úvod

Nasazení Canary jsou užitečné pro zavádění nových verzí služeb, protože nabízejí způsob, jak postupně zavádět nové funkce. Když je aktualizace uvedena na trh, přichází po etapách pro malé procento uživatelů. To umožňuje vývojářům vidět, jak si aktualizace vede, než ji zpřístupní všem.

Kubernetes je navržen tak, aby nativně prováděl kanárková nasazení. Nevýhodou tohoto přístupu je však to, že omezení provozu na nasazení kanárků (změnou poměrů replik) je třeba provést ručně. Řešením zefektivnění tohoto procesu je využití sítě služeb, jako je open-source Istio, k oddělení distribuce provozu a počtu replik.

V tomto tutoriálu se dozvíte, jak nasadit kanárskou verzi aplikace v clusteru s podporou Istio a nastavit Istio pro řízení směrování provozu.

Předpoklady

  • Cluster Kubernetes (minikube)
  • nástroj příkazového řádku kubectl
  • Istio nainstalováno
  • Účet Docker Hub
  • Hlavní panel Grafana

Krok 1:Vytvořte obrázek Docker a kontejner pro sestavení Canary

Chcete-li začít nasazovat canary build vaší aplikace, nejprve vytvořte image dockeru obsahující verzi, kterou chcete nasadit.

  1. Přejděte do adresáře obsahujícího potřebné soubory pro obrázek. V příkladu je použita aplikace s názvem test-canary , uložený v adresáři se stejným názvem:
cd test-canary

2. Použijte docker build příkaz k vytvoření obrazu Docker. Postupujte podle příkazu se svým uživatelským jménem Docker Hub a názvem obrázku:

docker build -t [dockerhub-username]/test-canary .

Výstup potvrzuje úspěšné vytvoření obrázku:

3. Použijte docker images Chcete-li zobrazit seznam obrázků a zkontrolovat, zda je mezi nimi i nový obrázek:

docker images

4. Dále použijte docker run příkaz k vytvoření kontejneru s obrázkem, který jste dříve vytvořili. Zadejte název kontejneru a vyberte port pro přístup:

docker run --name [name] -p [port]:8080 -d [dockerhub-username]/test-canary

Pokud je operace úspěšná, systém vypíše úplné ID nově vytvořeného kontejneru:

5. Použijte docker ps příkaz ke kontrole běžících kontejnerů:

docker ps

6. Nyní použijte port, který jste přiřadili kontejneru, pro přístup k němu prostřednictvím prohlížeče:

http://localhost:[port]

Prohlížeč zobrazí obsah aplikace:

7. Jakmile se ujistíte, že aplikace funguje, zastavte kontejner pomocí docker stop příkaz. Přidejte k příkazu ID kontejneru, které můžete zkopírovat z prvního sloupce docker ps výstup:

docker stop [container-id]

8. Nakonec, chcete-li odeslat obrázek do svého účtu Docker Hub, přihlaste se k Docker Hub pomocí příkazového řádku:

docker login -u [dockerhub-username]

Systém požádá o heslo. Zadejte heslo a stiskněte Enter :

9. Nyní vložte obrázek pomocí docker push :

docker push [dockerhub-username]/test-canary

Krok 2:Upravte nasazení aplikace

Chcete-li přidat nasazení canary do svého obecného nasazení aplikace, pomocí textového editoru upravte soubor obsahující specifikace služby a nasazení.

V příkladu je použit manifest aplikace s názvem app-manifest.yaml :

nano app-manifest.yaml

Manifest by měl vypadat podobně jako obsah níže:

apiVersion: v1
kind: Service
metadata:
  name: nodejs
  labels:
    app: nodejs
spec:
  selector:
    app: nodejs
  ports:
  - name: http
    port: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nodejs
  labels:
    version: v1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nodejs
  template:
    metadata:
      labels:
        app: nodejs
        version: v1
    spec:
      containers:
      - name: nodejs
        image: markopnap/test-prod
        ports:
        - containerPort: 8080

Výše uvedený příklad manifestu popisuje produkční verzi aplikace Node.js, jejíž kontejner je uložen v markopnap/test-prod . Chcete-li zahrnout kanárskou verzi aplikace, začněte úpravou Deployment části souboru a přidejte -v1 na název aplikace:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nodejs-v1

Nyní přidejte na konec souboru další část Deployment se specifikacemi pro sestavení canary:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nodejs-v2
  labels:
    version: v2
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nodejs
  template:
    metadata:
      labels:
        app: nodejs
        version: v2
    spec:
      containers:
      - name: nodejs
        image: markopnap/test-canary
        ports:
        - containerPort: 8080

Po dokončení úprav soubor uložte a poté aktualizujte konfiguraci systému pomocí kubectl apply :

kubectl apply -f app-manifest.yaml

Krok 3:Konfigurace virtuální služby Istio

Vytvořte nový soubor yaml pro uložení konfigurace Istio. V příkladu je použit soubor s názvem istio.yaml , ale můžete mu dát název podle vlastního výběru:

nano istio.yaml

Pokud jste dříve používali Istio pro nasazení produkční verze, soubor již existuje a měl by vypadat podobně jako tento:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: nodejs-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: nodejs
spec:
  hosts:
  - "*"
  gateways:
  - nodejs-gateway
  http:
  - route:
    - destination:
        host: nodejs

Soubor má dvě části, které definují Bránu a VirtualService objektů. Chcete-li představit obě verze aplikace a nastavit pravidlo směrování pro distribuci uživatelům, upravte http sekce ve spodní části. Sekce musí obsahovat dva cíle s různými podmnožinami a váhy :

http:
  - route:
    - destination:
        host: nodejs
        subset: v1
      weight: 90
    - destination:
        host: nodejs
        subset: v2
      weight: 10

Hmotnost Parametr říká Istio, jaké procento provozu by mělo být směrováno do konkrétního cíle. Ve výše uvedeném příkladu jde 90 procent provozu do produkční verze, zatímco 10 procent směřuje do sestavení canary.

Po úpravě části Virtuální služba přidejte na konec souboru následující řádky a vytvořte pravidlo cíle :

---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: nodejs
spec:
  host: nodejs
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2

Účel definování Pravidla cíle je spravovat příchozí provoz a odesílat ho do specifikovaných verzí aplikace.

Uložte soubor a použijte kubectl apply pro jeho aktivaci:

kubectl apply -f istio.yaml

Krok 4:Otestujte nasazení Canary

Konfigurace nastavená v předchozím kroku provádí směrování provozu do produkčního a kanárského nasazení. Chcete-li to otestovat, otevřete aplikaci pomocí externí IP adresy istio-ingressgateway , který Istio používá jako load balancer.

Hledejte istio-ingressgateway v seznamu služeb dostupných v istio-system jmenný prostor. Použijte kubectl get pro výpis služeb:

kubectl get svc -n istio-system

Zkopírujte istio-ingressgateway externí IP adresu do adresního řádku vašeho prohlížeče:

http://[ingressgateway_ip]

Prohlížeč pravděpodobně zobrazí produkční verzi aplikace. Klepněte na Obnovit tlačítko několikrát pro simulaci určitého provozu:

Po několika případech byste měli vidět kanárskou verzi aplikace:

Pokud máte nainstalovaný doplněk Grafana, zkontrolujte statistiky příchozích požadavků, abyste viděli procento směrování pro každé nasazení. V Grafaně klikněte na Domů ikona:

V Panely vyberte Istio a poté klikněte na Istio Service Dashboard :

Na hlavním panelu najděte Službu a vyberte službu odpovídající vaší aplikaci. V tomto příkladu se služba nazývá nodejs.default.svc.cluster.local . Jakmile si službu vyberete, přejděte na Úlohy služby sekce:

Vyberte graf s názvemPříchozí požadavky podle cílové pracovní zátěže a kódu odezvy . Graf ukazuje provoz, který jste vygenerovali obnovením stránky. V tomto příkladu je evidentní, že Istio obsluhoval nodejs-v1 verze aplikace častěji než kanárská nodejs-v2 verze.


Linux
  1. Jak nainstalovat Jenkins pomocí Docker

  2. Jak sdílet obrázky Docker s ostatními

  3. Jak upravit obrázky Docker

  1. Jak potvrdit změny v obrazu Dockeru

  2. Jak vytvořit vlastní obrázek z kontejneru Docker

  3. Jak používat místní docker obrázky s Minikube?

  1. Jak provést Chroot s jmennými prostory Linuxu?

  2. Jak aktualizovat kontejner Docker s nulovým výpadkem

  3. Jak zkopírovat obraz ISO na USB pomocí dd