Ręczne wdrażanie aplikacji natywnej dla chmury w usłudze Azure Kubernetes Service
Przed zautomatyzowanie wdrożeń witryny internetowej należy ręcznie wdrożyć istniejącą aplikację eShop w usłudze Azure Kubernetes Service (AKS). Tworzysz zasoby Azure i wdrażasz aplikację w usłudze AKS, używając poleceń Azure CLI i skryptów bash. Na koniec utworzysz jednostkę usługi Azure Active Directory (Azure AD), aby umożliwić usłudze GitHub Actions wdrażanie w usługach AKS i Azure Container Registry.
Polecenia tworzą następujące zasoby, aby wdrożyć zaktualizowaną wersję aplikacji eShop.
- Aprowizuj usługę Azure Container Registry (ACR), a następnie wypchnij obrazy do rejestru.
- Zainstaluj klaster AKS, a następnie wdroż kontenery w klastrze.
- Przetestuj wdrożenie.
- Utwórz zasady dostępu do usługi, aby umożliwić GitHub Actions wdrażanie do AKS i Azure Container Registry.
Ważny
Przed rozpoczęciem upewnij się, że zostały spełnione wymagania wstępne .
Otwieranie środowiska projektowego
Możesz użyć przestrzeni kodu usługi GitHub, która hostuje ćwiczenie, lub wykonać ćwiczenie lokalnie w programie Visual Studio Code.
Konfiguracja usługi GitHub Codespaces
Sforkuj repozytorium https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops na własne konto GitHub. Następnie na Twoim nowym forku:
- Wybierz Kod.
- Wybierz kartę Codespaces.
- Wybierz ikonę +, aby utworzyć przestrzeń kodu.
Utworzenie i skonfigurowanie przestrzeni kodu w usłudze GitHub trwa kilka minut. Po zakończeniu procesu zobaczysz pliki kodu dla ćwiczenia.
Opcjonalnie: Konfiguracja programu Visual Studio Code
Aby użyć programu Visual Studio Code, rozgałęź repozytorium https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops na swoje konto na GitHub i sklonuj je lokalnie. Wtedy:
- Zainstaluj wszystkie wymagania systemowe , aby uruchomić kontener deweloperski w programie Visual Studio Code.
- Upewnij się, że platforma Docker jest uruchomiona.
- W nowym oknie programu Visual Studio Code otwórz folder sklonowanego repozytorium
- Naciśnij Ctrl+Shift+P , aby otworzyć paletę poleceń.
- Wyszukiwanie: >Dev Containers: przebudowa i ponowne otwarcie w kontenerze
- Visual Studio Code tworzy kontener programistyczny lokalnie.
Budowanie kontenerów
W okienku terminalu uruchom następujące polecenie dotnet CLI:
dotnet publish /p:PublishProfile=DefaultContainer
Tworzenie zasobów platformy Azure
W okienku terminalu zaloguj się do Azure za pomocą tego polecenia Azure CLI:
az login --use-device-codeWyświetl wybraną subskrypcję platformy Azure.
az account show -o tableJeśli wybrano niewłaściwą subskrypcję, użyj polecenia az account set , aby wybrać poprawną subskrypcję.
Uruchom następujące polecenie Azure CLI, aby uzyskać listę regionów Azure i skojarzoną z nimi nazwą:
az account list-locations -o tableZnajdź region najbliżej Ciebie i użyj go w następnym kroku, zastępując
[Closest Azure region]Uruchom następujące polecenia bash:
export LOCATION=[Closest Azure region] export RESOURCE_GROUP=rg-eshop export CLUSTER_NAME=aks-eshop export ACR_NAME=acseshop$SRANDOMPoprzednie polecenia tworzą zmienne środowiskowe, które będą używane w następnych poleceniach interfejsu wiersza polecenia platformy Azure. Musisz zmienić lokalizację na region Azure blisko ciebie, taki jak eastus. Jeśli chcesz zmienić nazwę grupy zasobów, klastra usługi AKS lub usługi ACR, zmień te wartości. Aby wyświetlić nowe repozytoria w portalu Azure, przypisz sobie rolę App Compliance Automation Administrator w Kontroli dostępu (IAM) rejestru kontenerów.
Uruchom następujące polecenia 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_NAMEJeśli podczas uruchamiania
az acr login --name $ACR_Namezostanie wyświetlony błąd uwierzytelniania, musisz włączyć administratora w nowo utworzonym rejestrze kontenerów na platformie Azure w obszarze Ustawienia — Klucze dostępu. Platforma Azure prosi o wprowadzenie tych poświadczeń, aby kontynuować. Może być również konieczne ponowne uwierzytelnienie za pomocą poleceniaaz login --use-device-code.Te polecenia tworzą grupę zasobów, aby zawierała zasoby platformy Azure, usługę ACR dla obrazów, a następnie logowanie do usługi ACR. Może upłynąć kilka minut, zanim zobaczysz następujące dane wyjściowe:
... }, "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 SucceededAby oznaczyć obrazy i wypchnąć je do utworzonego rekordu ACR, uruchom następujące polecenia:
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:v1Możesz sprawdzić, czy wypychanie obrazów zakończyło się pomyślnie, używając tego polecenia:
az acr repository list --name $ACR_NAME --output tableUtwórz usługę AKS i połącz ją z usługą ACR przy użyciu następujących poleceń:
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_GROUPPolecenia tworzą klaster usługi AKS z jednym węzłem, łączą go z usługą ACR, a następnie łączą maszynę lokalną z klastrem usługi AKS. Wykonanie poleceń może potrwać kilka minut.
Sprawdź, czy nowa usługa AKS może ściągać obrazy z usługi ACR za pomocą tego polecenia:
az aks check-acr --acr $ACR_NAME.azurecr.io --name $CLUSTER_NAME --resource-group $RESOURCE_GROUPPowinieneś zobaczyć podobne wyniki do następujących komunikatów:
[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!Teraz można uruchamiać polecenia kubectl na nowym klastrze AKS. Skopiuj pełny adres URL usługi ACR z danych wyjściowych; na przykład powyżej adresu URL jest acseshop1251599299.
Sprawdź stan klastra AKS.
kubectl get nodes -APowinieneś zobaczyć podobne wyniki do następujących komunikatów:
NAME STATUS ROLES AGE VERSION aks-nodepool1-37200563-vmss000000 Ready agent 3h44m v1.26.6
Konfigurowanie manifestu wdrożenia platformy Kubernetes
Teraz, gdy obrazy eShop znajdują się w ACR, możesz zaktualizować manifest wdrożenia AKS, aby używać tych nowych obrazów.
W programie Visual Studio Code lub Codespaces z panelu EKSPLORATOR wybierz plik deployment.yml w katalogu głównym projektu.
Zastąp linię 17:
- image: [replace with your ACR name].azurecr.io/storeimage:v1Wklej skopiowaną nazwę ACR z poprzedniego kroku — wiersz powinien przypominać następujący kod yaml:
- image: acseshop1251599299.azurecr.io/storeimage:v1Powtórz następujące kroki dla wiersza 65:
- image: [replace with your ACR name].azurecr.io/productservice:v1Zapisz plik za pomocą CTRL+S.
W terminalu wdróż kontroler Ingress NGINX za pomocą następującego polecenia w Kubernetes:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.9.3/deploy/static/provider/cloud/deploy.yamlPolecenie
kubectldodaje usługi i składniki, aby umożliwić dostęp do klastra AKS. Sprawdź, czy zasób Ingress jest gotowy do pracy przy użyciu następującego polecenia Kubernetes:kubectl get services --namespace ingress-nginxPowinieneś zobaczyć podobne wyniki do następujących komunikatów:
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 58sWdróż aplikację eShop za pomocą tego polecenia:
kubectl apply -f deployment.ymlPolecenie
kubectlapply wdraża aplikację eShop, aplikację Blazor frontend i usługę produktu interfejsu API REST zaplecza oraz regułę wejściową do kierowania ruchu do odpowiednich usług w klastrze AKS. Uruchom ponownie to polecenie, jeśli wystąpi błąd we wdrożeniach.Powinieneś zobaczyć podobne wyniki do następujących komunikatów:
deployment.apps/storeimage created service/eshop-website created deployment.apps/productservice created service/eshop-backend created ingress.networking.k8s.io/eshop-ingress createdSprawdź, czy dwie mikrousługi są wdrażane za pomocą tego polecenia:
kubectl get pods -APowinieneś zobaczyć podobne wyniki do następujących komunikatów:
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 4m4sWyświetl wdrożony sklep eShop za pomocą tego polecenia:
echo "http://$(kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')"Polecenie zwraca zewnętrzny adres IP aplikacji internetowej. Przytrzymaj CTRL i kliknij link, aby otworzyć aplikację na nowej karcie.
Utwórz pryncypał usługi do wdrażania z GitHub
Funkcja GitHub Actions może publikować obrazy kontenerów w usłudze Azure Container Registry. Dlatego moduł uruchamiający usługę GitHub musi mieć uprawnienia do nawiązywania połączenia z platformą Azure. Poniższe kroki umożliwiają utworzenie jednostki usługi Azure AD, która będzie działać jako tożsamość funkcji GitHub Actions na platformie Azure.
Aby zapisać identyfikator subskrypcji w zmiennej środowiskowej, uruchom następujące polecenie w terminalu:
export SUBS=$(az account show --query 'id' --output tsv)Aby utworzyć głównego użytkownika usługi Azure AD w celu zezwolenia na dostęp z GitHub, uruchom następujące polecenie:
az ad sp create-for-rbac --name "eShop" --role contributor --scopes /subscriptions/$SUBS/resourceGroups/$RESOURCE_GROUP --json-authZostanie wyświetlona odmiana następujących danych wyjściowych:
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/" }Skopiuj dane wyjściowe i nawiasy JSON do użycia w następnym kroku.
Utwórz tajemnice GitHub
Moduł GitHub Actions używa poświadczeń do komunikacji z Container Registry i AKS. Główna usługa i poświadczenia rejestru kontenerów są poufnymi informacjami. Najlepiej przechowywać poufne informacje jako zaszyfrowane wpisy tajne w bezpiecznej lokalizacji. Usługa GitHub udostępnia wbudowaną lokalizację do przechowywania wpisów tajnych i innych zmiennych.
Wykonaj poniższe kroki, aby bezpiecznie przechowywać poufne informacje jako zmienne środowiskowe w repozytorium. Administratorzy repozytorium powinni zarządzać sekretami, do których runner GitHub Actions może uzyskiwać dostęp.
W swoim skopiowanym repozytorium GitHub przejdź do Settings>Secrets and variables>Actions.
Na stronie Actions secrets and variables wybierz pozycję New repository secret.
Na stronie New secret, w obszarze Name, wprowadź AZURE_CREDENTIALS, a w obszarze Secret wprowadź dane wyjściowe JSON skopiowane z terminalu.
Ustawienia powinny wyglądać podobnie jak na poniższym zrzucie ekranu:
Wybierz pozycję Add secret.
W następnej sekcji użyjesz tego sekretu GitHub, aby utworzyć akcję GitHub do zbudowania obrazu kontenera.