Oktatóanyag: Kanári üzembehelyezési stratégia használata Kubernetes-üzemelő példányokhoz
Azure DevOps Services | Azure DevOps Server 2022
A kanári-telepítési stratégia azt jelenti, hogy az alkalmazás új verzióit a stabil, éles verziók mellett helyezik üzembe. Ezután megtekintheti, hogyan hasonlít össze a kanári-verzió az alapkonfigurációval, mielőtt előlépteti vagy elutasítja az üzembe helyezést.
Ez a részletes útmutató a Kubernetes-jegyzékfeladat kanári-stratégiájának használatát ismerteti. Megtudhatja, hogyan állíthatja be a Kubernetes kanári-üzemelő példányait, valamint a kapcsolódó munkafolyamatot a kód kiértékeléséhez. Ezután ezzel a kóddal összehasonlíthatja az alapkonfigurációt és a kanári-alkalmazástelepítéseket, így eldöntheti, hogy előlépteti vagy elutasítja-e a kanári-telepítést.
Ha az Azure Kubernetes Service-t használja, az Azure Resource Manager szolgáltatás kapcsolattípusa a legjobb módja annak, hogy privát fürthöz vagy helyi fiókokat letiltó fürthöz csatlakozzon.
Előfeltételek
- An Azure account with an active subscription. Fiók ingyenes létrehozása.
- Egy GitHub-fiók. Hozzon létre egy ingyenes GitHub-fiókot, ha még nem rendelkezik ilyen fiókkal .
- Leküldéses jogosultságokkal rendelkező Azure Container Registry. Hozzon létre egy Azure Container Registryt , ha még nincs ilyenje.
- Egy Kubernetes-fürt. Azure Kubernetes Service-fürt (AKS) üzembe helyezése.
Mintakód
Fork az alábbi adattárat a GitHubon.
https://github.com/MicrosoftDocs/azure-pipelines-canary-k8s
Íme egy rövid áttekintés az adattárban található, az útmutató során használt fájlokról:
- ./alkalmazás:
- app.py – Egy egyszerű, Flask-alapú webkiszolgáló, amelyet a Prometheus instrumentation library for Python-alkalmazásokhoz használ. A változó értéke alapján egyéni számláló van beállítva a megadott jó és rossz válaszok számához
success_rate
. - Dockerfile – A rendszerkép készítésére szolgál a app.py minden módosításával. Minden módosítással aktiválódik a buildelési folyamat, és a rendszerkép létrejön, és le lesz küldve a tárolóregisztrációs adatbázisba.
- app.py – Egy egyszerű, Flask-alapú webkiszolgáló, amelyet a Prometheus instrumentation library for Python-alkalmazásokhoz használ. A változó értéke alapján egyéni számláló van beállítva a megadott jó és rossz válaszok számához
- ./jegyzékek:
- deployment.yml – A korábban közzétett rendszerképnek megfelelő üzembehelyezési számítási feladat specifikációját
sampleapp
tartalmazza. Ezt a jegyzékfájlt nem csak az üzembehelyezési objektum stabil verziójához, hanem a számítási feladatok alapkonfigurációjának és kanári változatainak származtatásához is használhatja. - service.yml – Létrehozza a
sampleapp
szolgáltatást. Ez a szolgáltatás a korábban említett üzemelő példányok (stabil, alapkonfiguráció és kanári) által felpördített podokra irányítja a kérelmeket.
- deployment.yml – A korábban közzétett rendszerképnek megfelelő üzembehelyezési számítási feladat specifikációját
- ./Vegyes
- service-monitor.yml – ServiceMonitor-objektum beállítására szolgál. Ez az objektum beállítja a Prometheus metrika-kaparását.
- fortio-deploy.yml – Fortio-telepítés beállítására szolgál. Ezt az üzembe helyezést később terheléstesztelő eszközként használják, hogy kéréseket küldjenek a
sampleapp
korábban üzembe helyezett szolgáltatásnak. Az elküldöttsampleapp
kérések streamje mind a három üzemelő példány (stabil, alapkonfiguráció és kanári) podjaihoz lesz irányítva.
Megjegyzés:
Ebben az útmutatóban a Prometheust használja a kódrendszerezéshez és a monitorozáshoz. Bármely egyenértékű megoldás, például a Azure-alkalmazás Elemzések, használható alternatívaként.
Prometheus-operátor telepítése
A Prometheus fürtre való telepítéséhez használja a következő parancsot a fejlesztői gépről. Telepítve kell lennie a Kubectlnek és a Helmnek, és be kell állítania a környezetet arra a fürtre, ahová telepíteni szeretné az üzembe helyezést. A Helm-diagram részeként települ a Grafana, amelyet később használ az alapkonfiguráció és a kanári-metrikák irányítópultokon való megjelenítéséhez.
Először hozzáadja a Prometheus Community Kubernetes Helm Charts-adattárat a Helm-telepítéshez. Ezután telepíti a Kube-prometheus vermet, a Kubernetes-jegyzékek gyűjteményét, a Grafana-irányítópultokat és a Prometheus-szabályokat.
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update # update local cache
helm install --name sampleapp prometheus-community/kube-prometheus-stack
Szolgáltatáskapcsolatok létrehozása
- Nyissa meg a Project settings>Pipelines>Service-kapcsolatokat az Azure DevOps menüben.
- Hozzon létre egy Docker-beállításjegyzék-szolgáltatáskapcsolatot a tárolóregisztrációs adatbázishoz. Nevezze el azure-pipelines-canary-k8s néven.
- Hozzon létre egy Kubernetes-szolgáltatáskapcsolatot ahhoz a Kubernetes-fürthöz és névtérhez, amelybe üzembe szeretne helyezni. Nevezze el azure-pipelines-canary-k8s néven.
Megjegyzés:
Ha az Azure Kubernetes Service-t használja, az Azure Resource Manager szolgáltatás kapcsolattípusa a legjobb módja annak, hogy privát fürthöz vagy helyi fiókokat letiltó fürthöz csatlakozzon.
A folyamatos integráció konfigurálása
Lépjen a Folyamatok>létrehozása folyamathoz, és válassza ki az adattárat.
A Konfigurálás lapon válassza a Starter-folyamatot.
A Véleményezés lapon cserélje le a folyamat YAML-ét erre a kódra.
trigger: - main pool: vmImage: ubuntu-latest variables: imageName: azure-pipelines-canary-k8s steps: - task: Docker@2 displayName: Build and push image inputs: containerRegistry: azure-pipelines-canary-k8s #replace with name of your Docker registry service connection repository: $(imageName) command: buildAndPush Dockerfile: app/Dockerfile tags: | $(Build.BuildId)
Ha a létrehozott Docker-beállításjegyzék-szolgáltatáskapcsolat a
example.azurecr.io
következőhöz van társítva, akkor a rendszerkép azexample.azurecr.io/azure-pipelines-canary-k8s:$(Build.BuildId)
előző konfiguráció alapján történik.
Jegyzékfájl szerkesztése
A manifests/deployment.yml fájlban cserélje le <example>
a tárolóregisztrációs adatbázis URL-címét. A csere után például a képmezőnek a következőképpen contosodemo.azurecr.io/azure-pipelines-canary-k8s
kell kinéznie.
Folyamatos üzembe helyezés beállítása
A következő szakaszok a folyamatos üzembe helyezés beállításának lépéseit tartalmazzák, beleértve a kanári szakasz üzembe helyezését, valamint a kanári manuális beavatkozással történő előléptetését vagy elutasítását.
Kanári-szakasz üzembe helyezése
A YAML-lel vagy a klasszikussal is üzembe helyezheti azokat.
Lépjen a Pipelines Environments Create environment (Folyamatkörnyezetek>>létrehozása) elemre.
Hozzon létre egy új környezetet.
- Név: akscanary
- Erőforrás: Válassza a Kubernetes lehetőséget.
Válassza a Tovább lehetőséget, és konfigurálja a Kubernetes-erőforrást az alábbiak szerint:
- Szolgáltató: Azure Kubernetes Service
- Azure-előfizetés: Válassza ki a Kubernetes-fürtöt tartalmazó előfizetést.
- Fürt: Válassza ki a fürtöt.
- Névtér: Hozzon létre egy új névteret a canarydemo névvel.
Válassza az Ellenőrzés és létrehozás lehetőséget.
Lépjen a Folyamatok területre. Jelölje ki a létrehozott folyamatot, és válassza a Szerkesztés lehetőséget.
Módosítsa a korábban létrehozott lépést, hogy most már használjon egy szakaszt. Adjon hozzá két további lépést a jegyzékek és a vegyes könyvtárak összetevőként való másolásához az egymást követő szakaszokban való használathoz. Előfordulhat, hogy több értéket is át szeretne helyezni változókba, hogy a folyamat későbbi részében egyszerűbb legyen a használat. A teljes YAML-nek így kell kinéznie.
trigger: - main pool: vmImage: ubuntu-latest variables: imageName: azure-pipelines-canary-k8s dockerRegistryServiceConnection: dockerRegistryServiceConnectionName #replace with name of your Docker registry service connection imageRepository: 'azure-pipelines-canary-k8s' containerRegistry: example.azurecr.io #replace with the name of your container registry, Should be in the format example.azurecr.io tag: '$(Build.BuildId)' stages: - stage: Build displayName: Build stage jobs: - job: Build displayName: Build pool: vmImage: ubuntu-latest steps: - task: Docker@2 displayName: Build and push image inputs: containerRegistry: $(dockerRegistryServiceConnection) repository: $(imageName) command: buildAndPush Dockerfile: app/Dockerfile tags: | $(tag) - publish: manifests artifact: manifests - publish: misc artifact: misc
Adjon hozzá egy szakaszt a YAML-fájl végén a kanári-verzió üzembe helyezéséhez.
- stage: DeployCanary displayName: Deploy canary dependsOn: Build condition: succeeded() jobs: - deployment: Deploycanary displayName: Deploy canary pool: vmImage: ubuntu-latest environment: 'akscanary.canarydemo' strategy: runOnce: deploy: steps: - task: KubernetesManifest@0 displayName: Create imagePullSecret inputs: action: createSecret secretName: azure-pipelines-canary-k8s dockerRegistryEndpoint: azure-pipelines-canary-k8s - task: KubernetesManifest@0 displayName: Deploy to Kubernetes cluster inputs: action: 'deploy' strategy: 'canary' percentage: '25' manifests: | $(Pipeline.Workspace)/manifests/deployment.yml $(Pipeline.Workspace)/manifests/service.yml containers: '$(containerRegistry)/$(imageRepository):$(tag)' imagePullSecrets: azure-pipelines-canary-k8s - task: KubernetesManifest@0 displayName: Deploy Forbio and ServiceMonitor inputs: action: 'deploy' manifests: | $(Pipeline.Workspace)/misc/*
Mentse a folyamatot úgy, hogy közvetlenül a fő ágra véglegesíti a folyamatot. Ennek a véglegesítésnek már sikeresen le kell futtatnia a folyamatot.
Manuális beavatkozás a kanári népszerűsítésére vagy elutasítására
A YAML vagy a klasszikus használatával manuálisan is beavatkozhat.
Lépjen a Pipelines>Environments Új környezet lapra.>
Konfigurálja az új környezetet.
- Név: akspromote
- Erőforrás: Válassza a Kubernetes lehetőséget.
Válassza a Tovább lehetőséget, és konfigurálja a Kubernetes-erőforrást az alábbiak szerint:
- Szolgáltató: Azure Kubernetes Service
- Azure-előfizetés: Válassza ki a Kubernetes-fürtöt tartalmazó előfizetést.
- Fürt: Válassza ki a fürtöt.
- Névtér: Válassza ki a korábban létrehozott névteret ( canarydemo).
Válassza az Ellenőrzés és létrehozás lehetőséget.
Válassza ki az új
akspromote
környezetet a környezetek listájából.Válassza ki a Jóváhagyások és az ellenőrzéseket> Jóváhagyások. Ezután válassza a három pont ikont (a három pontot).
Konfigurálja a jóváhagyást az alábbiak szerint:
- Jóváhagyók: Saját felhasználói fiók hozzáadása.
- Speciális: Győződjön meg arról, hogy a jóváhagyók jóváhagyhatják a saját futtatásukat jelölőnégyzetet.
Select Create.
Lépjen a Folyamatok elemre, és válassza ki a létrehozott folyamatot. Ezután válassza az Edit (Szerkesztés) elemet.
Adjon hozzá egy másik szakaszt
PromoteRejectCanary
a YAML-fájl végén a módosítások előléptetéséhez.- stage: PromoteRejectCanary displayName: Promote or Reject canary dependsOn: DeployCanary condition: succeeded() jobs: - deployment: PromoteCanary displayName: Promote Canary pool: vmImage: ubuntu-latest environment: 'akspromote.canarydemo' strategy: runOnce: deploy: steps: - task: KubernetesManifest@0 displayName: promote canary inputs: action: 'promote' strategy: 'canary' manifests: '$(Pipeline.Workspace)/manifests/*' containers: '$(containerRegistry)/$(imageRepository):$(tag)' imagePullSecrets: '$(imagePullSecret)'
Adjon hozzá egy másik szakaszt
RejectCanary
a YAML-fájl végén a módosítások visszaállításához.- stage: RejectCanary displayName: Reject canary dependsOn: PromoteRejectCanary condition: failed() jobs: - deployment: RejectCanary displayName: Reject Canary pool: vmImage: ubuntu-latest environment: 'akscanary.canarydemo' strategy: runOnce: deploy: steps: - task: KubernetesManifest@0 displayName: reject canary inputs: action: 'reject' strategy: 'canary' manifests: '$(Pipeline.Workspace)/manifests/*'
Mentse a YAML-folyamatot a Mentés gombra kattintva, majd véglegesítse közvetlenül a főágban.
Stabil verzió üzembe helyezése
Egy stabil verziót a YAML-lel vagy a klasszikussal is üzembe helyezhet.
A folyamat első futtatásakor a számítási feladatok stabil verziója, valamint azok alapkonfigurációs vagy kanári-verziói nem léteznek a fürtben. A stabil verzió üzembe helyezése:
- Az app/app.py fájlban váltson a
success_rate = 5
következőresuccess_rate = 10
: . Ez a módosítás aktiválja a folyamatot, ami a rendszerkép összeállításához és a lemezkép tárolóregisztrációs adatbázisba való leküldéséhez vezet. A szakaszt is aktiváljaDeployCanary
. - Mivel konfigurálta a jóváhagyást a
akspromote
környezetben, a kiadás várni fog a fázis futtatása előtt. - A futtatás összegzésében válassza a Jóváhagyás áttekintése>lehetőséget. Ez üzembe helyezi a számítási feladatok stabil verzióját (az üzembe helyezés a
sampleapp
jegyzékekben/deployment.yml-ben) a névtérben.
Kanári-munkafolyamat kezdeményezése
A számítási feladat sampleapp
stabil verziója már létezik a fürtben. Ezután módosítsa a következő módosítást a szimulációs alkalmazásra:
Az app/app.py fájlban váltson a success_rate = 10
következőre success_rate = 20
: .
Ez a módosítás aktiválja a buildelési folyamatot, így a rendszerkép összeállítása és leküldése a tárolóregisztrációs adatbázisba. Ez a folyamat viszont elindítja a kiadási folyamatot, és megkezdi az üzembe helyezési szakaszt .
Kérelmek szimulálása
A fejlesztői gépen futtassa a következő parancsokat, és futtassa folyamatosan a kérések folyamatos streameléséhez a sampleapp
szolgáltatásban. sampleapp
a kéréseket a stabil sampleapp
üzemelő példány által megpördült podokra, valamint az üzemelő példányok sampleapp-canary
által sampleapp-baseline
felpördült podokra irányítja. A megadott sampleapp
választó az összes podra alkalmazható.
FORTIO_POD=$(kubectl get pod | grep fortio | awk '{ print $1 }')
kubectl exec -it $FORTIO_POD -c fortio /usr/bin/fortio -- load -allow-initial-errors -t 0 http://sampleapp:8080/
Grafana-irányítópult beállítása
Futtassa a következő porttovábbítási parancsot a helyi fejlesztői gépen a Grafana eléréséhez.
kubectl port-forward svc/sampleapp-grafana 3000:80
Egy böngészőben nyissa meg a következő URL-címet.
http://localhost:3000/login
Amikor a rendszer hitelesítő adatokat kér, kivéve, ha a
adminPassword
Helm-diagram telepítése során felülírták azprometheus-operator
értéket, a következő értékeket használhatja:- felhasználónév: rendszergazda
- jelszó: szalagavatás-operátor
A bal oldali menüben válassza az Irányítópult-grafikon> lehetőséget.+>
Jelöljön ki egy tetszőleges elemet az újonnan hozzáadott panelen, és írja be
e
a panel szerkesztéséhez.A Metrikák lapon adja meg a következő lekérdezést:
rate(requests_total{pod=~"sampleapp-.*", custom_status="good"}[1m])
Az Általános lapon módosítsa ennek a panelnek a nevét a Minden mintaalkalmazás podra.
Az oldal tetején található áttekintő sávon módosítsa az időtartamtartományt az Utolsó 5 vagyaz Utolsó 15 percre.
A panel mentéséhez válassza a Mentés ikont az áttekintő sávon.
Az előző panel az összes változat sikerességi mutatóit jeleníti meg. Ezek közé tartozik a stabil (az üzembe helyezésből), az
sampleapp
alapkonfiguráció (az üzembe helyezésből) és asampleapp-baseline
kanári (azsampleapp-canary
üzembe helyezésből). Csak az alapkonfigurációt és a kanári-metrikákat jelenítheti meg egy másik panel hozzáadásával, a következő konfigurációval:- Az Általános lap Cím elemében válassza a mintaalkalmazás alapkonfigurációja és a kanári lehetőséget.
- A Metrikák lapon használja a következő lekérdezést:
rate(requests_total{pod=~"sampleapp-baseline-.*|sampleapp-canary-.*", custom_status="good"}[1m])
Megjegyzés:
Az alapkonfiguráció és a kanári metrikák paneljén csak bizonyos feltételek mellett érhetők el összehasonlításra szolgáló metrikák. Ezek a feltételek akkor lépnek fel, ha az üzembe helyezési kanári szakasz sikeresen befejeződött, és az előléptetési/elutasítási kanári szakasz manuális beavatkozásra vár.
Tipp.
Széljegyzetek beállítása a Grafana-irányítópultokhoz , hogy vizuálisan ábrázolják a szakaszkimeneti eseményeket a Canary üzembe helyezése és az előléptetés/elutasítás kanári esetében. Ez azért hasznos, hogy tudja, mikor kezdje el összehasonlítani az alaptervet a kanárival, és mikor fejeződött be a kanári előléptetése vagy elutasítása.
Alapterv és kanári összehasonlítása
Ezen a ponton az üzembe helyezési szakasz sikeresen befejeződött (az átról a másikra
20
való váltássuccess_rate
10
alapján). Az előléptetési/elutasítási fázis manuális beavatkozásra vár. A Grafana irányítópulton összehasonlíthatja az alapkonfiguráció és a kanári változatok sikerességi arányát (a meghatározásnakcustom_status=good
megfelelően). Ennek a következőképpen kell kinéznie:Azon megfigyelés alapján, hogy a kanári sikerességi aránya magasabb, előléptesse a kanárit. Válassza az Önéletrajz lehetőséget a manuális beavatkozási feladatban.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: