Упражнение. Создание действия GitHub для развертывания в AKS

Завершено

В этом упражнении вы выполните следующие задачи:

  • Улучшайте существующее действие GitHub, чтобы включить задание развертывания.
  • Убедитесь, что изменения развертываются в кластере Служба Azure Kubernetes (AKS).
  • Откат развертывания.

Обновление манифеста Kubernetes для службы продуктов

Чтобы развернуть новые версии службы продуктов eShop, измените файл product.yml на Реестр контейнеров Azure (ACR), который использовался в предыдущем уроке.

  1. В вилке репозитория выберите code tabфайл, а затем выберите product.yml файл.

  2. Чтобы изменить файл, выберите значок редактирования (карандаш).

  3. Измените строку:

    containers:
      - image: [replace with your ACR name].azurecr.io/productservice:latest
    

    Замените [replace with your ACR name] имя ACR, например acseshop186748394.

  4. В правом верхнем углу нажмите кнопку "Зафиксировать изменения" , а затем в диалоговом окне выберите "Зафиксировать изменения".

Создание действия развертывания

Код YAML добавляет шаг GitHub, который:

Имеет один шаг, который развертывает новые образы. Ниже приведены шаги в бегуне ubuntu-latest :

  1. Извлекает репозиторий, в который находится этот файл.
  2. Вход в Azure с учетными данными субъекта-службы.
  3. Настройка kubelogin для неинтерактивного входа настраивает файл kubeconfig для проверки подлинности Azure.
  4. Получение контекста набора контекстов K8s задает учетные данные Служба Azure Kubernetes (AKS) в файле runner.kube/config.
  5. Развертывает приложение в AKS, используя образ, встроенный на предыдущем шаге, и файл манифеста Kubernetes, который вы редактировали ранее.

Выполните следующие действия, чтобы создать действие GitHub, которое развертывает службу купон:

  1. В вилке репозитория на вкладке code tabвыберите вкладку .github/workflows .

  2. Выберите azure-kubernetes-service.yml.

  3. Чтобы изменить файл, выберите значок редактирования (карандаш).

  4. В нижней части файла вставьте следующий код 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
    
    
  5. В правом верхнем углу выберите "Зафиксировать изменения...", а затем в диалоговом окне выберите "Зафиксировать изменения".

Активация развертывания

azure-kubernetes-service.yml Обновление файла и фиксация изменений автоматически активирует другое развертывание. Теперь узнайте, как изменение кода активирует другое развертывание.

У вас есть новый продукт, который вы хотите добавить в каталог.

  1. В вилке репозитория выберите code tabпапку Products .

  2. Выберите папку Data

  3. Выберите файл ProductDataContext.c.

  4. Чтобы изменить файл, выберите значок редактирования (карандаш).

  5. В нижней части файла добавьте новый продукт в массив продуктов :

    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" },
    
  6. В правом верхнем углу нажмите кнопку "Зафиксировать изменения" , а затем в диалоговом окне выберите "Зафиксировать изменения".

Мониторинг развертывания

  1. Чтобы отслеживать ход развертывания, выберите вкладку Actions .

  2. Выберите последний запуск рабочего процесса, указанный для рабочего процесса Build and deploy an app to AKS. Имя запуска — это сообщение фиксации, используемое на предыдущем шаге.

  3. Выберите задание, чтобы просмотреть сведения о выполнении deploy этого рабочего процесса.

    Screenshot that shows the deploy job selected with a list of all the steps.

  4. В терминале выполните следующую команду, чтобы отслеживать модули 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. Вы можете добавить шлюзы качества или утверждения, такие как одобрение заинтересованных сторон, чтобы предотвратить непредвиденные развертывания в рабочей среде.

Проверьте свои знания

1.

Как лучше хранить конфиденциальную информацию, например учетные данные, для GitHub Actions?

2.

Какова цель создания субъекта-службы Azure Active Directory для использования GitHub Actions?

3.

Почему AKS создает новый контейнер во время развертывания обновления?