Упражнение. Создание действия GitHub для развертывания в AKS
- 10 мин
В этом упражнении вы выполните следующие задачи:
- Улучшить существующее действие GitHub, чтобы включить задачу развертывания.
- Убедитесь, что изменения развертываются в кластере Службы Azure Kubernetes (AKS).
- Откат развертывания.
Обновление манифеста Kubernetes для службы продуктов
Чтобы развернуть новые версии службы продуктов eShop, измените файл product.yml, чтобы указать на Azure Container Registry (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 runner:
- Извлекает репозиторий, в который находится этот файл.
- Вход в Azure с учетными данными служебного принципала.
- Настройка kubelogin для неинтерактивного входа настраивает файл kubeconfig для проверки подлинности Azure.
- Получить контекст K8s команда настройки контекста устанавливает учетные данные Azure Kubernetes Service (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 . Когда новый под будет готов, старый будет завершён. Этот процесс делает переход на новую версию как можно более гладкой.
Проверка приложения
Выполните следующие действия, чтобы убедиться, что приложение по-прежнему работает:
Просмотрите развернутый 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. Вы можете добавить шлюзы качества или утверждения, такие как одобрение PR заинтересованных сторон, чтобы предотвратить непредвиденные развертывания в производственной среде.