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

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.
  • ./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.
  • ./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ött sampleapp 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

  1. Nyissa meg a Project settings>Pipelines>Service-kapcsolatokat az Azure DevOps menüben.
  2. 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.
  3. 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

  1. Lépjen a Folyamatok>létrehozása folyamathoz, és válassza ki az adattárat.

  2. A Konfigurálás lapon válassza a Starter-folyamatot.

  3. 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.iokövetkezőhöz van társítva, akkor a rendszerkép az example.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-k8skell 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.

  1. Lépjen a Pipelines Environments Create environment (Folyamatkörnyezetek>>létrehozása) elemre.

  2. Hozzon létre egy új környezetet.

    • Név: akscanary
    • Erőforrás: Válassza a Kubernetes lehetőséget.
  3. 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.
  4. Válassza az Ellenőrzés és létrehozás lehetőséget.

  5. Lépjen a Folyamatok területre. Jelölje ki a létrehozott folyamatot, és válassza a Szerkesztés lehetőséget.

  6. 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
    
  7. 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/*
    
  8. 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.

  1. Lépjen a Pipelines>Environments Új környezet lapra.>

  2. Konfigurálja az új környezetet.

    • Név: akspromote
    • Erőforrás: Válassza a Kubernetes lehetőséget.
  3. 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).
  4. Válassza az Ellenőrzés és létrehozás lehetőséget.

  5. Válassza ki az új akspromote környezetet a környezetek listájából.

  6. 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).

  7. 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.
  8. Select Create.

  9. Lépjen a Folyamatok elemre, és válassza ki a létrehozott folyamatot. Ezután válassza az Edit (Szerkesztés) elemet.

  10. Adjon hozzá egy másik szakaszt PromoteRejectCanarya 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)'
    
  11. Adjon hozzá egy másik szakaszt RejectCanarya 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/*'
    
  12. 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:

  1. Az app/app.py fájlban váltson a success_rate = 5 következőre success_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álja DeployCanary .
  2. 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.
  3. 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. sampleappa 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

  1. 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
    
  2. Egy böngészőben nyissa meg a következő URL-címet.

    http://localhost:3000/login
    
  3. Amikor a rendszer hitelesítő adatokat kér, kivéve, ha a adminPassword Helm-diagram telepítése során felülírták az prometheus-operator értéket, a következő értékeket használhatja:

    • felhasználónév: rendszergazda
    • jelszó: szalagavatás-operátor
  4. A bal oldali menüben válassza az Irányítópult-grafikon> lehetőséget.+>

  5. Jelöljön ki egy tetszőleges elemet az újonnan hozzáadott panelen, és írja be e a panel szerkesztéséhez.

  6. A Metrikák lapon adja meg a következő lekérdezést:

    rate(requests_total{pod=~"sampleapp-.*", custom_status="good"}[1m])
    
  7. Az Általános lapon módosítsa ennek a panelnek a nevét a Minden mintaalkalmazás podra.

  8. Az oldal tetején található áttekintő sávon módosítsa az időtartamtartományt az Utolsó 5 vagyaz Utolsó 15 percre.

  9. A panel mentéséhez válassza a Mentés ikont az áttekintő sávon.

  10. 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 a sampleapp-baseline kanári (az sampleapp-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

  1. Ezen a ponton az üzembe helyezési szakasz sikeresen befejeződött (az átról a másikra 20való váltás success_rate10 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ásnak custom_status=goodmegfelelően). Ennek a következőképpen kell kinéznie:

    Screenshot that shows a comparison of baseline and canary metrics.

  2. 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.