Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье вы создадите ресурсы инфраструктуры, необходимые для запуска Apache Airflow в службе Azure Kubernetes (AKS).
Предварительные условия
- Если вы еще не сделали этого, ознакомьтесь с документом по развертыванию кластера Apache Airflow в Службе Azure Kubernetes (AKS).
- Подписка Azure. Если ее нет, создайте бесплатную учетную запись.
- Azure CLI версии 2.61.0. Чтобы выполнить установку или обновление, см. сведения в статье Установка Azure CLI.
- версия Helm 3 или выше Сведения об установке см. в разделе "Установка Helm".
-
kubectl, который устанавливается в Azure Cloud Shell по умолчанию. - Репозиторий GitHub для хранения DAGs Airflow.
- Docker, установленный на локальном компьютере. Сведения об установке см. в разделе Get Docker.
Настройка переменных среды
Задайте необходимые переменные среды для использования в этом руководстве:
random=$(echo $RANDOM | tr '[0-9]' '[a-z]') export MY_LOCATION=canadacentral export MY_RESOURCE_GROUP_NAME=apache-airflow-rg export MY_IDENTITY_NAME=airflow-identity-123 export MY_ACR_REGISTRY=mydnsrandomname$(echo $random) export MY_KEYVAULT_NAME=airflow-vault-$(echo $random)-kv export MY_CLUSTER_NAME=apache-airflow-aks export SERVICE_ACCOUNT_NAME=airflow export SERVICE_ACCOUNT_NAMESPACE=airflow export AKS_AIRFLOW_NAMESPACE=airflow export AKS_AIRFLOW_CLUSTER_NAME=cluster-aks-airflow export AKS_AIRFLOW_LOGS_STORAGE_ACCOUNT_NAME=airflowsasa$(echo $random) export AKS_AIRFLOW_LOGS_STORAGE_CONTAINER_NAME=airflow-logs export AKS_AIRFLOW_LOGS_STORAGE_SECRET_NAME=storage-account-credentials
Создание группы ресурсов
Создайте группу ресурсов с помощью
az group createкоманды.az group create --name $MY_RESOURCE_GROUP_NAME --location $MY_LOCATION --output tableПример результата:
Location Name ------------- ----------------- $MY_LOCATION $MY_RESOURCE_GROUP_NAME
Создание удостоверения для доступа к секретам в Azure Key Vault
На этом шаге мы создадим управляемое удостоверение, назначаемое пользователем, которое оператор внешних секретов использует для доступа к паролям Airflow, хранящимся в Azure Key Vault.
Создайте управляемое удостоверение, назначаемое пользователем, с помощью команды
az identity create.az identity create --name $MY_IDENTITY_NAME --resource-group $MY_RESOURCE_GROUP_NAME --output table export MY_IDENTITY_NAME_ID=$(az identity show --name $MY_IDENTITY_NAME --resource-group $MY_RESOURCE_GROUP_NAME --query id --output tsv) export MY_IDENTITY_NAME_PRINCIPAL_ID=$(az identity show --name $MY_IDENTITY_NAME --resource-group $MY_RESOURCE_GROUP_NAME --query principalId --output tsv) export MY_IDENTITY_NAME_CLIENT_ID=$(az identity show --name $MY_IDENTITY_NAME --resource-group $MY_RESOURCE_GROUP_NAME --query clientId --output tsv)Пример результата:
ClientId Location Name PrincipalId ResourceGroup TenantId ------------------------------------ ------------- -------------------- ------------------------------------ ----------------------- ------------------------------------ 00001111-aaaa-2222-bbbb-3333cccc4444 $MY_LOCATION $MY_IDENTITY_NAME aaaaaaaa-bbbb-cccc-1111-222222222222 $MY_RESOURCE_GROUP_NAME aaaabbbb-0000-cccc-1111-dddd2222eeee
Создайте экземпляр Azure Key Vault
Создайте экземпляр Azure Key Vault с помощью
az keyvault createкоманды.az keyvault create --name $MY_KEYVAULT_NAME --resource-group $MY_RESOURCE_GROUP_NAME --location $MY_LOCATION --enable-rbac-authorization false --output table export KEYVAULTID=$(az keyvault show --name $MY_KEYVAULT_NAME --query "id" --output tsv) export KEYVAULTURL=$(az keyvault show --name $MY_KEYVAULT_NAME --query "properties.vaultUri" --output tsv)Пример результата:
Location Name ResourceGroup ------------- -------------------- ---------------------- $MY_LOCATION $MY_KEYVAULT_NAME $MY_RESOURCE_GROUP_NAME
Создание реестра контейнеров Azure
Создайте реестр контейнеров Azure для хранения образов контейнеров и управления ими с помощью
az acr createкоманды.az acr create \ --name ${MY_ACR_REGISTRY} \ --resource-group $MY_RESOURCE_GROUP_NAME \ --sku Premium \ --location $MY_LOCATION \ --admin-enabled true \ --output table export MY_ACR_REGISTRY_ID=$(az acr show --name $MY_ACR_REGISTRY --resource-group $MY_RESOURCE_GROUP_NAME --query id --output tsv)Пример результата:
NAME RESOURCE GROUP LOCATION SKU LOGIN SERVER CREATION DATE ADMIN ENABLED -------------------- ---------------------- ------------- ------- ------------------------------- -------------------- --------------- mydnsrandomnamebfbje $MY_RESOURCE_GROUP_NAME $MY_LOCATION Premium mydnsrandomnamebfbje.azurecr.io 2024-11-07T00:32:48Z True
Создание учетной записи службы хранилища Azure
Создайте учетную запись службы хранилища Azure для хранения журналов Airflow с помощью команды
az acr create.az storage account create --name $AKS_AIRFLOW_LOGS_STORAGE_ACCOUNT_NAME --resource-group $MY_RESOURCE_GROUP_NAME --location $MY_LOCATION --sku Standard_ZRS --output table export AKS_AIRFLOW_LOGS_STORAGE_ACCOUNT_KEY=$(az storage account keys list --account-name $AKS_AIRFLOW_LOGS_STORAGE_ACCOUNT_NAME --query "[0].value" -o tsv) az storage container create --name $AKS_AIRFLOW_LOGS_STORAGE_CONTAINER_NAME --account-name $AKS_AIRFLOW_LOGS_STORAGE_ACCOUNT_NAME --output table --account-key $AKS_AIRFLOW_LOGS_STORAGE_ACCOUNT_KEY az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name AKS-AIRFLOW-LOGS-STORAGE-ACCOUNT-NAME --value $AKS_AIRFLOW_LOGS_STORAGE_ACCOUNT_NAME az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name AKS-AIRFLOW-LOGS-STORAGE-ACCOUNT-KEY --value $AKS_AIRFLOW_LOGS_STORAGE_ACCOUNT_KEYПример результата:
AccessTier AllowBlobPublicAccess AllowCrossTenantReplication CreationTime EnableHttpsTrafficOnly Kind Location MinimumTlsVersion Name PrimaryLocation ProvisioningState ResourceGroup StatusOfPrimary ------------ ----------------------- ----------------------------- -------------------------------- ------------------------ --------- ------------- ------------------- ---------------- ----------------- ------------------- ----------------- ----------------- Hot False False 2024-11-07T00:22:13.323104+00:00 True StorageV2 $MY_LOCATION TLS1_0 airflowsasabfbje $MY_LOCATION Succeeded $MY_RESOURCE_GROUP_NAME available Created --------- True
Создание кластера AKS
На этом шаге мы создаем кластер AKS с включенной идентификацией рабочих нагрузок и провайдером OIDC. Эта конфигурация создает кластер AKS с высоким уровнем доступности, оптимизированный для выполнения рабочих нагрузок, таких как Apache Airflow. Он подготавливает кластер с тремя узлами с помощью Standard_DS4_v2 виртуальных машин в трех зонах доступности для обеспечения устойчивости. Кластер интегрирован с ACR для безопасной загрузки образов и включает OIDC-провайдер и поддержку удостоверений рабочей нагрузки для безопасного доступа к ресурсам Azure на основе удостоверений. Кроме того, он включает подключаемый модуль сети Azure CNI, драйвер CSI для хранилища Blob, а также автоматическое обновление операционных систем узлов и обновление до новых версий Kubernetes для повышения производительности и безопасности.
Создайте кластер AKS с помощью
az aks createкоманды.az aks create \ --location $MY_LOCATION \ --name $MY_CLUSTER_NAME \ --tier standard \ --resource-group $MY_RESOURCE_GROUP_NAME \ --network-plugin azure \ --node-vm-size Standard_DS4_v2 \ --node-count 3 \ --auto-upgrade-channel stable \ --node-os-upgrade-channel NodeImage \ --attach-acr ${MY_ACR_REGISTRY} \ --enable-oidc-issuer \ --enable-blob-driver \ --enable-workload-identity \ --zones 1 2 3 \ --generate-ssh-keys \ --output tableПример результата:
AzurePortalFqdn CurrentKubernetesVersion DisableLocalAccounts DnsPrefix EnableRbac Fqdn KubernetesVersion Location MaxAgentPools Name NodeResourceGroup ProvisioningState ResourceGroup ResourceUid SupportPlan ------------------------------------------------------------------------------ -------------------------- ---------------------- ---------------------------------- ------------ ----------------------------------------------------------------------- ------------------- ------------- --------------- ------------------ ----------------------------------------------------- ------------------- ----------------------- ------------------------------------ ------------------ apache-air-apache-airflow-r-363a0a-rhf6saad.portal.hcp.$MY_LOCATION.azmk8s.io 1.29.9 False apache-air-apache-airflow-r-363a0a True apache-air-apache-airflow-r-363a0a-rhf6saad.hcp.$MY_LOCATION.azmk8s.io 1.29 $MY_LOCATION 100 $MY_CLUSTER_NAME MC_apache-airflow-rg_apache-airflow-aks_$MY_LOCATION Succeeded $MY_RESOURCE_GROUP_NAME b1b1b1b1-cccc-dddd-eeee-f2f2f2f2f2f2 KubernetesOfficialПолучите URL-адрес издателя OIDC, который будет использоваться для конфигурации удостоверения рабочей нагрузки с помощью
az aks showкоманды.export OIDC_URL=$(az aks show --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_CLUSTER_NAME --query oidcIssuerProfile.issuerUrl --output tsv)С помощью команды
AcrPullназначьте рольaz role assignment createудостоверению kubelet.export KUBELET_IDENTITY=$(az aks show -g $MY_RESOURCE_GROUP_NAME --name $MY_CLUSTER_NAME --output tsv --query identityProfile.kubeletidentity.objectId) az role assignment create \ --assignee ${KUBELET_IDENTITY} \ --role "AcrPull" \ --scope ${MY_ACR_REGISTRY_ID} \ --output tableПример результата:
CreatedBy CreatedOn Name PrincipalId PrincipalName PrincipalType ResourceGroup RoleDefinitionId RoleDefinitionName Scope UpdatedBy UpdatedOn ------------------------------------ -------------------------------- ------------------------------------ ------------------------------------ ------------------------------------ ---------------- ----------------------- ------------------------------------------------------------------------------------------------------------------------------------------ -------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------ -------------------------------- ccccdddd-2222-eeee-3333-ffff4444aaaa 2024-11-07T00:43:26.905445+00:00 b1b1b1b1-cccc-dddd-eeee-f2f2f2f2f2f2 bbbbbbbb-cccc-dddd-2222-333333333333 cccccccc-dddd-eeee-3333-444444444444 ServicePrincipal $MY_RESOURCE_GROUP_NAME /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/7f951dda-4ed3-4680-a7ca-43fe172d538d AcrPull /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/$MY_RESOURCE_GROUP_NAME/providers/Microsoft.ContainerRegistry/registries/mydnsrandomnamebfbje ccccdddd-2222-eeee-3333-ffff4444aaaa 2024-11-07T00:43:26.905445+00:00
Подключение к кластеру AKS
Настройте
kubectl, чтобы подключиться к вашему кластеру AKS, используя командуaz aks get-credentials.az aks get-credentials --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_CLUSTER_NAME --overwrite-existing --output table
Загрузите образы Apache Airflow в реестр контейнеров
В этом разделе мы скачиваем образы Apache Airflow из Docker Hub и отправим их в Реестр контейнеров Azure. Этот шаг гарантирует, что образы доступны в частном реестре и могут использоваться в кластере AKS. Мы не рекомендуем использовать общедоступный образ в рабочей среде.
Импортируйте образы Airflow из Docker Hub и отправьте их в реестр контейнеров с помощью
az acr importкоманды.az acr import --name $MY_ACR_REGISTRY --source docker.io/apache/airflow:airflow-pgbouncer-2025.03.05-1.23.1 --image airflow:airflow-pgbouncer-2025.03.05-1.23.1 az acr import --name $MY_ACR_REGISTRY --source docker.io/apache/airflow:airflow-pgbouncer-exporter-2025.03.05-0.18.0 --image airflow:airflow-pgbouncer-exporter-2025.03.05-0.18.0 az acr import --name $MY_ACR_REGISTRY --source docker.io/bitnamilegacy/postgresql:16.1.0-debian-11-r15 --image postgresql:16.1.0-debian-11-r15 az acr import --name $MY_ACR_REGISTRY --source quay.io/prometheus/statsd-exporter:v0.28.0 --image statsd-exporter:v0.28.0 az acr import --name $MY_ACR_REGISTRY --source docker.io/apache/airflow:3.0.2 --image airflow:3.0.2 az acr import --name $MY_ACR_REGISTRY --source registry.k8s.io/git-sync/git-sync:v4.3.0 --image git-sync:v4.3.0
Следующий шаг
Соавторы
Корпорация Майкрософт поддерживает эту статью. Следующие участники первоначально написали:
- Don High | Главный инженер клиента
- Сатя Чанрагири | Старший архитектор решений цифрового облака
- Эрин Шаффер | Разработчик содержимого 2