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


Создание, тестирование и развертывание контейнеров в Служба Azure Kubernetes (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 и выберите "Форк".

  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>.
    tenant Значение <tenantId>.
    хранилища Имя реестра.
    Linux azuredocs
    resource_group Имя группы ресурсов.
    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/login@v1.4.3
            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 для развертывания приложения в кластере 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. Дополнительные сведения см. в разделе "Использование начальных рабочих процессов".