Упражнение. Создание действия GitHub для развертывания в AKS
В этом упражнении вы выполните следующие задачи:
- Улучшайте существующее действие GitHub, чтобы включить задание развертывания.
- Убедитесь, что изменения развертываются в кластере Служба Azure Kubernetes (AKS).
- Откат развертывания.
Обновление манифеста Kubernetes для службы продуктов
Чтобы развернуть новые версии службы продуктов eShop, измените файл product.yml на Реестр контейнеров Azure (ACR), который использовался в предыдущем уроке.
В вилке репозитория выберите code tabфайл, а затем выберите product.yml файл.
Чтобы изменить файл, выберите значок редактирования (карандаш).
Измените строку:
containers: - image: [replace with your ACR name].azurecr.io/productservice:latest
Замените
[replace with your ACR name]
имя ACR, например acseshop186748394.В правом верхнем углу нажмите кнопку "Зафиксировать изменения" , а затем в диалоговом окне выберите "Зафиксировать изменения".
Создание действия развертывания
Код YAML добавляет шаг GitHub, который:
Имеет один шаг, который развертывает новые образы. Ниже приведены шаги в бегуне ubuntu-latest
:
- Извлекает репозиторий, в который находится этот файл.
- Вход в Azure с учетными данными субъекта-службы.
- Настройка kubelogin для неинтерактивного входа настраивает файл kubeconfig для проверки подлинности Azure.
- Получение контекста набора контекстов K8s задает учетные данные Служба Azure Kubernetes (AKS) в файле runner.kube/config.
- Развертывает приложение в AKS, используя образ, встроенный на предыдущем шаге, и файл манифеста Kubernetes, который вы редактировали ранее.
Выполните следующие действия, чтобы создать действие GitHub, которое развертывает службу купон:
В вилке репозитория на вкладке code tabвыберите вкладку .github/workflows .
Выберите azure-kubernetes-service.yml.
Чтобы изменить файл, выберите значок редактирования (карандаш).
В нижней части файла вставьте следующий код YAML в редактор:
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: false
В правом верхнем углу выберите "Зафиксировать изменения...", а затем в диалоговом окне выберите "Зафиксировать изменения".
Активация развертывания
azure-kubernetes-service.yml Обновление файла и фиксация изменений автоматически активирует другое развертывание. Теперь узнайте, как изменение кода активирует другое развертывание.
У вас есть новый продукт, который вы хотите добавить в каталог.
В вилке репозитория выберите code tabпапку Products .
Выберите папку Data
Выберите файл ProductDataContext.c.
Чтобы изменить файл, выберите значок редактирования (карандаш).
В нижней части файла добавьте новый продукт в массив продуктов :
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" },
В правом верхнем углу нажмите кнопку "Зафиксировать изменения" , а затем в диалоговом окне выберите "Зафиксировать изменения".
Мониторинг развертывания
Чтобы отслеживать ход развертывания, выберите вкладку Actions .
Выберите последний запуск рабочего процесса, указанный для рабочего процесса Build and deploy an app to AKS. Имя запуска — это сообщение фиксации, используемое на предыдущем шаге.
Выберите задание, чтобы просмотреть сведения о выполнении deploy этого рабочего процесса.
В терминале выполните следующую команду, чтобы отслеживать модули pod службы купон в кластере AKS. Флаг
--selector
фильтрует список только для модулей pod для службы купон, а--watch
флаг указываетkubectl
отслеживать изменения.kubectl get pods --selector=app=productservice --watch
Во время развертывания появляется вариант следующих выходных данных:
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
В предыдущих выходных данных обратите внимание, что создается новый модуль pod productservice . Когда новый модуль pod будет готов, старый завершается. Такой процесс позволяет добиться максимально гладкого перехода на новую версию.
Проверка приложения
Выполните следующие действия, чтобы убедиться, что приложение по-прежнему работает:
Просмотрите развернутый eShop, выполнив следующую команду в терминале:
echo "http://$(kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')"
Приведенная выше команда возвращает внешний IP-адрес для веб-приложения. Удерживайте клавиши CTRL и выберите ссылку, чтобы открыть приложение на новой вкладке.
Перейдите на страницу продуктов, чтобы просмотреть новую палатку, указанную в нижней части страницы.
Откат развертывания
Одним из распространенных способов устранения проблем в рабочей среде является отменить изменения известного хорошего развертывания. Kubernetes поддерживает журнал развертывания, который можно использовать для отката к предыдущей версии приложения.
В терминале выполните следующую команду, чтобы удалить новую палатку, добавленную на веб-сайт:
kubectl rollout undo deployment/productservice
Вы увидите следующее сообщение консоли:
deployment.apps/productservice rolled back
Обновите страницу продуктов в браузере, и новая палатка больше не должна быть указана.
Примечание.
В реальном сценарии вы развертываете артефакты сборки в нескольких средах. Например, это может быть среда разработки, тестирования и промежуточная среда. Рабочие процессы развертывания можно активировать в таких событиях, как объединение PR. Вы можете добавить шлюзы качества или утверждения, такие как одобрение заинтересованных сторон, чтобы предотвратить непредвиденные развертывания в рабочей среде.