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 feltölti a rendszerképeket a rendszerleltárba.
- 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
Forkold az adattárat https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops, hogy a saját GitHub-fiókodba kerüljön. Ezután az új elágazáson:
- Válassza a Kód lehetőséget.
- Válassza a Codespaces (Kódterek) lapot.
- Kattintson a + 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. Ezután:
- Telepítse a Dev Container Visual Studio Code-ban való futtatásához szükséges rendszerkövetelményeket .
- 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 CtrlShift+P+ a parancskatalógus megnyitásához.
- Keresés: >Fejlesztői konténerek: Újraépítés és újranyitás konténerben
- 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
Az Azure-erőforrások létrehozása
A terminálablakban jelentkezzen be az Azure-ba ezzel az Azure CLI-paranccsal:
az login --use-device-codeA kijelölt Azure-előfizetés megtekintése.
az account show -o tableHa 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 tableKeresse meg az Önhöz legközelebbi régiót, és a következő lépésben cserélje ki a
[Closest Azure region]-t annak használatával.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$SRANDOMAz 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 rendszergazdaké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_NAMEHa hitelesítési hibát kap a futtatáskor
az acr login --name $ACR_Name, be kell kapcsolnia a rendszergazda felhasználót az újonnan létrehozott tárolóregisztrációban az Azure-ban a Beállítások – Hozzáférési kulcsok területen. Az Azure kéri, hogy adja meg ezeket a hitelesítő adatokat a folytatáshoz. Előfordulhat, hogy ismét hitelesítenie kell aaz 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 SucceededA 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:v1A következő paranccsal ellenőrizheti, hogy a képfájlok feltöltése sikeresen befejeződik-e:
az acr repository list --name $ACR_NAME --output tableHozza 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_GROUPA 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 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_GROUPA 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: 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!Most 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.
Nézze meg az AKS-fürt állapotát:
kubectl get nodes -AA 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-ban vagy a Codespacesben az EXPLORER panelen 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:v1Illessze 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:v1Ismételje meg a következő lépéseket a 65. sorban:
- image: [replace with your ACR name].azurecr.io/productservice:v1Mentse a fájlt a CTRLS+.
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.yamlA
kubectlparancs szolgáltatásokat és összetevőket ad hozzá az AKS-fürtbe való bejövő forgalom engedélyezéséhez. Ellenőrizze, hogy az ingress szolgáltatás készen áll-e futásra a következő kubernetes-paranccsal:kubectl get services --namespace ingress-nginxA 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 58sAz eShop alkalmazás üzembe helyezése a következő paranccsal:
kubectl apply -f deployment.ymlAz
kubectlapply parancs üzembe helyezi az eShop alkalmazást, egy front-end Blazor webalkalmazást és egy back-end REST API termékszolgáltatást, valamint egy bejövő szabályt (ingress rule-t), amely az AKS-fürt szolgáltatásaihoz irányítja a forgalmat. 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 createdEllenőrizze, hogy a két mikroszolgáltatás üzembe van-e helyezve ezzel a paranccsal:
kubectl get pods -AA 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 4m4sTekintse 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 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-authMegjelenik a következő kimenet egy változata:
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/" }Másolja a JSON-kimenetet és a zárójeleket, hogy a következő lépésben használhassa őket.
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 szolgáltatásnév és a tárolóregisztrációs adatbázis hitelesítő adatai 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 Ön által elágaztatott GitHub-adattárban lépjen be a Settings>Secrets and variables>Actionsrészbe.
A Actions secrets and variables lapon válassza a New repository secretlehetőséget.
A New secret oldalon, a Name alatt adja meg az AZURE_CREDENTIALS adatait, és a Secret alatt adja meg a 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 a Add secretlehetőséget.
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.