Gyakorlat – Többtárolós megoldás üzembe helyezése Kubernetes-fürtön

Befejeződött

A projekthez biztosított kiadási folyamat úgy lett kialakítva, hogy a megoldást Docker-tárolóként hozza létre, és üzembe helyezze az Azure App Service-ben. Több tároló Kubernetes-fürtön való üzembe helyezésének támogatásához módosítania kell ezt a folyamatot.

Ebben a leckében megtanulhatja, hogyan:

  • Frissítse a csővezetéket úgy, hogy egy elkötelezés indítson el a főágban.
  • Definiálja a folyamaton keresztül megosztani kívánt változókat.
  • Docker-rendszerképek létrehozása és közzététele.
  • Kubernetes-jegyzékek közzététele.
  • Adjon hozzá egy feladatot egy kép lekérési titkos kódjának létrehozásához a Kubernetes és a tárolóregisztrációs adatbázispéldányok közötti használatra.
  • Frissített rendszerképek üzembe helyezése Kubernetes klaszterbe.

A folyamat frissítése az eseményindítók támogatásához

  1. Jelentkezzen be az Azure DevOps-szervezetbe, és lépjen a projekthez.

  2. Válassza Pipeline-oklehetőséget, majd válassza ki a saját pipeline-ját.

  3. A azure-pipelines.ymlszerkesztéséhez válassza a Szerkesztés lehetőséget.

    Andy: Ez volt a korábbi egykonténeres megoldás építési szakasza. Tudtam, hogy nem fog megfelelően futni, ezért letiltottam. Először is újra engedélyezzük a triggerek bekapcsolását a main ágon lévő commitok esetében.

  4. Cserélje le a fájl tetején található meglévő trigger sort a következő kódrészletre. Ez elindítja a folyamat futtatását minden alkalommal, amikor véglegesítés történik a főágban.

    trigger:
    - 'main'
    

Folyamaton keresztül elérhető változók definiálása

Andy: Két folyamatváltozót kell hozzáadnunk. Az egyik szerepet a ranglista-adattár nevének megadása játssza, amely a következő: ranglista. A másik az üzembe helyezés során az AKS és az ACR példányok közötti megosztáshoz használt kép letöltési titok neve.

  1. Adja hozzá a következő kiemelt kódot a variables szakaszhoz.

    variables:
      buildConfiguration: 'Release'
      leaderboardRepository: 'leaderboard'
      webRepository: 'web'
      tag: '$(Build.BuildId)'
      imagePullSecret: 'secret'
    

Docker-rendszerkép létrehozása és közzététele az Azure Container Registryben

Andy: A webalkalmazás Docker-tárolóként való létrehozásához már van egy feladatunk, amelyet közzéteszünk a tárolóregisztrációs adatbázisunkban. Használhatunk egy második feladatot is, hogy ugyanezt tegyünk a ranglistánkon is.

  1. Adjon hozzá egy második Docker@2 feladatot a ranglista-tároló létrehozásához és közzétételéhez az alábbi kiemelt kódrészlet használatával. Adja hozzá ezt a feladatot közvetlenül a webtároló-tevékenység után.

    - task: Docker@2
      displayName: 'Build and push the web image to container registry'
      inputs:
        command: buildAndPush
        buildContext: $(Build.Repository.LocalPath)
        repository: $(webRepository)
        dockerfile: '$(Build.SourcesDirectory)/Tailspin.SpaceGame.Web/Dockerfile'
        containerRegistry: 'Container Registry Connection'
        tags: |
          $(tag)
    
    - task: Docker@2
      displayName: 'Build and push the leaderboard image to container registry'
      inputs:
        command: buildAndPush
        buildContext: $(Build.Repository.LocalPath)
        repository: $(leaderboardRepository)
        dockerfile: '$(Build.SourcesDirectory)/Tailspin.SpaceGame.LeaderboardContainer/Dockerfile'
        containerRegistry: 'Container Registry Connection'
        tags: |
          $(tag)
    

Borravaló

Győződjön meg arról, hogy az itt hozzáadott tevékenység konzisztens behúzást használ az előző tevékenységhez, mivel a whitespace fontos egy YAML-fájlban.

A Kubernetes-jegyzékek közzététele

Andy: azt hiszem, továbbléphetünk a következő fázisra. Látsz valamit, ami hiányzik?

Mara: Említette, hogy a forrásprojektben vannak olyan jegyzékfájlok, amelyek meghatározzák az üzembe helyezést, valamint a Kubernetes által az üzembe helyezéshez szükséges szolgáltatásokat. Ezeket közzé kell tenni, mielőtt befejezzük ezt a szakaszt.

Andy: Kell nekünk? Nem lesznek továbbra is a helyi lemezen?

Mara: Az lenne a helyzet, ha az üzembe helyezési feladatokat ugyanabban a fázisban adnánk hozzá, mint a builddel. Azonban mivel az üzembe helyezési feladatok a saját üzembe helyezési szakaszukban történnek, egy új környezetben futnak, valószínűleg még egy másik végrehajtó egységen is. Mindenképpen közzé kell tnnünk mindent, amit ez a szakasz hoz létre, amire a másik szakasznak szüksége van.

Andy: Ez egy nagyszerű pont. Könnyű megtenni? Csak meg kell győződnünk arról, hogy a manifesztfájlok a mappából át lesznek másolva az új ügynökhöz.

Mara: Erre való a PublishBuildArtifacts@1 feladat. Olyan gyakori, hogy még egy rövidítés is van rá, publish.

  1. Adjon hozzá egy publish feladatot, amely a jegyzékfájlokat mappát tárolja egy későbbi szakaszhoz, ahogyan az az alábbi kódrészletben látható. Győződjön meg arról, hogy a feladat behúzása megegyezik az előző feladat behúzásával.

    - task: Docker@2
      displayName: 'Build and push the leaderboard image to container registry'
      inputs:
        command: buildAndPush
        buildContext: $(Build.Repository.LocalPath)
        repository: $(leaderboardRepository)
        dockerfile: '$(Build.SourcesDirectory)/Tailspin.SpaceGame.LeaderboardContainer/Dockerfile'
        containerRegistry: 'Container Registry Connection'
        tags: |
          $(tag)
    
    - publish: '$(Build.SourcesDirectory)/manifests'
      artifact: manifests
    

Az üzembe helyezési szakasz cseréje

Mara: lecserélem a meglévő üzembe helyezési szakaszt egy olyanra, amely üzembehelyezési feladatot használ. A üzembehelyezési feladat egy speciális feladat, amely lehetővé teszi az üzembe helyezés társítását a korábban létrehozott Azure DevOps-környezettel. Ez megkönnyíti az üzembe helyezési előzmények nyomon követését, ami különösen hasznos lesz, mivel megoldásaink kifinomultabbak lesznek.

  1. Távolítsa el a meglévő Üzembe helyezés szakaszt (mindazt, ami a build szakasz után van), és cserélje le a következő kódrészletre. Jegyezze fel a kiemelt sort, amely a használni kívánt üzembehelyezési környezetet jelzi.

    - stage: 'Deploy'
      displayName: 'Deploy the containers'
      dependsOn: Build
      jobs:
      - deployment: Deploy
        displayName: Deploy
        pool:
          vmImage: 'ubuntu-20.04'
        environment: 'Dev'
        variables:
        - group: Release
        strategy:
          runOnce:
            deploy:
              steps:
    

    Mara: Az üzembe helyezés első lépéseként letöltjük a korábban közzétett jegyzékösszetevőket a DownloadBuildArtifacts@0 feladat használatával.

    Andy: Hadd találjam ki, van-e download rövidítés erre a feladatra?

    Mara: Pontosan helyes! A current azonosítóval jelezhetjük, hogy a pipeline aktuális futtatásából származó artefaktumot szeretnénk használni.

  2. Adja hozzá a kiemelt sorokat a Üzembe helyezés szakasz első lépéseként.

    - stage: 'Deploy'
      displayName: 'Deploy the containers'
      dependsOn: Build
      jobs:
      - deployment: Deploy
        displayName: Deploy
        pool:
          vmImage: 'ubuntu-20.04'
        environment: 'spike.default'
        variables:
        - group: Release
        strategy:
          runOnce:
            deploy:
              steps:
              - download: current
                artifact: manifests
    

    Andy: Most létre kell hoznunk egy kép letöltési titoktartási kódot, amely megosztva lesz az ACR és az AKS példányaink között. Tudja, hogy van-e olyan feladat, amit használhatunk?

    Mara: Az imént néztem utána, és szerencsénk van. A KubernetesManifest@0 feladat támogatja a szükséges titkos kód létrehozásához szükséges műveletet.

Kubernetes feladatleírás

A Kubernetes-jegyzékfeladat a Kuberneteshez szükséges összes általános üzembe helyezési művelet kezelésére szolgál. Több action beállítást támogat, amelyek a titkos kódok létrehozásától a rendszerképek üzembe helyezéséig terjednek. Ebben az esetben a createSecret műveletet használja a következő paraméterekkel együtt:

  • action a futtatandó funkciót jelzi. Ebben az esetben createSecret létrehozza a megosztott titkos kulcsot.
  • connectionType a használni kívánt szolgáltatáskapcsolat típusát adja meg. Beállítások: azureResourceManager vagy kubernetesServiceConnection.
  • secretName megadja a létrehozandó titkos kód nevét.
  • dockerRegistryEndpoint az Azure Container Registry Services-kapcsolat nevét adja meg.
  • azureSubscriptionConnection az ARM Services-kapcsolat nevét adja meg.
  • azureResourceGroup az erőforráscsoport nevét adja meg.
  • Az kubernetesCluster az AKS-fürt nevét adja meg.
  • namespace megadja, hogy a művelet mely Kubernetes-névtérre vonatkozik.
  1. Adja hozzá a következő kódrészletet a csővezeték végére. Győződjön meg arról, hogy az erőforráscsoport és a fürt neve megegyezik a korábban létrehozott nevekkel. Győződjön meg arról, hogy ennek a feladatnak a behúzása megegyezik a letöltési feladat behúzásával.

    - task: KubernetesManifest@1
      displayName: Create imagePullSecret
      inputs:
        action: createSecret
        connectionType: azureResourceManager
        secretName: $(imagePullSecret)
        dockerRegistryEndpoint: 'Container Registry Connection'
        azureSubscriptionConnection: 'Kubernetes Cluster Connection'
        azureResourceGroup: 'tailspin-space-game-rg'
        kubernetesCluster: 'tailspinspacegame-24591'
        namespace: 'default'
    

    Andy: Az utolsó lépés a rendszerképek Kubernetes-fürtön való telepítésének indítása. A dokumentáció alapján úgy tűnik, hogy ugyanazt a feladatot használhatjuk, de egy másik művelettel és paraméterekkel.

    • action a futtatandó funkciót jelzi. Ebben az esetben a deploy-t az AKS-fürtön való üzembe helyezésre használjuk.
    • connectionType a használni kívánt szolgáltatáskapcsolat típusát adja meg. Beállítások: azureResourceManager vagy kubernetesServiceConnection.
    • azureSubscriptionConnection az ARM Services-kapcsolat nevét adja meg.
    • azureResourceGroup az erőforráscsoport nevét adja meg.
    • kubernetesCluster az általad megadott AKS-fürt nevét jelöli.
    • namespace megadja, hogy a művelet mely Kubernetes-névtérre vonatkozik.
    • imagePullSecrets megadja a tárolóregisztrációs adatbázisból való lekéréshez szükséges titkos kulcsok listáját.
    • containers az üzembe helyezendő tárolólemezképek listáját adja meg.
  2. Adja hozzá a következő kódrészletet a folyamatlánc végéhez. Győződjön meg arról, hogy az erőforráscsoport és a fürt neve megegyezik a korábban létrehozottakkal. Győződjön meg arról, hogy a feladat behúzása megegyezik az előző feladat behúzásával.

    - task: KubernetesManifest@1
      displayName: Deploy to Kubernetes cluster
      inputs:
        action: deploy
        connectionType: azureResourceManager
        azureSubscriptionConnection: 'Kubernetes Cluster Connection'
        azureResourceGroup: 'tailspin-space-game-rg'
        kubernetesCluster: 'tailspinspacegame-24591'
        namespace: 'default'
        manifests: |
          $(Pipeline.Workspace)/manifests/deployment.yml
          $(Pipeline.Workspace)/manifests/service.yml
        imagePullSecrets: |
          $(imagePullSecret)
        containers: |
          $(RegistryName)/$(webRepository):$(tag)
          $(RegistryName)/$(leaderboardRepository):$(tag)
    

A folyamat futtatása

  1. Válassza mentése lehetőséget a lap jobb felső sarkában. Válassza a Mentés lehetőséget a véglegesítési üzenet megerősítéséhez.

  2. Válassza a Futtatáslehetőséget, erősítse meg az ág nevét, majd válassza a Futtatás lehetőséget a folyamatfuttatás elindításához.

  3. Válassza ki a Csővezetékeklehetőséget, majd a csővezetékét a naplók futás közbeni megtekintéséhez.

  4. A folyamatfuttatás befejezése után válassza Környezetek lehetőséget a bal oldali panelen, majd válassza ki a Fejlesztői környezetet az üzembehelyezési feladatok megtekintéséhez.

  5. Most nézzük meg az üzembe helyezett webalkalmazást és API-végpontot. Ehhez le kell szereznünk a webes és ranglista szolgáltatások külső IP-címét.

  6. Lépjen az Azure Portalra, válassza ki az AKS-fürtöt, majd válassza a Szolgáltatások és belépési pontoklehetőséget.

    Képernyőkép a webes és ranglista-szolgáltatások külső IP-címeinek megkereséséről.

  7. Válassza ki a webes szolgáltatáshoz tartozó külső IP- a webhely AKS-en való megtekintéséhez.

    Képernyőkép a Space Game webhelyről.

  8. Lépjen vissza az Azure Portal ablakába, ahol abbahagyta, majd másolja a ranglista szolgáltatáshoz tartozó külső IP-. Ez az IP-cím az, ahol a ranglista API nyilvánosan üzemel.

  9. Cserélje le a következő hivatkozásban található helyőrzőt a másolt külső IP-címre. Hozzáadhat egy pageSize=10 lekérdezési paramétert is, amely megkönnyíti a JSON-válasz megtekintését a böngészőben. Új böngészőlapon használjon az alábbihoz hasonló URL-címet.

    http://[IP]/api/Leaderboard?pageSize=10
    
  10. Az AKS-fürtben üzemeltetett ranglista API nyers JSON-válaszát megtekintheti. Most már rendelkezik egy REST API-val, amelyet más alkalmazásokból hívhat meg.

    A ranglista szolgáltatás JSON-válaszát megjelenítő webböngésző képernyőképe.

Andy: Ez nagyszerű volt! Azt hiszem, a Kubernetes használata nagyszerű módszer lenne arra, hogy szélesebb körű mikroszolgáltatási stratégiát fogadjunk el.