Wdrożenie Canary przy użyciu Jenkins-X Istio Flagger
Wdrożenie na Wyspach Kanaryjskich
Mamy nadzieję, że czytasz pierwsza część, gdzie pokrótce wyjaśniliśmy, czym są wdrożenia Canary. Pokazaliśmy także, jak to wdrożyć, korzystając ze standardowych zasobów Kubernetesa.
Wdrożenia Argo
Argo Rollouts to natywny kontroler wdrażania Kubernetes. Zapewnia CRD (niestandardową definicję zasobów) dla Kubernetes. Dzięki niemu możemy skorzystać z nowego podmiotu: Rollout, który zarządza wdrożeniami blue-green i canary z różnymi opcjami konfiguracji.
Kontroler Argo Rollouts używany przez zasób niestandardowy Rollout, Umożliwia dodatkowe strategie wdrażania, takie jak niebiesko-zielony i kanarkowy dla Kubernetes. Ratunek Rollout zapewnia równoważną funkcjonalność Deployment, tylko z dodatkowymi strategiami wdrażania.
zasób Deployments ma dwie strategie wdrażania: RollingUpdate и Recreate. Chociaż strategie te są odpowiednie w większości przypadków, w przypadku wdrażania na serwerach na bardzo dużą skalę stosowane są dodatkowe strategie, takie jak niebiesko-zielony lub kanarkowy, które nie są dostępne w kontrolerze wdrażania. Aby skorzystać z tych strategii w Kubernetes, użytkownicy musieli napisać skrypty na swoich wdrożeniach. Kontroler Argo Rollouts udostępnia te strategie jako proste, deklaratywne i konfigurowalne parametry. https://argoproj.github.io/argo-rollouts
Istnieje również Argo CI, który zapewnia wygodny interfejs sieciowy do użytku z Rolloutami, przyjrzymy się temu w następnym artykule.
W naszej infrastrukturze rzepa (patrz poniżej) dodaliśmy już install.yaml jako i/k8s/argo-rollouts/install.yaml. W ten sposób GitlabCI zainstaluje go w klastrze.
To bardzo proste API Python+Flask, które zwraca odpowiedź w formacie JSON. Zbudujemy pakiet przy użyciu GitlabCI i wypchniemy wynik do rejestru Gitlab. W rejestrze mamy dwie różne wersje wydania:
wuestkamp/k8s-przykładowa-aplikacja-wdrożenia:v1
wuestkamp/k8s-przykładowa-aplikacja-wdrożenia:v2
Jedyną różnicą między nimi jest zwracany plik JSON. Używamy tej aplikacji, aby jak najłatwiej wizualizować, z którą wersją się komunikujemy.
Repozytorium infrastruktury
W tym repozytorium będziemy używać GitlabCI do wdrożenia w Kubernetesie, plik .gitlab-ci.yml wygląda następująco:
Rollout działa tak samo jak Deployment. Jeśli nie ustawimy strategii aktualizacji (jak tutaj Canary), będzie ona zachowywać się jak domyślne wdrożenie aktualizacji stopniowej.
Definiujemy dwa kroki w YAML dla wdrożenia Canary:
10% ruchu na Kanarek (poczekaj na ręczne OK)
50% ruchu do Canary (odczekaj 2 minuty, a następnie przejdź do 100%)
Przeprowadzanie wstępnego wdrożenia
Po pierwszym wdrożeniu nasze zasoby będą wyglądać następująco:
A odpowiedź dostajemy dopiero z pierwszej wersji aplikacji:
Przeprowadzanie wdrożenia Canary
Krok 1: 10% ruchu
Aby rozpocząć wdrożenie Canary, wystarczy zmienić wersję obrazu, jak to zwykle robimy w przypadku wdrożeń:
Naprawdę polecam ten film, pokazuje on współpracę Argo Rollouts i Argo CI:
Łączny
Bardzo podoba mi się pomysł wykorzystania CRD, które zarządzają tworzeniem dodatkowych typów wdrożeń czy zestawów replik, przekierowują ruch itp. Współpraca z nimi przebiega sprawnie. Następnie chciałbym przetestować integrację z Argo CI.
Wydaje się jednak, że nadchodzi duża fuzja Argo CI i Flux CI, więc mogę poczekać, aż pojawi się nowa wersja: Strumień Argo.
Czy miałeś jakieś doświadczenia z Argo Rollouts lub Argo CI?