De infrastructuur maken voor het uitvoeren van Apache Airflow in Azure Kubernetes Service (AKS)
In dit artikel maakt u de infrastructuur die nodig is om Apache Airflow uit te voeren in Azure Kubernetes Service (AKS).
Vereisten
- Als u dat nog niet hebt gedaan, raadpleegt u het overzicht voor het implementeren van een Apache Airflow-cluster in Azure Kubernetes Service (AKS).
- Een Azure-abonnement. Als u nog geen account hebt, kunt u een gratis account maken.
- Azure CLI versie 2.61.0. Zie Azure CLI installeren als u CLI wilt installeren of upgraden.
- Helm versie 3 of hoger. Zie Helm installeren om te installeren.
kubectl
, dat standaard is geïnstalleerd in Azure Cloud Shell.- GitHub-opslagplaats voor het opslaan van Airflow Dags.
- Docker geïnstalleerd op uw lokale computer. Zie Docker downloaden om te installeren.
Omgevingsvariabelen instellen
Stel de vereiste omgevingsvariabelen in voor gebruik in deze handleiding:
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
Een brongroep maken
Maak een resourcegroep met behulp van de
az group create
opdracht.az group create --name $MY_RESOURCE_GROUP_NAME --location $MY_LOCATION --output table
Voorbeelduitvoer:
Location Name ------------- ----------------- $MY_LOCATION $MY_RESOURCE_GROUP_NAME
Een identiteit maken voor toegang tot geheimen in Azure Key Vault
In deze stap maken we een door de gebruiker toegewezen beheerde identiteit die de externe geheimenoperator gebruikt voor toegang tot de Airflow-wachtwoorden die zijn opgeslagen in Azure Key Vault.
Maak een door de gebruiker toegewezen beheerde identiteit met behulp van de
az identity create
opdracht.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)
Voorbeelduitvoer:
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
Een Azure Key Vault-exemplaar maken
Maak een Azure Key Vault-exemplaar met behulp van de
az keyvault create
opdracht.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)
Voorbeelduitvoer:
Location Name ResourceGroup ------------- -------------------- ---------------------- $MY_LOCATION $MY_KEYVAULT_NAME $MY_RESOURCE_GROUP_NAME
Een Azure Container Registry maken
Maak een Azure Container Registry om uw containerinstallatiekopieën op te slaan en te beheren met behulp van de
az acr create
opdracht.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)
Voorbeelduitvoer:
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
Een Azure-opslagaccount maken
Maak een Azure Storage-account om de Airflow-logboeken op te slaan met behulp van de
az acr create
opdracht.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
Voorbeelduitvoer:
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
Een AKS-cluster maken
In deze stap maken we een AKS-cluster met workloadidentiteit en OIDC-verlener ingeschakeld. De workloadidentiteit geeft het serviceaccount externe geheimenoperator toestemming om toegang te krijgen tot de Airflow-wachtwoorden die zijn opgeslagen in uw sleutelkluis.
Maak een AKS-cluster met behulp van de
az aks create
opdracht.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
Voorbeelduitvoer:
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
Haal de URL van de OIDC-verlener op die moet worden gebruikt voor de configuratie van de workloadidentiteit met behulp van de
az aks show
opdracht.export OIDC_URL=$(az aks show --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_CLUSTER_NAME --query oidcIssuerProfile.issuerUrl --output tsv)
Wijs de
AcrPull
rol toe aan de kubelet-identiteit met behulp van deaz role assignment create
opdracht.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
Voorbeelduitvoer:
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
Verbinding maken met het AKS-cluster
Configureer
kubectl
deze om verbinding te maken met uw AKS-cluster met behulp van deaz aks get-credentials
opdracht.az aks get-credentials --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_CLUSTER_NAME --overwrite-existing --output table
Apache Airflow-installatiekopieën uploaden naar uw containerregister
In deze sectie downloaden we de Apache Airflow-installatiekopieën van Docker Hub en uploaden ze naar Azure Container Registry. Deze stap zorgt ervoor dat de installatiekopieën beschikbaar zijn in uw privéregister en kunnen worden gebruikt in uw AKS-cluster. Het wordt afgeraden om de openbare installatiekopieën in een productieomgeving te gebruiken.
Importeer de Airflow-installatiekopieën uit Docker Hub en upload deze met behulp van de
az acr import
opdracht naar uw containerregister.az acr import --name $MY_ACR_REGISTRY --source docker.io/apache/airflow:airflow-pgbouncer-2024.01.19-1.21.0 --image airflow:airflow-pgbouncer-2024.01.19-1.21.0 az acr import --name $MY_ACR_REGISTRY --source docker.io/apache/airflow:airflow-pgbouncer-exporter-2024.06.18-0.17.0 --image airflow:airflow-pgbouncer-exporter-2024.06.18-0.17.0 az acr import --name $MY_ACR_REGISTRY --source docker.io/bitnami/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.26.1 --image statsd-exporter:v0.26.1 az acr import --name $MY_ACR_REGISTRY --source docker.io/apache/airflow:2.9.3 --image airflow:2.9.3 az acr import --name $MY_ACR_REGISTRY --source registry.k8s.io/git-sync/git-sync:v4.1.0 --image git-sync:v4.1.0
Volgende stap
Medewerkers
Microsoft onderhoudt dit artikel. De volgende inzenders hebben het oorspronkelijk geschreven:
- Hoog | Principal Customer Engineer
- Satya Chandragiri | Senior Digital Cloud Solution Architect
- Erin Schaffer | Inhoudsontwikkelaar 2
Azure Kubernetes Service