Ruční nasazení aplikace nativní pro cloud do služby Azure Kubernetes Service

Dokončeno

Než budete moct automatizovat nasazení webu, musíte stávající aplikaci eShop nasadit ručně do služby Azure Kubernetes Service (AKS). Vytvoříte prostředky Azure a nasadíte aplikaci do AKS pomocí příkazů Azure CLI a skriptů Bash. Nakonec vytvoříte služebního objektu Azure Active Directory (Azure AD), který umožní GitHub Actions nasazovat do AKS a Azure Container Registry.

Příkazy vytvoří následující prostředky pro nasazení aktualizované verze aplikace eShop.

  • Zřízení služby Azure Container Registry (ACR) a následné nahrání obrazů do registru.
  • Zřiďte cluster AKS a pak kontejnery nasaďte do clusteru.
  • Otestujte nasazení.
  • Vytvořte servisní principy, které umožní GitHub Actions nasazování do AKS a Azure Container Registry.

Důležitý

Než začnete, ujistěte se, že jste dokončili nezbytné požadavky .

Otevření vývojového prostředí

Můžete použít codespace GitHubu, který je hostitelem cvičení, nebo cvičení dokončit místně v editoru Visual Studio Code.

Nastavení Codespaces GitHubu

Rozvětvujte úložiště https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops na vlastní účet GitHubu. Pak na novém forku:

  1. Vyberte kódu.
  2. Vyberte kartu Codespaces.
  3. Výběrem ikony + vytvořte prostor kódu.

Vytvoření a konfigurace prostoru kódu na GitHubu trvá několik minut. Po dokončení procesu se zobrazí soubory kódu pro cvičení.

Volitelné: Nastavení editoru Visual Studio Code

Pokud chcete použít Visual Studio Code, rozvětvte úložiště https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops do vlastního účtu GitHubu a naklonujte ho místně. Potom:

  1. Nainstalujte všechny požadavky na systém pro spuštění vývojového kontejneru v editoru Visual Studio Code.
  2. Ujistěte se, že je Docker spuštěný.
  3. V novém okně editoru Visual Studio Code otevřete složku klonovaného úložiště.
  4. Stisknutím kláves Ctrl+Shift+P otevřete paletu příkazů.
  5. Hledání: >Dev Containers: Opětovné sestavení a opětovné otevření v kontejneru
  6. Visual Studio Code vytvoří vývojový kontejner místně.

Sestavení kontejnerů

  1. V podokně terminálu spusťte tento příkaz dotnet CLI:

    dotnet publish /p:PublishProfile=DefaultContainer 
    

Vytvoření prostředků Azure

  1. V podokně terminálu se přihlaste k Azure pomocí tohoto příkazu Azure CLI:

    az login --use-device-code
    
  2. Zobrazení vybraného předplatného Azure

    az account show -o table
    

    Pokud je vybrané nesprávné předplatné, pomocí příkazu az account set vyberte správné předplatné.

  3. Spuštěním následujícího příkazu Azure CLI získejte seznam oblastí Azure a název přidružený k němu:

    az account list-locations -o table
    

    Vyhledejte nejbližší oblast a použijte ji v dalším kroku nahrazením [Closest Azure region]

  4. Spusťte tyto příkazy Bash:

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

    Předchozí příkazy vytvářejí proměnné prostředí, které použijete v dalších příkazech Azure CLI. Musíte změnit oblast Azure na oblast poblíž vás, například eastus. Pokud chcete pro skupinu prostředků, cluster AKS nebo ACR jiný název, změňte tyto hodnoty. Pokud chcete zobrazit nová úložiště v portálu Azure, přiřaďte si roli jako Administrátor automatizace souladu aplikací v řízení přístupu (IAM) registru kontejneru.

  5. Spusťte tyto příkazy Azure CLI:

    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
    

    Pokud se při spuštění az acr login --name $ACR_Name zobrazí chyba ověřování, musíte zapnout uživatele Admin v nově vytvořené registru kontejneru v Azure v části Nastavení – Přístupové klíče. Azure vás vyzve k zadání těchto přihlašovacích údajů, abyste mohli pokračovat. Je také možné, že se budete muset znovu ověřit pomocí az login --use-device-code.

    Tyto příkazy vytvoří skupinu prostředků, která bude obsahovat prostředky Azure, ACR pro vaše imagí a poté se přihlásí do ACR. Může to trvat několik minut, než se zobrazí tento výstup:

      ...
      },
      "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. Pokud chcete označit image a odeslat je do služby ACR, kterou jste vytvořili, spusťte tyto příkazy:

    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
    

    Úspěšné nahrání obrazů můžete zkontrolovat pomocí tohoto příkazu:

    az acr repository list --name $ACR_NAME --output table
    
  7. Vytvořte AKS a připojte ho k ACR pomocí těchto příkazů:

    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
    

    Příkazy vytvoří cluster AKS s jedním uzlem, připojí ho k ACR a pak připojí místní počítač ke clusteru AKS. Dokončení příkazů může trvat několik minut.

  8. Pomocí tohoto příkazu zkontrolujte, jestli může nová služba AKS načíst image z ACR:

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

    Měl by se zobrazit podobný výstup jako následující zprávy:

    [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: 00001111-aaaa-2222-bbbb-3333cccc4444
    [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!
    

    Nyní můžete spouštět příkazy kubectl na váš nový cluster AKS. Zkopírujte úplnou adresu URL služby ACR z výstupu; Například nad adresou URL je acseshop1251599299.

  9. Zkontrolujte stav clusteru AKS:

    kubectl get nodes -A
    

    Měl by se zobrazit podobný výstup jako následující zprávy:

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

Konfigurace manifestu nasazení Kubernetes

Teď, když jsou obrázky eShopu v ACR, můžete aktualizovat manifest nasazení AKS tak, aby používal tyto nové obrázky.

  1. V editoru Visual Studio Code nebo Codespaces vyberte v panelu PRŮZKUMNÍK soubor deployment.yml v kořenovém projektu.

  2. Nahradit na řádku 17:

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

    Vložte zkopírovaný název ACR z předchozího kroku – řádek by měl vypadat nějak takto:

    - image: acseshop1251599299.azurecr.io/storeimage:v1
    
  3. Opakujte tento postup pro řádek 65:

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

    Uložte soubor pomocí CTRL+S.

  4. V podokně terminálu nasaďte kontroler příchozího přenosu dat NGINX pomocí následujícího příkazu Kubernetes:

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

    Příkaz kubectl přidá služby a komponenty, které umožňují vstup do vašeho clusteru AKS. Pomocí následujícího příkazu Kubernetes zkontrolujte, že je ingress připraven k provozu:

    kubectl get services --namespace ingress-nginx 
    

    Měl by se zobrazit podobný výstup jako následující zprávy:

    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. Pomocí tohoto příkazu nasaďte aplikaci eShop:

    kubectl apply -f deployment.yml
    

    Příkaz kubectl nasadí aplikaci eShop, front-endovou webovou aplikaci Blazor, back-endovou službu REST API a pravidlo pro směrování příchozího provozu ke správným službám do vašeho clusteru AKS. Pokud se při nasazení zobrazí chyba, spusťte tento příkaz znovu.

    Měl by se zobrazit podobný výstup jako následující zprávy:

    deployment.apps/storeimage created
    service/eshop-website created
    deployment.apps/productservice created
    service/eshop-backend created
    ingress.networking.k8s.io/eshop-ingress created
    
  6. Pomocí tohoto příkazu zkontrolujte, jestli jsou tyto dvě mikroslužby nasazené:

    kubectl get pods -A
    

    Měl by se zobrazit podobný výstup jako následující zprávy:

    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. Pomocí tohoto příkazu zobrazte nasazený eShop:

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

    Příkaz vrátí externí IP adresu webové aplikace. Podržte CTRL a kliknutím na odkaz otevřete aplikaci na nové kartě.

    snímek obrazovky domovské stránky webové aplikace eShop.

Vytvoření aplikačního objektu služby pro nasazení z GitHubu

GitHub Actions může publikovat image kontejneru do služby Azure Container Registry. GitHub Runner proto musí mít oprávnění pro připojení k Azure. Následující kroky vytvoří instanční objekt Azure AD, který bude fungovat jako identita GitHub Actions v Azure.

  1. Pokud chcete ID předplatného uložit do proměnné prostředí, spusťte v terminálu následující příkaz:

    export SUBS=$(az account show --query 'id' --output tsv)
    
  2. Pokud chcete vytvořit instanční objekt Azure AD, který povolí přístup z GitHubu, spusťte následující příkaz:

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

    Zobrazí se varianta následujícího výstupu:

    Creating 'Contributor' role assignment under scope '/subscriptions/ffffffff-aaaa-bbbb-6666-777777777777'
    
    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": "00001111-aaaa-2222-bbbb-3333cccc4444",
      "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. Zkopírujte výstup a hranaté závorky JSON, které chcete použít v dalším kroku.

Vytvoření tajných kódů GitHubu

Spouštěč GitHub Actions používá přihlašovací údaje pro interakci se službou Container Registry a AKS. Služební principál a přihlašovací údaje registru kontejneru jsou citlivé informace. Je nejlepší ukládat citlivé informace jako šifrované tajné kódy v zabezpečeném umístění. GitHub poskytuje integrované umístění pro ukládání tajných kódů a dalších proměnných.

Pomocí následujících kroků bezpečně uložte citlivé informace jako proměnné prostředí ve vašem úložišti. Správci úložiště by měli spravovat tajné kódy, ke kterým má spouštěč GitHub Actions přístup.

  1. Ve svém forku úložiště GitHub přejděte na Settings>Secrets and variables>Actions.

  2. Na stránce Actions secrets and variables vyberte New repository secret.

  3. Na stránce New secret zadejte v části NameAZURE_CREDENTIALSa v části Secretzadejte výstup JSON, který jste zkopírovali z terminálu.

    Nastavení by mělo vypadat podobně jako na následujícím snímku obrazovky:

    snímek obrazovky Nové tajné stránky pro nastavení tajemství proměnných prostředí na GitHubu

  4. Vyberte Add secret.

Tento tajný kód GitHubu použijete v další části k vytvoření akce GitHubu pro sestavení image kontejneru.