Natív felhőbeli alkalmazás manuális üzembe helyezése az Azure Kubernetes Service-ben

Befejeződött

Ahhoz, hogy automatizálhassa a webhely üzembe helyezését, manuálisan kell üzembe helyeznie a meglévő eShop-alkalmazást az Azure Kubernetes Service-ben (AKS). Létrehozhatja az Azure-erőforrásokat, és üzembe helyezheti az alkalmazást az AKS-ben Azure CLI-parancsokkal és bash-szkriptekkel. Végül létre kell hoznia egy Azure Active Directory (Azure AD) szolgáltatásnevet, amely lehetővé teszi a GitHub Actions üzembe helyezését az AKS-ben és az Azure Container Registryben.

A parancsok az alábbi erőforrásokat hozzák létre az eShop alkalmazás frissített verziójának üzembe helyezéséhez.

  • Kiépít egy Azure Container Registryt (ACR), majd leküldi a rendszerképeket a beállításjegyzékbe.
  • Kiépíthet egy AKS-fürtöt, majd üzembe helyezheti a tárolókat a fürtben.
  • Tesztelje az üzembe helyezést.
  • Szolgáltatásnevek létrehozásával engedélyezheti a GitHub Actions üzembe helyezését az AKS-ben és az Azure Container Registryben.

Fontos

A kezdés előtt győződjön meg arról, hogy teljesítette az előfeltételeket .

A fejlesztői környezet megnyitása

Használhat egy GitHub-kódteret, amely a gyakorlatot üzemelteti, vagy elvégezheti a gyakorlatot helyileg a Visual Studio Code-ban.

A GitHub Codespaces beállítása

https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops Az adattár elágazása saját GitHub-fiókjába. Ezután az új elágazáson:

  1. Válassza a Kód lehetőséget.
  2. Válassza a Codespaces (Kódterek) lapot.
  3. Kattintson az ikonra a + kódtér létrehozásához.

A GitHub több percet vesz igénybe a kódtér létrehozásához és konfigurálásához. Amikor a folyamat befejeződött, megjelenik a gyakorlat kódfájljai.

Nem kötelező: Visual Studio Code beállítása

A Visual Studio Code használatához forkozza el az https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops adattárat a saját GitHub-fiókjához, és klónozza helyileg. Ekkor:

  1. Telepítse a rendszerigényléseket a Dev Container Visual Studio Code-ban való futtatásához.
  2. Győződjön meg arról, hogy a Docker fut.
  3. Egy új Visual Studio Code-ablakban nyissa meg a klónozott adattár mappáját
  4. Nyomja le a Ctrl Shift+P billentyűkombinációt +a parancskatalógus megnyitásához.
  5. Keresés: >Tárolók fejlesztése: Újraépítés és újranyitás a tárolóban
  6. A Visual Studio Code helyileg hozza létre a fejlesztési tárolót.

Tárolók létrehozása

  1. A terminálablakban futtassa ezt a dotnet CLI-parancsot:

    dotnet publish /p:PublishProfile=DefaultContainer 
    

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

  1. A terminálablakban jelentkezzen be az Azure-ba ezzel az Azure CLI-paranccsal:

    az login --use-device-code
    
  2. A kijelölt Azure-előfizetés megtekintése.

    az account show -o table
    

    Ha nem a megfelelő előfizetés van kiválasztva, az az account set paranccsal válassza ki a megfelelőt.

  3. Futtassa a következő Azure CLI-parancsot az Azure-régiók listájának és a hozzá társított névnek a lekéréséhez:

    az account list-locations -o table
    

    Keresse meg az Önhöz legközelebbi régiót, és használja a következő lépésben a csere [Closest Azure region]

  4. Futtassa a következő bash-utasításokat:

    export LOCATION=[Closest Azure region]
    export RESOURCE_GROUP=rg-eshop
    export CLUSTER_NAME=aks-eshop
    export ACR_NAME=acseshop$SRANDOM
    

    Az előző parancsok környezeti változókat hoznak létre, amelyeket a következő Azure CLI-parancsokban fog használni. A LOCATION-t egy Önhöz közeli Azure-régióra kell módosítania, például eastusra. Ha más nevet szeretne az erőforráscsoportnak, az AKS-fürtnek vagy az ACR-nek, módosítsa ezeket az értékeket. Ha meg szeretné tekinteni az új adattárakat az Azure Portalon, rendelje hozzá magát alkalmazásmegfelelőségi automatizálási Rendszergazda istratorként a tárolóregisztrációs adatbázis Hozzáférés-vezérlési (IAM) szolgáltatásában.

  5. Futtassa az alábbi Azure CLI-parancsokat:

    az group create --name $RESOURCE_GROUP --location $LOCATION
    az acr create --resource-group $RESOURCE_GROUP --name $ACR_NAME --sku Basic
    az acr login --name $ACR_NAME
    

    Ha a futtatáskor az acr login --name $ACR_Name hitelesítési hibát kap, be kell kapcsolnia Rendszergazda felhasználót az újonnan létrehozott tárolóregisztrációban az Azure-ban a Gépház – Hozzáférési kulcsok területen. Az Azure kéri, hogy adja meg ezeket a hitelesítő adatokat a folytatáshoz. A hitelesítést is újra meg kell végeznie.az login --use-device-code

    Ezek a parancsok létrehoznak egy erőforráscsoportot, amely tartalmazza az Azure-erőforrásokat, egy ACR-t a rendszerképekhez, majd bejelentkezik az ACR-be. Ez eltarthat néhány percig, amíg megjelenik ez a kimenet:

      ...
      },
      "status": null,
      "systemData": {
        "createdAt": "2023-10-19T09:11:51.389157+00:00",
        "createdBy": "",
        "createdByType": "User",
        "lastModifiedAt": "2023-10-19T09:11:51.389157+00:00",
        "lastModifiedBy": "",
        "lastModifiedByType": "User"
      },
      "tags": {},
      "type": "Microsoft.ContainerRegistry/registries",
      "zoneRedundancy": "Disabled"
    }
    Login Succeeded
    
  6. A képek címkézéséhez és a létrehozott ACR-be való leküldéséhez futtassa az alábbi parancsokat:

    docker tag store $ACR_NAME.azurecr.io/storeimage:v1
    docker tag products $ACR_NAME.azurecr.io/productservice:v1
    
    docker push $ACR_NAME.azurecr.io/storeimage:v1
    docker push $ACR_NAME.azurecr.io/productservice:v1
    

    A következő paranccsal ellenőrizheti, hogy a rendszerképek sikeres leküldése befejeződött-e:

    az acr repository list --name $ACR_NAME --output table
    
  7. Hozza létre az AKS-t, és csatlakoztassa az ACR-hez az alábbi parancsokkal:

    az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --node-count 1 --generate-ssh-keys --node-vm-size Standard_B2s --network-plugin azure --attach-acr $ACR_NAME
    
    az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
    

    A fenti parancsok egyetlen csomópontos AKS-fürtöt hoznak létre, csatlakoztatják az ACR-hez, majd csatlakoztatják a helyi gépet az AKS-fürthöz. A fenti parancsok végrehajtása eltarthat néhány percig.

  8. Ellenőrizze, hogy az új AKS képes-e képeket lekérni az ACR-ből az alábbi paranccsal:

    az aks check-acr --acr $ACR_NAME.azurecr.io --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
    

    A következő üzenetekhez hasonló kimenetnek kell megjelennie:

    [2023-10-19T13:33:09Z] Loading azure.json file from /etc/kubernetes/azure.json
    [2023-10-19T13:33:09Z] Checking managed identity...
    [2023-10-19T13:33:09Z] Cluster cloud name: AzurePublicCloud
    [2023-10-19T13:33:09Z] Kubelet managed identity client ID: 71588cd0-9229-4914-9c8e-1dc229d775c8
    [2023-10-19T13:33:09Z] Validating managed identity existance: SUCCEEDED
    [2023-10-19T13:33:09Z] Validating image pull permission: SUCCEEDED
    [2023-10-19T13:33:09Z] 
    Your cluster can pull images from acseshop1251599299.azurecr.io!
    

    Mostantól kubectl-parancsokat futtathat az új AKS-fürtön. Másolja ki a teljes ACR URL-címet a kimenetből; Az URL-cím fölött például az acseshop1251599299 szerepel.

  9. Ellenőrizze az AKS-fürt állapotát:

    kubectl get nodes -A
    

    A következő üzenetekhez hasonló kimenetnek kell megjelennie:

    NAME                                STATUS   ROLES   AGE     VERSION
    aks-nodepool1-37200563-vmss000000   Ready    agent   3h44m   v1.26.6
    

A Kubernetes üzembehelyezési jegyzékének konfigurálása

Az eShop-rendszerképek mostantól az ACR-ben találhatók, így frissítheti az AKS üzembehelyezési jegyzékét az új rendszerképek használatára.

  1. A Visual Studio Code EXPLORER paneljén válassza ki a deployment.yml fájlt a projekt gyökerében.

  2. Csere a 17. sorban:

    - image: [replace with your ACR name].azurecr.io/storeimage:v1
    

    Illessze be a másolt ACR-nevet az előző lépésből – a sornak a következő yaml-hez hasonlóan kell kinéznie:

    - image: acseshop1251599299.azurecr.io/storeimage:v1
    
  3. Ismételje meg a következő lépéseket a 65. sorban:

    - image: [replace with your ACR name].azurecr.io/productservice:v1
    

    Mentse a fájlt a CTRL S billentyűkombinációval.+

  4. A terminálpanelen helyezzen üzembe egy NGINX bejövőforgalom-vezérlőt a következő kubernetes paranccsal:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.9.3/deploy/static/provider/cloud/deploy.yaml
    

    A fenti kubectl parancs szolgáltatásokat és összetevőket ad hozzá az AKS-fürtbe való bejövő forgalom engedélyezéséhez. Ellenőrizze, hogy a bejövő forgalom készen áll-e a következő Kubernetes-paranccsal:

    kubectl get services --namespace ingress-nginx 
    

    A következő üzenetekhez hasonló kimenetnek kell megjelennie:

    NAME                                 TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)                      AGE
    ingress-nginx-controller             LoadBalancer   10.0.135.51    20.26.154.64   80:32115/TCP,443:32254/TCP   58s
    ingress-nginx-controller-admission   ClusterIP      10.0.137.137   <none>         443/TCP                      58s
    
  5. Az eShop alkalmazás üzembe helyezése a következő paranccsal:

    kubectl apply -f deployment.yml
    

    Az kubectl apply parancs üzembe helyezi az eShop alkalmazást, egy előtérbeli Blazor webalkalmazást és egy háttér REST API termékszolgáltatást, valamint egy bejövő szabályt, amely a forgalmat a megfelelő szolgáltatásokhoz irányítja az AKS-fürthöz. Futtassa újra ezt a parancsot, ha hibaüzenetet kap az üzembe helyezésekkel kapcsolatban.

    A következő üzenetekhez hasonló kimenetnek kell megjelennie:

    deployment.apps/storeimage created
    service/eshop-website created
    deployment.apps/productservice created
    service/eshop-backend created
    ingress.networking.k8s.io/eshop-ingress created
    
  6. Ellenőrizze, hogy a két mikroszolgáltatás üzembe lett-e helyezve ezzel a paranccsal:

    kubectl get pods -A
    

    A következő üzenetekhez hasonló kimenetnek kell megjelennie:

    NAMESPACE       NAME                                        READY   STATUS      RESTARTS   AGE
    default         productservice-7569b8c64-vfbfz              1/1     Running     0          3m56s
    default         storeimage-6c7c999d7c-zsnxd                 1/1     Running     0          3m56s
    ingress-nginx   ingress-nginx-admission-create-szb8l        0/1     Completed   0          4m4s
    ingress-nginx   ingress-nginx-admission-patch-czdbv         0/1     Completed   0          4m4s
    ingress-nginx   ingress-nginx-controller-58bf5bf7dc-nwtsr   1/1     Running     0          4m4s
    
  7. Tekintse meg az üzembe helyezett eShopot az alábbi paranccsal:

    echo "http://$(kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')"
    

    A fenti parancs a webalkalmazás külső IP-címét adja vissza. Tartsa lenyomva a CTRL billentyűt , és kattintson a hivatkozásra az alkalmazás új lapon való megnyitásához.

    Képernyőkép az eShop webalkalmazás kezdőlapjáról.

Szolgáltatásnév létrehozása a GitHubról való üzembe helyezéshez

A GitHub Actions közzéteheti a tárolórendszerképeket egy Azure Container Registryben. A GitHub-futónak ezért engedélyekkel kell rendelkeznie az Azure-hoz való csatlakozáshoz. Az alábbi lépések létrehoznak egy Azure AD-szolgáltatásnevet, amely GitHub Actions-identitásként működik az Azure-ban.

  1. Ha egy környezeti változóban szeretné menteni az előfizetés azonosítóját, futtassa a következő parancsot a terminálban:

    export SUBS=$(az account show --query 'id' --output tsv)
    
  2. Ha azure AD-szolgáltatásnevet szeretne létrehozni a GitHubról való hozzáférés engedélyezéséhez, futtassa a következő parancsot:

    az ad sp create-for-rbac --name "eShop" --role contributor --scopes /subscriptions/$SUBS/resourceGroups/$RESOURCE_GROUP --json-auth
    

    Megjelenik a következő kimenet egy változata:

    Creating 'Contributor' role assignment under scope '/subscriptions/00000000-0000-0000-0000-000000000000'
    
    The output includes credentials that you must protect. Be sure that you do not include these credentials in your code or check the credentials into your source control. For more information, see https://aka.ms/azadsp-cli
     {
      "clientId": "00000000-0000-0000-0000-000000000000",
      "clientSecret": "abc1A~abc123ABC123abc123ABC123abc123ABC1",
      "subscriptionId": "00000000-0000-0000-0000-000000000000",
      "tenantId": "00000000-0000-0000-0000-000000000000",
      "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
      "resourceManagerEndpointUrl": "https://management.azure.com/",
      "activeDirectoryGraphResourceId": "https://graph.windows.net/",
      "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
      "galleryEndpointUrl": "https://gallery.azure.com/",
      "managementEndpointUrl": "https://management.core.windows.net/"
    }
    
  3. Másolja ki a JSON-kimenetet és a zárójeleket a következő lépésben használni.

A GitHub titkos kulcsainak létrehozása

A GitHub Actions futója hitelesítő adatokat használ a Container Registry és az AKS használatához. A tárolóregisztrációs adatbázis szolgáltatásneve és a hitelesítő adatok bizalmas információk. A bizalmas információkat érdemes titkosított titkos kódként tárolni biztonságos helyen. A GitHub beépített helyet biztosít a titkos kódok és más változók tárolásához.

Az alábbi lépések végrehajtásával biztonságosan tárolhatja a bizalmas információkat környezeti változókként az adattárban. Az adattárgazdáknak kezelnie kell a GitHub Actions-futó által elérhető titkos kulcsokat.

  1. Az elágaztatott GitHub-adattárban nyissa meg a következőtSettings>>Secrets and variablesActions: .

  2. A lapon válassza a Actions secrets and variables lehetőséget New repository secret.

  3. A lapon Nameadja meg a New secret AZURE_CREDENTIALS, alatta pedig Secreta terminálból kimásolt JSON-kimenetet.

    A beállításoknak az alábbi képernyőképhez hasonlóan kell kinéznie:

    Képernyőkép az Új titkos kód lapról a környezeti változó titkos kulcsainak a GitHubon való beállításához.

  4. Válassza ki Add secret.

Ezt a GitHub-titkos kulcsot fogja használni a következő szakaszban egy GitHub-művelet létrehozásához a tárolólemezkép létrehozásához.