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.
- BIR AKS kümesi 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ı 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
Deponun çatalını https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops kendi GitHub hesabınıza oluşturun. Ardından yeni çatalınıza:
- Kod’u seçin.
- Codespaces sekmesini seçin.
- + Kod alanınızı oluşturmak için simgeyi 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 https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops kendi GitHub hesabınıza çatallayın ve yerel olarak kopyalayın. Ardından:
- Visual Studio Code'da Dev Container'ı çalıştırmak için tüm sistem isteklerini 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ştirme Kapsayıcıları: Kapsayıcıda Yeniden Oluşturma ve Yeniden Açma
- Visual Studio Code, geliştirme kapsayıcınızı yerel olarak oluşturur.
Kapsayıcı 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-code
Seçili Azure aboneliğini görüntüleyin.
az account show -o table
Yanlış 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 table
Size en yakın bölgeyi bulun ve sonraki adımda
[Closest Azure region]
Ş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 size yakın bir Azure bölgesiyle (örneğin eastus) 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 Uyumluluk Otomasyonu Yönetici istrator 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
az acr login --name $ACR_Name
bir kimlik doğrulama hatası alırsanız Azure'da yeni oluşturulan kapsayıcı kaydında Ayarlar - Erişim Anahtarları altında Yönetici kullanıcıyı açmanız gerekir. Azure, devam etmek için bu kimlik bilgilerini girmenizi ister. ayrıca ileaz login --use-device-code
yeniden kimlik doğrulaması yapmanız da 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 Succeeded
Gö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 table
AKS'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_GROUP
Yukarıdaki komutlar tek düğüm aks kümesi oluşturur, ACR'ye bağlar ve ardından yerel makinenizi AKS kümesine bağlar. Yukarıdaki 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_GROUP
Aş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: 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!
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 -A
Aş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'da, EXPLORER panelinden projenin kökündeki deployment.yml dosyasını seçin.
17. satırdaki değiştir:
- image: [replace with your ACR name].azurecr.io/storeimage:v1
Kopyalanan 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:v1
65. satır için şu adımları yineleyin:
- image: [replace with your ACR name].azurecr.io/productservice:v1
Dosyayı 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.yaml
Yukarıdaki
kubectl
komut AKS 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-nginx
Aş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 58s
eShop uygulamasını şu komutla dağıtın:
kubectl apply -f deployment.yml
kubectl
Uygula 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ığından denetleyin:
kubectl get pods -A
Aş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 4m4s
Dağı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}')"
Yukarıdaki komut, web uygulamasının dış IP adresini döndürür. Uygulamayı yeni bir sekmede açmak için CTRL tuşunu basılı tutun ve bağlantıya tıklayın.
GitHub'dan dağıtmak için hizmet sorumlusu oluşturma
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-auth
Aşağıdaki çıkışın bir varyasyonu görüntülenir:
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/" }
Sonraki adımda kullanmak üzere JSON çıkışını ve köşeli ayraçları kopyalayın.
GitHub gizli dizilerini oluşturma
GitHub Actions çalıştırıcısı, Container Registry ve AKS ile etkileşime geçmek için kimlik bilgilerini kullanır. Kapsayıcı kayıt defterine ait hizmet sorumlusu ve 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 çalıştırıcısının erişebileceği gizli dizileri yönetmelidir.
Çatallanmış GitHub deponuzda adresine Settings>>Secrets and variablesActionsgidin.
Actions secrets and variables Sayfasında öğesini seçinNew repository secret.
New secret Sayfasında, alanına NameAZURE_CREDENTIALS girin ve altına Secretterminalden kopyaladığınız JSON çıkışını girin.
Ayarlar aşağıdaki ekran görüntüsüne benzer görünmelidir:
Add secret öğesini seçin.
Sonraki bölümde bu GitHub gizli dizisini kullanarak kapsayıcı görüntüsünü oluşturmak için bir GitHub eylemi oluşturacaksınız.