Поделиться через


Создание, тестирование и развертывание контейнеров в службу Azure Kubernetes Service (AKS) с помощью GitHub Actions.

GitHub Actions предоставляет гибкие возможности для создания автоматизированных рабочих процессов жизненного цикла разработки программного обеспечения. Вы можете использовать несколько действий Kubernetes для развертывания контейнеров из Реестра контейнеров Azure (ACR) в Службе Azure Kubernetes (AKS) с помощью GitHub Actions.

Предварительные условия

GitHub Actions для AKS

С помощью GiHub Actions можно автоматизировать рабочие процессы разработки программного обеспечения из GitHub. Дополнительные сведения см. в разделе GitHub Actions для Azure.

В следующей таблице перечислены доступные действия для AKS:

Имя Описание Дополнительные сведения
azure/aks-set-context Задайте контекст целевого кластера AKS для других действий для использования или выполнения любых команд kubectl. azure/aks-set-context
azure/k8s-set-context Задайте контекст целевого кластера Kubernetes для других действий для использования или выполнения любых команд kubectl. azure/k8s-set-context
azure/k8s-bake Создание файла манифеста для развертывания с помощью Helm, kustomize или kompose. azure/k8s-bake
azure/k8s-create-secret Создание общего секрета или секрета реестра Docker в кластере Kubernetes. azure/k8s-create-secret
azure/k8s-deploy Развертывание манифестов в кластерах Kubernetes. azure/k8s-deploy
azure/k8s-lint Проверка файлов манифеста или их обработка с помощью действия lint. azure/k8s-lint
azure/setup-helm Установка определенной версии двоичного файла Helm на сервере. azure/setup-helm
azure/setup-kubectl Установите определенную версию kubectl на раннер. azure/setup-kubectl
azure/k8s-artifact-substitute Обновите тег или дайджест для образов контейнеров. azure/k8s-artifact-substitute
azure/aks-create-action Создание кластера AKS с помощью Terraform. azure/aks-create-action
azure/aks-github-runner Настройте локальные агенты для GitHub Actions. azure/aks-github-runner
azure/acr-build Создание контейнеров с помощью ACR. azure/acr-build

Использование GitHub Actions с AKS

Например, вы можете использовать GitHub Actions для развертывания приложения в кластере AKS при каждой отправке изменений в репозиторий GitHub. В этом примере рассматривается приложение Azure Vote.

Примечание.

В этом примере для аутентификации с вашим ACR и кластером AKS используется учетная запись службы. Кроме того, можно настроить Open ID Connect (OIDC) и обновить действие azure/login для использования OIDC. Дополнительные сведения см. в статье "Настройка входа Azure с помощью проверки подлинности OpenID Connect".

Создать ответвление и обновить репозиторий

  1. Перейдите в репозиторий Azure Vote и выберите Форк.

  2. Обновите azure-vote-all-in-one-redis.yaml, чтобы использовать ваш ACR для azure-vote-front образа. Замените <registryName> именем своего реестра.

    ...
          containers:
          - name: azure-vote-front
            image: <registryName>.azurecr.io/azuredocs/azure-vote-front:v1
    ...
    
  3. Добавьте обновленный azure-vote-all-in-one-redis.yaml в ваш репозиторий.

Создание секретов

  1. Создайте учетную запись службы для доступа к вашей группе ресурсов с ролью Contributor, используя команду az ad sp create-for-rbac. Замените <SUBSCRIPTION_ID> идентификатором подписки учетной записи Azure и <RESOURCE_GROUP> именем группы ресурсов, содержащей ACR.

    az ad sp create-for-rbac \
        --name "ghActionAzureVote" \
        --scope /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \
        --role Contributor \
        --json-auth
    

    Выходные данные должны выглядеть примерно так:

    {
      "clientId": <clientId>,
      "clientSecret": <clientSecret>,
      "subscriptionId": <subscriptionId>,
      "tenantId": <tenantId>,
      ...
    }
    
  2. Перейдите к параметрам репозитория GitHub и выберите "Секреты безопасности>" и "Действия".>

  3. Для каждого секрета выберите новый секрет репозитория и введите имя и значение секрета.

    Имя секрета Значение секрета
    AZURE_CREDENTIALS Весь JSON-вывод команды az ad sp create-for-rbac.
    service_principal Значение <clientId>.
    service_principal_password Значение <clientSecret>.
    Подписка Значение <subscriptionId>.
    арендатор Значение <tenantId>.
    реестр Имя вашего реестра.
    репозиторий azuredocs
    группа ресурсов Имя группы ресурсов.
    cluster_name Имя вашего кластера.

Дополнительные сведения о создании секретов см. в разделе "Зашифрованные секреты".

Создание файла действий

  1. В репозитории создайте .github/workflows/main.yml и вставьте следующее содержимое:

    name: build_deploy_aks
    on:
      push:
        paths:
          - "azure-vote/**"
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
          - name: Checkout source code 
            uses: actions/checkout@v3
          - name: ACR build
            id: build-push-acr
            uses: azure/acr-build@v1
            with:
              service_principal: ${{ secrets.service_principal }}
              service_principal_password: ${{ secrets.service_principal_password }}
              tenant: ${{ secrets.tenant }}
              registry: ${{ secrets.registry }}
              repository: ${{ secrets.repository }}
              image:  azure-vote-front
              folder: azure-vote
              branch: master
              tag: ${{ github.sha }}
          - name: Azure login
            id: login
            uses: azure/[email protected]
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
          - name: Set AKS context
            id: set-context
            uses: azure/aks-set-context@v3
            with:
              resource-group: '${{ secrets.resource_group }}' 
              cluster-name: '${{ secrets.cluster_name }}'
          - name: Setup kubectl
            id: install-kubectl
            uses: azure/setup-kubectl@v3
          - name: Deploy to AKS
            id: deploy-aks
            uses: Azure/k8s-deploy@v4
            with:
              namespace: 'default'
              manifests: |
                 azure-vote-all-in-one-redis.yaml
              images: '${{ secrets.registry }}.azurecr.io/${{ secrets.repository }}/azure-vote-front:${{ github.sha }}'
              pull-images: false 
    

    Раздел on содержит событие, которое активирует действие. В примере файла действие активируется при отправке изменения в azure-vote каталог.

    В steps разделе содержится каждое отдельное действие.

    1. Исходный код извлечения использует Действие "Извлечение GitHub Actions" для клонирования репозитория.
    2. Сборка ACR использует Действие "Сборка Реестра контейнеров Azure" для сборки образа и его отправки в реестр.
    3. Вход в Azure использует Действие 'Вход в Azure' для авторизации в вашей учетной записи Azure.
    4. Настройка контекста AKS использует Действие "Настройка контекста AKS Azure" для задания контекста для кластера AKS.
    5. Программа установки kubectl использует Действие "Установка Kubectl AKS Azure" для установки kubectl на вашем средстве выполнения.
    6. Развертывание в AKS использует Azure Kubernetes Deploy Action для развертывания приложения в вашем кластере Kubernetes.
  2. Зафиксируйте файл в .github/workflows/main.yml репозитории.

  3. Чтобы подтвердить, что действие работает, обновите azure-vote/azure-vote/config_file.cfg следующим содержимым:

    # UI Configurations
    TITLE = 'Azure Voting App'
    VOTE1VALUE = 'Fish'
    VOTE2VALUE = 'Dogs'
    SHOWHOST = 'false'
    
  4. Зафиксируйте обновленный azure-vote/azure-vote/config_file.cfg в вашем репозитории.

  5. В репозитории выберите "Действия " и убедитесь, что рабочий процесс запущен. Затем убедитесь, что рабочий процесс имеет зеленую галочку, а обновленное приложение развертывается в кластере.

Следующие шаги

Ознакомьтесь со следующими начальными рабочими процессами для AKS. Дополнительные сведения см. в разделе "Использование начальных рабочих процессов".