Alıştırma - AKS'ye dağıtmak için GitHub eylemi oluşturma
- 10 dakika
Bu alıştırmada aşağıdaki görevleri tamamlayacaksınız:
- Mevcut GitHub eylemini bir dağıtım işi içerecek şekilde geliştirin.
- Değişikliklerin Azure Kubernetes Service (AKS) kümesine dağıtıldığını doğrulayın.
- Dağıtımı geri al.
Ürün hizmeti için Kubernetes bildirimini güncelleştirme
eShop ürün hizmetinin yeni sürümlerini dağıtmak için product.yml dosyasını önceki ünitede kullandığınız Azure Container Registry'yi (ACR) işaret eden şekilde düzenleyin.
Çatallanmış deponuzda code tabseçin ve ardından product.yml dosyasını seçin.
Dosyayı düzenlemek için düzenle simgesini (kalem) seçin.
Satırı düzenleyin:
containers: - image: [replace with your ACR name].azurecr.io/productservice:latestdeğerini
[replace with your ACR name]acseshop186748394 gibi ACR'nizin adıyla değiştirin.Sağ üst kısımda Değişiklikleri işle... öğesini seçin ve ardından iletişim kutusunda Değişiklikleri işle'yi seçin.
Dağıtım eylemini oluşturma
YAML kodu, yeni imajlar dağıtan bir adım içeren bir GitHub adımı ekler. bir ubuntu-latest çalıştırıcısının adımları şunlardır:
- Bu dosyanın içinde olduğu depoyu denetler.
- Azure Oturum Açma hizmet sorumlusu kimlik bilgileriyle Azure'da oturum açar.
- Kubelogin'i etkileşim gerektirmeyen oturum açma için ayarlama Azure kimlik doğrulaması için kubeconfig dosyasını yapılandırır.
- K8s bağlamını al Bağlamı ayarla, çalıştırıcının .kube/config dosyasındaki Azure Kubernetes Service (AKS) kimlik bilgilerini ayarlar.
- Uygulamayı dağıtır önceki adımda oluşturulan görüntüyü ve daha önce düzenlediğiniz Kubernetes bildirim dosyasını kullanarak uygulamayı AKS'ye dağıtır.
Kupon hizmetini dağıtan bir GitHub eylemi oluşturmak için aşağıdaki adımları tamamlayın:
Çatallanmış deponuzda, code tabüzerinde .github/workflows sekmesini seçin.
azure-kubernetes-service.ymlseçin.
Dosyayı düzenlemek için düzenle simgesini (kalem) seçin.
Dosyanın en altına aşağıdaki YAML kodunu düzenleyiciye yapıştırın:
deploy: permissions: actions: read contents: read id-token: write runs-on: ubuntu-latest needs: [buildImage] steps: # Checks out the repository this file is in - uses: actions/checkout@v3 # Logs in with your Azure credentials - name: Azure login uses: azure/login@v1.4.6 with: creds: '${{ secrets.AZURE_CREDENTIALS }}' # Use kubelogin to configure your kubeconfig for Azure auth - name: Set up kubelogin for non-interactive login uses: azure/use-kubelogin@v1 with: kubelogin-version: 'v0.0.25' # Retrieves your Azure Kubernetes Service cluster's kubeconfig file - name: Get K8s context uses: azure/aks-set-context@v3 with: resource-group: ${{ env.RESOURCE_GROUP }} cluster-name: ${{ env.CLUSTER_NAME }} admin: 'false' use-kubelogin: 'true' # Deploys application based on given manifest file - name: Deploys application uses: Azure/k8s-deploy@v4 with: action: deploy manifests: ${{ env.DEPLOYMENT_MANIFEST_PATH }} images: | ${{ env.AZURE_CONTAINER_REGISTRY }}.azurecr.io/${{ env.CONTAINER_NAME }}:${{ github.sha }} pull-images: falseSağ üst kısımda Değişiklikleri işle... öğesini seçin ve ardından iletişim kutusunda Değişiklikleri işle'yi seçin.
Dağıtımı başlat
azure-kubernetes-service.yml dosyasının güncelleştirilmesi ve değişikliklerin işlenmesi otomatik olarak başka bir dağıtımı tetikler. Şimdi kod değişikliği yapmanın başka bir dağıtımı nasıl tetiklediğini görün.
Pazarlama ekibinizin kataloğa eklemek istediğiniz yeni bir ürününüz var.
Fork edilen deponuzda, code tabüzerinde Products klasörünü seçin.
Data klasörünü seçin.
ProductDataContext.c dosyasını seçin.
Dosyayı düzenlemek için düzenle simgesini (kalem) seçin.
Dosyanın en altında, ürünler dizisine yeni bir ürün ekleyin:
new Product { Name = "Camping Tent 2", Description = "This updated tent is improved and cheaper, perfect for your next trip.", Price = 79.99m, ImageUrl = "product9.png" },Sağ üst kısımda Değişiklikleri işle... öğesini seçin ve ardından iletişim kutusunda Değişiklikleri işle'yi seçin.
Dağıtımı izleme
Dağıtımın ilerleme durumunu izlemek için Actions sekmesini seçin.
Build and deploy an app to AKS iş akışı için listelenen en son iş akışı çalıştırmasını seçin. Çalıştırmanın adı, önceki adımda kullandığınız işleme iletisidir.
Bu iş akışı çalışmasına ait ayrıntıları görmek için deploy işini seçin.
AKS kümenizdeki kupon hizmeti podlarını izlemek için terminalde aşağıdaki komutu çalıştırın.
--selectorbayrağı, listeyi yalnızca kupon hizmetine ait podlarla sınırlarken,--watchbayrağıkubectl'ye değişiklikleri izlemesini söyler.kubectl get pods --selector=app=productservice --watchDağıtım sırasında aşağıdaki çıktının bir varyasyonu görüntülenir.
NAME READY STATUS RESTARTS AGE productservice-7979d4c47-xlcrr 1/1 Running 0 17m productservice-ff98b6d8d-7wmsh 0/1 Pending 0 0s productservice-ff98b6d8d-7wmsh 0/1 Pending 0 0s productservice-ff98b6d8d-7wmsh 0/1 ContainerCreating 0 0s productservice-ff98b6d8d-7wmsh 1/1 Running 0 4s productservice-7979d4c47-xlcrr 1/1 Terminating 0 19mÖnceki çıktıda yeni bir ürün hizmeti pod oluşturulduğuna dikkat edin. Yeni pod hazır olduğunda eski pod sonlandırılır. Bu işlem, yeni sürüme geçişi mümkün olduğunca sorunsuz hale getirir.
Uygulamayı doğrulama
Uygulamanızın hala çalıştığını doğrulamak için aşağıdaki adımları tamamlayın:
Terminalde şu komutu çalıştırarak dağıtılan eShop'un görünümünü görüntüleyin:
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ı seçerek uygulamayı yeni bir sekmede açın.
Sayfanın alt kısmında listelenen yeni çadırı görüntülemek için ürünler sayfasına gidin.
Dağıtımı geri çekme
Üretim sorunlarının yaygın bir azaltması, bilinen iyi bir dağıtıma geri dönmektir. Kubernetes, uygulamanızın önceki bir sürümüne geri dönmek için kullanabileceğiniz bir dağıtım geçmişi tutar.
Terminalinizde şu komutu çalıştırarak web sitesine yeni eklediğiniz yeni çadırı kaldırın:
kubectl rollout undo deployment/productservice
Şu konsol iletisini görmeniz gerekir:
deployment.apps/productservice rolled back
Tarayıcınızdaki ürünler sayfasını yenilediğinizde yeni çadır artık listelenmemelidir.
Not
Gerçek hayattaki bir senaryoda, derlemenin çıktıları birden çok ortama dağıtılır. Örneğin geliştirme, test ve hazırlama ortamlarınız olabilir. PR'leri birleştirme gibi olaylara göre dağıtım iş akışlarını tetikleyebilirsiniz. Üretimde beklenmeyen dağıtımları önlemek için bir paydaşın PR onayı gibi kalite veya onay kapıları ekleyebilirsiniz.