Natív felhőbeli alkalmazás manuális üzembe helyezése az Azure Kubernetes Service-ben
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:
- Válassza a Kód lehetőséget.
- Válassza a Codespaces (Kódterek) lapot.
- 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:
- Telepítse a rendszerigényléseket a Dev Container Visual Studio Code-ban való futtatásához.
- Győződjön meg arról, hogy a Docker fut.
- Egy új Visual Studio Code-ablakban nyissa meg a klónozott adattár mappáját
- Nyomja le a Ctrl Shift+P billentyűkombinációt +a parancskatalógus megnyitásához.
- Keresés: >Tárolók fejlesztése: Újraépítés és újranyitás a tárolóban
- A Visual Studio Code helyileg hozza létre a fejlesztési tárolót.
Tárolók létrehozása
A terminálablakban futtassa ezt a dotnet CLI-parancsot:
dotnet publish /p:PublishProfile=DefaultContainer
Azure-erőforrások létrehozása
A terminálablakban jelentkezzen be az Azure-ba ezzel az Azure CLI-paranccsal:
az login --use-device-code
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.
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]
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.
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
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
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.
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.
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.
A Visual Studio Code EXPLORER paneljén válassza ki a deployment.yml fájlt a projekt gyökerében.
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
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.+
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
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
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
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.
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.
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)
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/" }
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.
Az elágaztatott GitHub-adattárban nyissa meg a következőtSettings>>Secrets and variablesActions: .
A lapon válassza a Actions secrets and variables lehetőséget New repository secret.
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:
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.