Bulutta yerel uygulamanızı Azure Kubernetes Service'e el ile dağıtma
Web sitesi dağıtımlarınızı otomatikleştirmeden önce mevcut eShop uygulamasını Azure Kubernetes Service'e (AKS) el ile dağıtmanız gerekir. Azure kaynaklarını oluşturur ve Azure CLI komutlarını ve bash betiklerini kullanarak uygulamayı AKS'ye dağıtırsınız. Son olarak GitHub Actions'ın AKS ve Azure Container Registry'ye dağıtılmasına izin vermek için bir Azure Active Directory (Azure AD) hizmet sorumlusu oluşturursunuz.
Komutlar, eShop uygulamasının güncelleştirilmiş bir sürümünü dağıtmak için aşağıdaki kaynakları oluşturur.
- Bir Azure Container Registry (ACR) sağlayın ve ardından görüntüleri kayıt defterine gönderin.
- AKS cluster sağlayın ve kapsayıcıları kümeye dağıtın.
- Dağıtımı test edin.
- GitHub Actions'ın AKS ve Azure Container Registry'ye dağıtılmasına izin vermek için hizmet sorumluları oluşturun.
Önemli
Başlamadan önce önkoşullarını tamamladığınızdan emin olun.
Geliştirme ortamını açma
Alıştırmayı barındıran bir GitHub kod alanı kullanmayı seçebilir veya alıştırmayı Visual Studio Code'da yerel olarak tamamlayabilirsiniz.
GitHub Codespaces Kurulumu
https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops deposunu kendi GitHub hesabınıza fork edin. Ardından yeni çatalınıza:
- Kod seçin.
- Codespaces sekmesini seçin.
- Kod alanınızı oluşturmak için + simgesini seçin.
GitHub'ın kod alanının oluşturulması ve yapılandırılması birkaç dakika sürer. İşlem tamamlandığında alıştırmanın kod dosyalarını görürsünüz.
İsteğe bağlı: Visual Studio Code Kurulumu
Visual Studio Code'ı kullanmak için depoyu kendi GitHub hesabınıza forklayın ve yerel olarak kopyalayın. Sonra:
- Visual Studio Code'da Dev Container'ı çalıştırmak için tüm sistem gereksinimlerini yükleyin.
- Docker'ın çalıştığından emin olun.
- Yeni bir Visual Studio Code penceresinde kopyalanan deponun klasörünü açın
- Komut paletini açmak için Ctrl+Shift+P tuşlarına basın.
- Arama:
Geliştirici Kapsayıcıları: Kapsayıcıyı Yeniden Oluştur ve Aç - Visual Studio Code, geliştirme kapsayıcınızı yerel olarak oluşturur.
Konteyner oluşturma
Terminal bölmesinde şu dotnet CLI komutunu çalıştırın:
dotnet publish /p:PublishProfile=DefaultContainer
Azure kaynaklarını oluşturma
Terminal bölmesinde şu Azure CLI komutuyla Azure'da oturum açın:
az login --use-device-codeSeçili Azure aboneliğini görüntüleyin.
az account show -o tableYanlış abonelik seçiliyse, doğru aboneliği seçmek için az account set komutunu kullanın.
Azure bölgelerinin listesini ve onunla ilişkili Adı almak için aşağıdaki Azure CLI komutunu çalıştırın:
az account list-locations -o tableSize en yakın bölgeyi bulun ve sonraki adımda
[Closest Azure region]'ın yerine kullanın.Şu bash deyimlerini çalıştırın:
export LOCATION=[Closest Azure region] export RESOURCE_GROUP=rg-eshop export CLUSTER_NAME=aks-eshop export ACR_NAME=acseshop$SRANDOMÖnceki komutlar, sonraki Azure CLI komutlarında kullanacağınız ortam değişkenlerini oluşturur. LOCATION değerini eastus gibi size yakın bir Azure bölgesiyle değiştirmeniz gerekir. Kaynak grubunuz, AKS kümeniz veya ACR'niz için farklı bir ad istiyorsanız bu değerleri değiştirin. Azure portalında yeni depolarınızı görüntülemek için kapsayıcı kayıt defterinin Erişim denetiminde (IAM) kendinizi Uygulama Uyumluluğu Otomasyonu Yöneticisi olarak atayın.
Şu Azure CLI komutlarını çalıştırın:
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Çalıştırıldığında
bir kimlik doğrulama hatası alırsanız, Azure'da yeni oluşturulan kapsayıcı kaydı altındaki Ayarlar - Erişim Anahtarları kısmından Yönetici Kullanıcısını açmanız gerekir. Azure, devam etmek için bu kimlik bilgilerini girmenizi ister. ayrıca ile az login --use-device-codeyeniden kimlik doğrulaması yapmanız gerekebilir.Bu komutlar Azure kaynaklarını, görüntüleriniz için bir ACR'yi içeren bir kaynak grubu oluşturur ve ardından ACR'de oturum açar. Bu çıkışı görmeniz birkaç dakika sürebilir:
... }, "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 SucceededGörüntülerinizi etiketlemek ve oluşturduğunuz ACR'ye göndermek için şu komutları çalıştırın:
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Şu komutla görüntüleri gönderme işleminin başarıyla tamamlanmasını de kontrol edebilirsiniz:
az acr repository list --name $ACR_NAME --output tableAKS'nizi oluşturun ve şu komutlarla ACR'ye bağlayın:
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_GROUPKomutlar tek düğüm aks kümesi oluşturur, ACR'ye bağlar ve ardından yerel makinenizi AKS kümesine bağlar. Komutların tamamlanması birkaç dakika sürebilir.
Yeni AKS'nin şu komutla ACR'den görüntü çekebildiğini denetleyin:
az aks check-acr --acr $ACR_NAME.azurecr.io --name $CLUSTER_NAME --resource-group $RESOURCE_GROUPAşağıdaki iletilere benzer bir çıkış görmeniz gerekir:
[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!Artık yeni AKS kümenizde kubectl komutlarını çalıştırabilirsiniz. Çıktıdan tam ACR URL'sini kopyalayın; örneğin, yukarıdaki URL acseshop1251599299 şeklindedir.
AKS kümenizin durumunu denetleyin:
kubectl get nodes -AAşağıdaki iletilere benzer bir çıkış görmeniz gerekir:
NAME STATUS ROLES AGE VERSION aks-nodepool1-37200563-vmss000000 Ready agent 3h44m v1.26.6
Kubernetes dağıtım bildirimini yapılandırma
Artık eShop görüntüleri ACR'dedir. Aks dağıtım bildirimini bu yeni görüntüleri kullanacak şekilde güncelleştirebilirsiniz.
Visual Studio Code veya Codespaces'ta, EXPLORER panelinden projenin kökündeki deployment.yml dosyasını seçin.
17. satırı değiştir:
- image: [replace with your ACR name].azurecr.io/storeimage:v1Kopyalanan ACR adını önceki adımdan yapıştırın; satır aşağıdaki yaml'ye benzer görünmelidir:
- image: acseshop1251599299.azurecr.io/storeimage:v165. satır için şu adımları yineleyin:
- image: [replace with your ACR name].azurecr.io/productservice:v1Dosyayı CTRL+S ile kaydedin.
Terminal bölmesinde, aşağıdaki kubernetes komutuyla bir NGINX giriş denetleyicisi dağıtın:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.9.3/deploy/static/provider/cloud/deploy.yamlkomutu
kubectlAKS kümenize girişe izin vermek için hizmetler ve bileşenler ekler. Aşağıdaki kubernetes komutunu kullanarak girişin çalışmaya hazır olup olmadığını denetleyin:kubectl get services --namespace ingress-nginxAşağıdaki iletilere benzer bir çıkış görmeniz gerekir:
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 58seShop uygulamasını şu komutla dağıtın:
kubectl apply -f deployment.ymlkubectluygula komutu eShop uygulamasını, ön uç Blazor web uygulamasını ve arka uç REST API ürün hizmetini ve trafiği AKS kümenize doğru hizmetlere yönlendirmek için bir giriş kuralı dağıtır. Dağıtımlarda hata alırsanız bu komutu yeniden çalıştırın.Aşağıdaki iletilere benzer bir çıkış görmeniz gerekir:
deployment.apps/storeimage created service/eshop-website created deployment.apps/productservice created service/eshop-backend created ingress.networking.k8s.io/eshop-ingress createdİki mikro hizmetin şu komutla dağıtıldığını denetleyin:
kubectl get pods -AAşağıdaki iletilere benzer bir çıkış görmeniz gerekir:
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 4m4sDağıtılan eShop'a şu komutla bakın:
echo "http://$(kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')"komut, web uygulamasının dış IP adresini döndürür. CTRL basılı tutun ve bağlantıyı tıklatarak uygulamayı yeni bir sekmede açın.
GitHub'dan dağıtım yapmak için bir hizmet ilkesi oluşturun
GitHub Actions, kapsayıcı görüntülerini bir Azure Container Registry'de yayımlayabilir. Bu nedenle GitHub çalıştırıcısının Azure'a bağlanma izinleri olmalıdır. Aşağıdaki adımlar, Azure içinde GitHub Actions kimliği olarak görev yapmak için bir Azure AD hizmet sorumlusu oluşturur.
Abonelik Kimliğinizi bir ortam değişkenine kaydetmek için terminalde aşağıdaki komutu çalıştırın:
export SUBS=$(az account show --query 'id' --output tsv)GitHub'dan erişime izin verecek bir Azure AD hizmet sorumlusu oluşturmak için aşağıdaki komutu çalıştırın:
az ad sp create-for-rbac --name "eShop" --role contributor --scopes /subscriptions/$SUBS/resourceGroups/$RESOURCE_GROUP --json-authAşağıdaki çıktının bir varyasyonu görülür.
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/" }Sonraki adımda kullanmak üzere JSON çıkışını ve köşeli ayraçları kopyalayın.
GitHub gizli anahtarlarını oluşturun
GitHub Actions çalıştırıcısı, Container Registry ve AKS ile etkileşime geçmek için kimlik bilgilerini kullanır. Hizmet sorumlusu ve kapsayıcı kayıt defteri kimlik bilgileri hassas bilgilerdir. Hassas bilgileri güvenli bir konumda şifrelenmiş gizli diziler olarak depolamak en iyisidir. GitHub, gizli dizileri ve diğer değişkenleri depolamak için yerleşik bir konum sağlar.
Hassas bilgileri deponuzda ortam değişkenleri olarak güvenli bir şekilde depolamak için aşağıdaki adımları tamamlayın. Depo yöneticileri, GitHub Actions koşucusunun erişebileceği gizli bilgileri yönetmelidir.
Çatallanmış GitHub deponuzda Settings>Secrets and variables>Actionsbölümüne gidin.
Actions secrets and variables sayfasında New repository secretöğesini seçin.
New secret sayfasında, Name altına AZURE_CREDENTIALS girin ve Secret altına terminalden kopyaladığınız JSON çıkışını girin.
Ayarlar aşağıdaki ekran görüntüsüne benzer görünmelidir:
Add secretseçin.
Sonraki bölümde, kapsayıcı görüntüsünü oluşturmak için bir GitHub eylemi oluşturmak amacıyla bu GitHub sırrını kullanacaksınız.