Build and deploy to Azure Kubernetes Service with Azure Pipelines

Azure DevOps Services

Az Azure Pipelines használatával automatikusan üzembe helyezheti az Azure Kubernetes Service-ben (AKS). Az Azure Pipelines lehetővé teszi a folyamatos integráció (CI) és a folyamatos teljesítés (CD) használatával történő buildelést, tesztelést és üzembe helyezést az Azure DevOps használatával.

Ebből a cikkből megtudhatja, hogyan hozhat létre olyan folyamatot, amely folyamatosan fejleszti és telepíti az alkalmazást. Minden alkalommal, amikor módosítja a kódot egy Dockerfile-t tartalmazó adattárban, a rendszer leküldi a rendszer a rendszerképeket az Azure Container Registrybe, majd a jegyzékfájlokat az AKS-fürtön helyezi üzembe.

Előfeltételek

A kód letöltése

A mintaalkalmazást és egy Dockerfile-t tartalmazó következő adattár elágaztatása:

https://github.com/MicrosoftDocs/pipelines-javascript-docker

Azure-erőforrások létrehozása

Jelentkezzen be az Azure Portalra, majd válassza a Cloud Shell gombot a jobb felső sarokban. AKS-fürt létrehozásához használja az Azure CLI-t vagy a PowerShellt.

Container Registry létrehozása

# Create a resource group
az group create --name myapp-rg --location eastus

# Create a container registry
az acr create --resource-group myapp-rg --name mycontainerregistry --sku Basic

# Create a Kubernetes cluster
az aks create \
    --resource-group myapp-rg \
    --name myapp \
    --node-count 1 \
    --enable-addons monitoring \
    --generate-ssh-keys

Bejelentkezés az Azure Pipelinesba

Jelentkezzen be az Azure Pipelinesba. A bejelentkezés után a böngésző megtekinti https://dev.azure.com/my-organization-name és megjeleníti az Azure DevOps-irányítópultot.

A kijelölt szervezeten belül hozzon létre egy projektet. Ha nem rendelkezik projekttel a szervezetében, megjelenik egy Projekt létrehozása az első lépések képernyőre. Ellenkező esetben válassza a Projekt létrehozása gombot az irányítópult jobb felső sarkában.

A folyamat létrehozása

Csatlakozás és válassza ki az adattárat

  1. Jelentkezzen be az Azure DevOps-szervezetbe, és nyissa meg a projektet.

  2. Lépjen a Folyamatok elemre, majd válassza az Új folyamat lehetőséget.

  3. Végezze el a varázsló lépéseit úgy, hogy először a GitHubot választja a forráskód helyeként.

  4. Előfordulhat, hogy a rendszer átirányítja a GitHubra a bejelentkezéshez. Ha igen, adja meg a GitHub hitelesítő adatait.

  5. Amikor megjelenik az adattárak listája, válassza ki az adattárat.

  6. Előfordulhat, hogy a Rendszer átirányítja a GitHubra az Azure Pipelines alkalmazás telepítéséhez. Ha igen, válassza a Jóváhagyás > telepítés lehetőséget.

  7. Válassza az Üzembe helyezés az Azure Kubernetes Service-ben lehetőséget.

  8. Ha a rendszer kéri, válassza ki azt az előfizetést, amelyben létrehozta a beállításjegyzéket és a fürtöt.

  9. Válassza ki a fürtöt myapp .

  10. Névtér esetén válassza a Meglévő, majd az Alapértelmezett lehetőséget.

  11. Válassza ki a tárolóregisztrációs adatbázis nevét.

  12. A rendszerkép nevét az alapértelmezett értékre állíthatja.

  13. Állítsa a szolgáltatásportot 8080-ra.

  14. Állítsa be a Felülvizsgálati alkalmazás engedélyezése lekéréses kérelmekhez jelölőnégyzetet, hogy az alkalmazással kapcsolatos konfigurációt a következő lépésekben automatikusan generált YAML-folyamat tartalmazza.

  15. Válassza az Ellenőrzés és konfigurálás lehetőséget.

    Amikor az Azure Pipelines létrehozza a folyamatot, a folyamat a következő lesz:

    • Hozzon létre egy Docker-beállításjegyzék-kapcsolatot , amely lehetővé teszi a folyamat számára a rendszerképek leküldését a tárolóregisztrációs adatbázisba.

    • Hozzon létre egy környezetet és egy Kubernetes-erőforrást a környezetben. RBAC-kompatibilis fürtök esetén a létrehozott Kubernetes-erőforrás implicit módon hozza létre a ServiceAccount és a RoleBinding objektumokat a fürtben, hogy a létrehozott ServiceAccount ne hajthasson végre műveleteket a kiválasztott névtéren kívül.

    • Hozzon létre egy azure-pipelines.yml fájlt, amely meghatározza a folyamatot.

    • Kubernetes-jegyzékfájlok létrehozása. Ezek a fájlok a deployment.yml és service.yml sablonok hidratálásával jönnek létre a kiválasztott beállítások alapján. Ha elkészült, válassza a Mentés és futtatás lehetőséget.

  16. Válassza a Mentés és futtatás lehetőséget.

  17. A véglegesítési üzenetet módosíthatja úgy, mint a Folyamat hozzáadása az adattárhoz. Ha elkészült, válassza a Mentés és futtatás lehetőséget az új folyamat adattárba való véglegesítéséhez, majd kezdje el az új folyamat első futtatását!

Az alkalmazás üzembe helyezésének megtekintése

A folyamat futása közben figyelje meg a buildelési fázist, majd az üzembe helyezési szakaszt, és lépjen a kékről (futó) a zöldre (befejezve). Kiválaszthatja a folyamat működés közbeni megtekintéséhez szükséges fázisokat és feladatokat.

Megjegyzés:

Ha Microsoft által üzemeltetett ügynököt használ, hozzá kell adnia a Microsoft által üzemeltetett ügynök IP-tartományát a tűzfalhoz. Get the weekly list of IP ranges from the weekly JSON file, which is published every Wednesday. The new IP ranges become effective the following Monday. For more information, see Microsoft-hosted agents. To find the IP ranges that are required for your Azure DevOps organization, learn how to identify the possible IP ranges for Microsoft-hosted agents.

A folyamat futtatása után vizsgálja meg, hogy mi történt, majd tekintse meg az üzembe helyezett alkalmazást. A folyamat összefoglalásából:

  1. Válassza a Környezetek lapot.

  2. Válassza a Környezet megtekintése lehetőséget.

  3. Válassza ki az alkalmazás példányát a telepített névtérhez. Ha az alapértelmezett értékeket használta, akkor ez a myapp alkalmazás az alapértelmezett névtérben.

  4. Válassza a Szolgáltatások lapot.

  5. Jelölje ki és másolja a külső IP-címet a vágólapra.

  6. Nyisson meg egy új böngészőlapot vagy ablakot, és adja meg <a következő IP-címet>: 8080.

Ha a mintaalkalmazást készíti, akkor a Hello World megjelenik a böngészőben.

A folyamat felépítése

Amikor befejezte a beállítások kiválasztását, majd folytatta az Azure Pipelines által létrehozott folyamat ellenőrzését és konfigurálását az Üzembe helyezés az Azure Kubernetes Service-sablonnal .

A buildelési szakasz a Docker-feladat használatával hozza létre és küldi el a rendszerképet az Azure Container Registrybe.

- stage: Build
  displayName: Build stage
  jobs:  
  - job: Build
    displayName: Build job
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)

    - task: PublishPipelineArtifact@1
      inputs:
        artifactName: 'manifests'
        path: 'manifests'

Az üzembe helyezési feladat a Kubernetes jegyzékfeladatával hozza létre a imagePullSecret Kubernetes-fürtcsomópontok által az Azure Container Registry-erőforrásból való lekéréshez szükségest. A jegyzékfájlokat a Kubernetes-jegyzékfeladat ezután a Kubernetes-fürtben való üzembe helyezéshez használja. A jegyzékfájlokat a service.ymldeployment.ymlrendszer az Üzembe helyezés az Azure Kubernetes Service-sablon használatakor hozta létre.

- stage: Deploy
  displayName: Deploy stage
  dependsOn: Build
  jobs:
  - deployment: Deploy
    displayName: Deploy job
    pool:
      vmImage: $(vmImageName)
    environment: 'myenv.aksnamespace' #customize with your environment
    strategy:
      runOnce:
        deploy:
          steps:
          - task: DownloadPipelineArtifact@2
            inputs:
              artifactName: 'manifests'
              downloadPath: '$(System.ArtifactsDirectory)/manifests'

          - task: KubernetesManifest@0
            displayName: Create imagePullSecret
            inputs:
              action: createSecret
              secretName: $(imagePullSecret)
              namespace: $(k8sNamespace)
              dockerRegistryEndpoint: $(dockerRegistryServiceConnection)

          - task: KubernetesManifest@0
            displayName: Deploy to Kubernetes cluster
            inputs:
              action: deploy
              namespace: $(k8sNamespace)
              manifests: |
                $(System.ArtifactsDirectory)/manifests/deployment.yml
                $(System.ArtifactsDirectory)/manifests/service.yml
              imagePullSecrets: |
                $(imagePullSecret)
              containers: |
                $(containerRegistry)/$(imageRepository):$(tag)

Clean up resources

Ha végzett a létrehozott erőforrásokkal, az alábbi paranccsal törölheti őket:

az group delete --name myapp-rg

Adja meg y , amikor a rendszer kéri.

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019

Az Azure Pipelines használatával automatikusan üzembe helyezheti az Azure Kubernetes Service-ben (AKS). Az Azure Pipelines lehetővé teszi a folyamatos integráció (CI) és a folyamatos teljesítés (CD) használatával történő buildelést, tesztelést és üzembe helyezést az Azure DevOps használatával.

Ebből a cikkből megtudhatja, hogyan hozhat létre olyan folyamatot, amely folyamatosan fejleszti és telepíti az alkalmazást. Minden alkalommal, amikor módosítja a kódot egy Dockerfile-t tartalmazó adattárban, a rendszer leküldi a rendszer a rendszerképeket az Azure Container Registrybe, majd a jegyzékfájlokat az AKS-fürtön helyezi üzembe.

Előfeltételek

A kód letöltése

A mintaalkalmazást és egy Dockerfile-t tartalmazó következő adattár elágaztatása:

https://github.com/MicrosoftDocs/pipelines-javascript-docker

Azure-erőforrások létrehozása

Jelentkezzen be az Azure Portalra, majd válassza a Cloud Shell gombot a jobb felső sarokban. AKS-fürt létrehozásához használja az Azure CLI-t vagy a PowerShellt.

Container Registry létrehozása

# Create a resource group
az group create --name myapp-rg --location eastus

# Create a container registry
az acr create --resource-group myapp-rg --name mycontainerregistry --sku Basic

# Create a Kubernetes cluster
az aks create \
    --resource-group myapp-rg \
    --name myapp \
    --node-count 1 \
    --enable-addons monitoring \
    --generate-ssh-keys 

Hitelesítés konfigurálása

Ha az Azure Container Registryt (ACR) az Azure Kubernetes Service-szel (AKS) használja, létre kell hoznia egy hitelesítési mechanizmust. Ez kétféleképpen érhető el:

  1. AKS-hozzáférés biztosítása az ACR-hez. Lásd: Hitelesítés az Azure Container Registryvel az Azure Kubernetes Service-ből.

  2. Kubernetes-rendszerkép lekérési titkos kód használata. A rendszerkép lekéréses titkos kódjának létrehozása a Kubernetes üzembe helyezési feladatával végezhető el.

Kiadási folyamat létrehozása

A CI beállításához használt buildelési folyamat már létrehozott egy Docker-rendszerképet, és leküldte egy Azure Container Registrybe. Emellett egy Helm-diagramot is csomagolt és tett közzé összetevőként. A kiadási folyamatban a tárolórendszerképet Helm-alkalmazásként fogjuk üzembe helyezni az AKS-fürtben.

  1. Az Azure Pipelinesban nyissa meg a build összegzését.

  2. A build összegzésében válassza a Kiadás ikont egy új kiadási folyamat elindításához.

    Ha korábban létrehozott egy kiadási folyamatot, amely ezeket a buildösszetevőket használja, a rendszer egy új kiadás létrehozását kéri. Ebben az esetben lépjen a Kiadások lapra, és az ikon kiválasztásával kezdjen el egy új kiadási + folyamatot.

  3. Válassza az Üres feladat sablont.

  4. Nyissa meg a Feladatok lapot, és válassza az Ügynök feladatot.

  5. Válasszon egy + új feladatot, és vegyen fel egy Helm-eszköz telepítőfeladatot. Ez biztosítja, hogy a következő feladatokat futtató ügynök telepítve legyen a Helm és a Kubectl használatával.

  6. Válasszon + újra, és vegyen fel egy Csomag és a Helm-diagramok üzembe helyezését . Konfigurálja a feladat beállításait az alábbiak szerint:

    • Csatlakozás ion típusa: Válassza az Azure Resource Managertaz AKS-fürthöz való csatlakozáshoz egy Azure-szolgáltatáskapcsolat használatával. Ha bármely Kubernetes-fürthöz kubeconfig vagy szolgáltatásfiók használatával szeretne csatlakozni, válassza a Kubernetes Service Csatlakozás ion lehetőséget. Ebben az esetben a következő beállításhoz létre kell hoznia és ki kell választania egy Kubernetes-szolgáltatáskapcsolatot az Azure-előfizetés helyett.

    • Azure-előfizetés: Válasszon egy kapcsolatot az Elérhető Azure Service Csatlakozás ions listájából, vagy hozzon létre egy korlátozottabb engedélykapcsolatot az Azure-előfizetéshez. Ha megjelenik egy Engedélyezés gomb a bemenet mellett, azzal engedélyezheti az Azure-előfizetéshez való csatlakozást. Ha nem látja a szükséges Azure-előfizetést az előfizetések listájában, a kapcsolat manuális beállításához tekintse meg az Azure-szolgáltatáskapcsolat létrehozása című témakört.

    • Erőforráscsoport: Adja meg vagy válassza ki az AKS-fürtöt tartalmazó erőforráscsoportot.

    • Kubernetes-fürt: Adja meg vagy válassza ki a létrehozott AKS-fürtöt.

    • Parancs: Válassza az init elemet Helm-parancsként. Ez telepíti a Tillert a futó Kubernetes-fürtre. Emellett beállítja a szükséges helyi konfigurációt is. Tick Use canary image version to install the latest prerelease version of Tiller. Dönthet úgy is, hogy frissíti a Tillert, ha az előre telepítve van a Tiller frissítése jelölőnégyzet bejelölésével. Ha ezek a beállítások engedélyezve vannak, a feladat fut helm init --canary-image --upgrade

  7. Válassza + ki az ügynökfeladatot , és vegyen fel egy másik csomagcsomagot, és helyezze üzembe a Helm-diagramokat . Konfigurálja a feladat beállításait az alábbiak szerint:

    • Kubernetes-fürt: Adja meg vagy válassza ki a létrehozott AKS-fürtöt.

    • Névtér: Adja meg a Kubernetes-fürt névterét, ahol telepíteni szeretné az alkalmazást. A Kubernetes több, ugyanazon fizikai fürt által támogatott virtuális fürtöt támogat. Ezeket a virtuális fürtöket névtereknek nevezzük. A névterek használatával különböző környezeteket hozhat létre, például fejlesztést, tesztelést és előkészítést ugyanabban a fürtben.

    • Parancs: Válassza a Frissítés lehetőséget Helm-parancsként. Ezzel a feladattal bármelyik Helm-parancsot futtathatja, és argumentumként adhat meg parancsbeállításokat. A frissítés kiválasztásakor a tevékenység további mezőket jelenít meg:

      • Diagram típusa: Válassza ki a fájl elérési útját. Másik lehetőségként megadhatja a diagram nevét , ha URL-címet vagy diagramnevet szeretne megadni. Ha például a diagram neve, stable/mysqla feladat végrehajtása helm upgrade stable/mysql

      • Diagram elérési útja: Ez lehet egy csomagolt diagram elérési útja, vagy egy kicsomagolt diagramkönyvtár elérési útja. Ebben a példában egy CI-build használatával teszi közzé a diagramot, ezért válassza ki a fájlcsomagot a fájlválasztóval, vagy írja be a $(System.DefaultWorkingDirectory)/**/*.tgz

      • Kiadás neve: Adja meg a kiadás nevét, például: azuredevops

      • Podok ismételt létrehozása: Jelölje be ezt a jelölőnégyzetet, ha a kiadás során konfigurációváltozás történt, és egy futó podot szeretne lecserélni az új konfigurációra.

      • Értékek alaphelyzetbe állítása: Jelölje be ezt a jelölőnégyzetet, ha azt szeretné, hogy a diagramba beépített értékek felülbírálják a tevékenység által biztosított összes értéket.

      • Kényszerítés: Jelölje be ezt a jelölőnégyzetet, ha ütközések esetén törölni szeretné a frissítést és a visszaállítást, újra létrehozza az erőforrást, és újratelepíti a teljes kiadást. Ez olyan esetekben hasznos, amikor a javítások alkalmazása meghiúsulhat (például szolgáltatások esetében, mert a fürt IP-címe nem módosítható).

      • Argumentumok: Adja meg a Helm-parancs argumentumait és értékeit; ebben a példában --set image.repository=$(imageRepoName) --set image.tag=$(Build.BuildId) Ebből a szakaszból megtudhatja, hogy miért használjuk ezeket az argumentumokat.

      • TLS engedélyezése: Jelölje be ezt a jelölőnégyzetet a Helm és a Tiller közötti erős TLS-alapú kapcsolatok engedélyezéséhez.

      • CA-tanúsítvány: Adjon meg egy feltöltendő hitelesítésszolgáltatói tanúsítványt, amely a Tiller- és Helm-ügyfél tanúsítványainak kiállításához használható.

      • Tanúsítvány: A Tiller- vagy Helm-ügyféltanúsítvány megadása

      • Kulcs: A Tiller- vagy Helm-ügyfélkulcs megadása

  8. A folyamat Változók lapján adjon hozzá egy imageRepoName nevű változót, és állítsa be az értéket a Helm-lemezképtár nevére. Ez általában a következő formátumban van: example.azurecr.io/coderepository

  9. Mentse a kiadási folyamatot.

A Helm-frissítési feladatban használt argumentumok

A buildelési folyamatban a tároló lemezképe fel van címkézve $(Build.BuildId) , és a rendszer leküldi egy Azure Container Registrybe. A Helm-diagramokban paraméterezheti a tárolórendszerkép részleteit, például a nevet és a címkét, mivel ugyanaz a diagram használható különböző környezetekben való üzembe helyezéshez. Ezeket az értékeket a values.yaml fájlban is meg lehet adni, vagy felül lehet bírálni egy felhasználó által megadott értékfájllal, amelyet a paraméterek felülírhatnak --set a Helm telepítése vagy frissítése során.

Ebben a példában a következő argumentumokat adjuk át:

--set image.repository=$(imageRepoName) --set image.tag=$(Build.BuildId)

Az érték $(imageRepoName) a Változók lapon (vagy a YAML-fájl változók szakaszában) lett beállítva. Másik lehetőségként közvetlenül lecserélheti a képtárház nevére az argumentumértékben vagy a --set values.yaml fájlban. Például:

  image:
    repository: VALUE_TO_BE_OVERRIDDEN
    tag: latest

Egy másik lehetőség, ha a feladat Értékbeállítás beállításával vesszővel tagolt kulcs-érték párként adja meg az argumentumértékeket.

Kiadás létrehozása az alkalmazás üzembe helyezéséhez

Most már készen áll egy kiadás létrehozására, ami azt jelenti, hogy elindítja a kiadási folyamat futtatását egy adott build által létrehozott összetevőkkel. Ez a build üzembe helyezését eredményezi:

  1. Válassza a + Kiadás lehetőséget, és válassza a Kiadás létrehozása lehetőséget.

  2. Az Új kiadás létrehozása panelen ellenőrizze, hogy a használni kívánt összetevő verziója ki van-e jelölve, és válassza a Létrehozás lehetőséget.

  3. Válassza ki a kiadási hivatkozást az információs sáv üzenetében. Például: "A Release-1 kiadás létrejött".

  4. A folyamat nézetben válassza a folyamat szakaszaiban található állapothivatkozást a naplók és az ügynök kimenetének megtekintéséhez.