Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ebben a cikkben az Apache Airflow konfigurálása és üzembe helyezése az Azure Kubernetes Service-ben (AKS) a Helm használatával.
Számítási feladat identitásának konfigurálása
Hozzon létre egy névteret az Airflow-fürthöz a
kubectl create namespaceparanccsal.kubectl create namespace ${AKS_AIRFLOW_NAMESPACE} --dry-run=client --output yaml | kubectl apply -f -A kimenet példája:
namespace/airflow createdHozzon létre egy szolgáltatásfiókot, és konfigurálja a számítási feladat identitását a
kubectl applyparanccsal.export TENANT_ID=$(az account show --query tenantId -o tsv) cat <<EOF | kubectl apply -f - apiVersion: v1 kind: ServiceAccount metadata: annotations: azure.workload.identity/client-id: "${MY_IDENTITY_NAME_CLIENT_ID}" azure.workload.identity/tenant-id: "${TENANT_ID}" name: "${SERVICE_ACCOUNT_NAME}" namespace: "${AKS_AIRFLOW_NAMESPACE}" EOFA kimenet példája:
serviceaccount/airflow created
A Külső titkos kódok operátor telepítése
Ebben a szakaszban a Helm használatával telepítjük a Külső titkos kódok operátort. A Külső titkos kódok operátor egy Kubernetes-operátor, amely a külső titkos kulcstárolókban, például az Azure Key Vaultban tárolt külső titkos kulcsok életciklusát kezeli.
Adja hozzá az External Secrets Helm-adattárat, és frissítse az adattárat a
helm repo addéshelm repo updateparancsok használatával.helm repo add external-secrets https://charts.external-secrets.io helm repo updateA kimenet példája:
Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "external-secrets" chart repositoryTelepítse a Külső titkos kódok operátort a
helm installparanccsal.helm install external-secrets \ external-secrets/external-secrets \ --namespace ${AKS_AIRFLOW_NAMESPACE} \ --create-namespace \ --set installCRDs=true \ --waitA kimenet példája:
NAME: external-secrets LAST DEPLOYED: Thu Nov 7 11:16:07 2024 NAMESPACE: airflow STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: external-secrets has been deployed successfully in namespace airflow! In order to begin using ExternalSecrets, you will need to set up a SecretStore or ClusterSecretStore resource (for example, by creating a 'vault' SecretStore). More information on the different types of SecretStores and how to configure them can be found in our Github: https://github.com/external-secrets/external-secrets
Titkos kulcsok létrehozása
Hozzon létre egy erőforrást
SecretStorea kulcstartóban tárolt Airflow-jelszavak eléréséhez akubectl applyparancs használatával.kubectl apply -f - <<EOF apiVersion: external-secrets.io/v1 kind: SecretStore metadata: name: azure-store namespace: ${AKS_AIRFLOW_NAMESPACE} spec: provider: # provider type: azure keyvault azurekv: authType: WorkloadIdentity vaultUrl: "${KEYVAULTURL}" serviceAccountRef: name: ${SERVICE_ACCOUNT_NAME} EOFA kimenet példája:
secretstore.external-secrets.io/azure-store createdHozzon létre egy erőforrást
ExternalSecret, amely létrehoz egy Kubernetes-tSecretaairflownévtérben aAirflowkulcstartóban tárolt titkos kódokkal akubectl applyparancs használatával.kubectl apply -f - <<EOF apiVersion: external-secrets.io/v1 kind: ExternalSecret metadata: name: airflow-aks-azure-logs-secrets namespace: ${AKS_AIRFLOW_NAMESPACE} spec: refreshInterval: 1h secretStoreRef: kind: SecretStore name: azure-store target: name: ${AKS_AIRFLOW_LOGS_STORAGE_SECRET_NAME} creationPolicy: Owner data: # name of the SECRET in the Azure KV (no prefix is by default a SECRET) - secretKey: azurestorageaccountname remoteRef: key: AKS-AIRFLOW-LOGS-STORAGE-ACCOUNT-NAME - secretKey: azurestorageaccountkey remoteRef: key: AKS-AIRFLOW-LOGS-STORAGE-ACCOUNT-KEY EOFA kimenet példája:
externalsecret.external-secrets.io/airflow-aks-azure-logs-secrets createdHozzon létre egy összevont hitelesítő adatot a
az identity federated-credential createparanccsal.az identity federated-credential create \ --name external-secret-operator \ --identity-name ${MY_IDENTITY_NAME} \ --resource-group ${MY_RESOURCE_GROUP_NAME} \ --issuer ${OIDC_URL} \ --subject system:serviceaccount:${AKS_AIRFLOW_NAMESPACE}:${SERVICE_ACCOUNT_NAME} \ --output tableA kimenet példája:
Issuer Name ResourceGroup Subject ----------------------------------------------------------------------------------------------------------------------- ------------------------ ----------------------- ------------------------------------- https://$MY_LOCATION.oic.prod-aks.azure.com/c2c2c2c2-dddd-eeee-ffff-a3a3a3a3a3a3/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/ external-secret-operator $MY_RESOURCE_GROUP_NAME system:serviceaccount:airflow:airflowAdjon engedélyt a felhasználó által hozzárendelt identitásnak, hogy hozzáférjen a titkos kódhoz a
az keyvault set-policyparancs használatával.az keyvault set-policy --name $MY_KEYVAULT_NAME --object-id $MY_IDENTITY_NAME_PRINCIPAL_ID --secret-permissions get --output tableA kimenet példája:
Location Name ResourceGroup ------------- ---------------------- ----------------------- $MY_LOCATION $MY_KEYVAULT_NAME $MY_RESOURCE_GROUP_NAME
Állandó kötet létrehozása Apache Airflow-naplókhoz
Hozzon létre egy állandó kötetet a
kubectl applyparanccsal.kubectl apply -f - <<EOF apiVersion: v1 kind: PersistentVolume metadata: name: pv-airflow-logs labels: type: local spec: capacity: storage: 5Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain # If set as "Delete" container would be removed after pvc deletion storageClassName: azureblob-fuse-premium mountOptions: - -o allow_other - --file-cache-timeout-in-seconds=120 csi: driver: blob.csi.azure.com readOnly: false volumeHandle: airflow-logs-1 volumeAttributes: resourceGroup: ${MY_RESOURCE_GROUP_NAME} storageAccount: ${AKS_AIRFLOW_LOGS_STORAGE_ACCOUNT_NAME} containerName: ${AKS_AIRFLOW_LOGS_STORAGE_CONTAINER_NAME} nodeStageSecretRef: name: ${AKS_AIRFLOW_LOGS_STORAGE_SECRET_NAME} namespace: ${AKS_AIRFLOW_NAMESPACE} EOFA kimenet példája:
persistentvolume/pv-airflow-logs created
Állandó mennyiségi jogcím létrehozása Apache Airflow-naplókhoz
Hozzon létre egy állandó mennyiségi jogcímet a
kubectl applyparancs használatával.kubectl apply -f - <<EOF apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-airflow-logs namespace: ${AKS_AIRFLOW_NAMESPACE} spec: storageClassName: azureblob-fuse-premium accessModes: - ReadWriteMany resources: requests: storage: 5Gi volumeName: pv-airflow-logs EOFA kimenet példája:
persistentvolumeclaim/pvc-airflow-logs created
Az Apache Airflow üzembe helyezése a Helm használatával
Konfiguráljon egy
airflow_values.yamlfájlt a diagram alapértelmezett üzembehelyezési konfigurációinak módosításához és a lemezképek tárolóregisztrációs adatbázisának frissítéséhez.cat <<EOF> airflow_values.yaml images: airflow: repository: $MY_ACR_REGISTRY.azurecr.io/airflow tag: 3.0.2 # Specifying digest takes precedence over tag. digest: ~ pullPolicy: IfNotPresent # To avoid images with user code, you can turn this to 'true' and # all the 'run-airflow-migrations' and 'wait-for-airflow-migrations' containers/jobs # will use the images from 'defaultAirflowRepository:defaultAirflowTag' values # to run and wait for DB migrations . useDefaultImageForMigration: false # timeout (in seconds) for airflow-migrations to complete migrationsWaitTimeout: 60 pod_template: # Note that `images.pod_template.repository` and `images.pod_template.tag` parameters # can be overridden in `config.kubernetes` section. So for these parameters to have effect # `config.kubernetes.worker_container_repository` and `config.kubernetes.worker_container_tag` # must be not set . repository: $MY_ACR_REGISTRY.azurecr.io/airflow tag: 3.0.2 pullPolicy: IfNotPresent flower: repository: $MY_ACR_REGISTRY.azurecr.io/airflow tag: 3.0.2 pullPolicy: IfNotPresent statsd: repository: $MY_ACR_REGISTRY.azurecr.io/statsd-exporter tag: v0.28.0 pullPolicy: IfNotPresent pgbouncer: repository: $MY_ACR_REGISTRY.azurecr.io/airflow tag: airflow-pgbouncer-2025.03.05-1.23.1 pullPolicy: IfNotPresent pgbouncerExporter: repository: $MY_ACR_REGISTRY.azurecr.io/airflow tag: airflow-pgbouncer-exporter-2025.03.05-0.18.0 pullPolicy: IfNotPresent gitSync: repository: $MY_ACR_REGISTRY.azurecr.io/git-sync tag: v4.3.0 pullPolicy: IfNotPresent # Airflow executor executor: "KubernetesExecutor" # Environment variables for all airflow containers env: - name: ENVIRONMENT value: dev extraEnv: | - name: AIRFLOW__CORE__DEFAULT_TIMEZONE value: 'America/New_York' # Configuration for postgresql subchart # Not recommended for production! Instead, spin up your own Postgresql server and use the `data` attribute in this # yaml file. postgresql: enabled: true image: registry: $MY_ACR_REGISTRY.azurecr.io repository: postgresql tag: 16.1.0-debian-11-r15 # Enable pgbouncer. See https://airflow.apache.org/docs/helm-chart/stable/production-guide.html#pgbouncer pgbouncer: enabled: true dags: gitSync: enabled: true repo: https://github.com/donhighmsft/airflowexamples.git branch: main rev: HEAD depth: 1 maxFailures: 0 subPath: "dags" # sshKeySecret: airflow-git-ssh-secret # knownHosts: | # github.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk= logs: persistence: enabled: true existingClaim: pvc-airflow-logs storageClassName: azureblob-fuse-premium # We disable the log groomer sidecar because we use Azure Blob Storage for logs, with lifecyle policy set. triggerer: logGroomerSidecar: enabled: false scheduler: logGroomerSidecar: enabled: false workers: logGroomerSidecar: enabled: false EOFAdja hozzá az Apache Airflow Helm-adattárat, és frissítse az adattárat a parancsok és
helm repo addahelm repo updateparancsok használatával.helm repo add apache-airflow https://airflow.apache.org helm repo updateA kimenet példája:
"apache-airflow" has been added to your repositories Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "apache-airflow" chart repositoryKeresse meg a Helm-adattárban az Apache Airflow-diagramot a
helm search repoparanccsal.helm search repo airflowA kimenet példája:
NAME CHART VERSION APP VERSION DESCRIPTION apache-airflow/airflow 1.15.0 3.0.2 The official Helm chart to deploy Apache Airflo...Telepítse az Apache Airflow-diagramot a
helm installparanccsal.helm install airflow apache-airflow/airflow --version 1.15.0 --namespace airflow --create-namespace -f airflow_values.yaml --debugA kimenet példája:
NAME: airflow LAST DEPLOYED: Fri Nov 8 11:59:43 2024 NAMESPACE: airflow STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: Thank you for installing Apache Airflow 3.0.2! Your release is named airflow. You can now access your dashboard(s) by executing the following command(s) and visiting the corresponding port at localhost in your browser: Airflow Webserver: kubectl port-forward svc/airflow-webserver 8080:8080 --namespace airflow Default Webserver (Airflow UI) Login credentials: username: admin password: admin Default Postgres connection credentials: username: postgres password: postgres port: 5432 You can get Fernet Key value by running the following: echo Fernet Key: $(kubectl get secret --namespace airflow airflow-fernet-key -o jsonpath="{.data.fernet-key}" | base64 --decode) ########################################################### # WARNING: You should set a static webserver secret key # ########################################################### You are using a dynamically generated webserver secret key, which can lead to unnecessary restarts of your Airflow components. Information on how to set a static webserver secret key can be found here: https://airflow.apache.org/docs/helm-chart/stable/production-guide.html#webserver-secret-keyEllenőrizze a telepítést a
kubectl get podsparanccsal.kubectl get pods -n airflowA kimenet példája:
NAME READY STATUS RESTARTS AGE airflow-create-user-kklqf 1/1 Running 0 12s airflow-pgbouncer-d7bf9f649-25fnt 2/2 Running 0 61s airflow-postgresql-0 1/1 Running 0 61s airflow-run-airflow-migrations-zns2b 0/1 Completed 0 60s airflow-scheduler-5c45c6dbdd-7t6hv 1/2 Running 0 61s airflow-statsd-6df8564664-6rbw8 1/1 Running 0 61s airflow-triggerer-0 2/2 Running 0 61s airflow-webserver-7df76f944c-vcd5s 0/1 Running 0 61s external-secrets-748f44c8b8-w7qrk 1/1 Running 0 3h6m external-secrets-cert-controller-57b9f4cb7c-vl4m8 1/1 Running 0 3h6m external-secrets-webhook-5954b69786-69rlp 1/1 Running 0 3h6m
Az Airflow felhasználói felületének elérése
A parancs használatával biztonságosan elérheti az Airflow felhasználói felületét porttovábbítással
kubectl port-forward.kubectl port-forward svc/airflow-webserver 8080:8080 -n airflowNyissa meg a böngészőt, és navigáljon
localhost:8080az Airflow felhasználói felületének eléréséhez.A bejelentkezéshez használja az Airflow Helm-diagram telepítése során megadott alapértelmezett webkiszolgálói URL-címet és bejelentkezési hitelesítő adatokat.
Az Airflow felhasználói felületén keresztül biztonságosan megismerheti és kezelheti munkafolyamatait.
A Git integrálása az Airflow-jal
A Git és az Apache Airflow integrálása zökkenőmentes verziókövetést és a munkafolyamat-definíciók egyszerűbb kezelését teszi lehetővé, biztosítva, hogy az összes DAG rendszerezett és könnyen naplózható legyen.
- Állítson be egy Git-adattárat a DAG-k számára. Hozzon létre egy dedikált Git-adattárat az Airflow DAG-definíciók tárolásához. Ez az adattár szolgál a munkafolyamatok igazságforrásaként, lehetővé téve a DAG-k hatékony kezelését, nyomon követését és együttműködését.
- Konfigurálja az Airflow-t a GIT-ből származó DAG-k szinkronizálásához. Frissítse az Airflow konfigurációját, hogy automatikusan lekérje a Git-adattárból a DAG-ket a Git-adattár URL-címének és a szükséges hitelesítési hitelesítő adatoknak közvetlenül az Airflow konfigurációs fájljaiban vagy a Helm-diagram értékein keresztül történő beállításával. Ez a beállítás lehetővé teszi a DAG-k automatikus szinkronizálását, biztosítva, hogy az Airflow mindig naprakész legyen a munkafolyamatok legújabb verziójával.
Ez az integráció a teljes verziókövetés bevezetésével, a visszaállítások engedélyezésével és a csapat együttműködésének támogatásával javítja a fejlesztési és üzembe helyezési munkafolyamatot egy éles környezetben.
Az Airflow létrehozása a Kubernetes éles üzemű állapotában
Az alábbi ajánlott eljárások segíthetnek az Apache Airflow éles környezetben történő üzembe helyezésében :
- Győződjön meg arról, hogy a méretezhetőségre, a biztonságra és a megbízhatóságra összpontosító robusztus beállítással rendelkezik.
- Használjon dedikált, automatikus skálázási csomópontokat, és válasszon egy rugalmas végrehajtót, például a KubernetesExecutort, a CeleryExecutort vagy a CeleryKubernetesExecutort.
- Használjon felügyelt, magas rendelkezésre állású adatbázis háttérrendszert, például MySQL-t vagy PostgreSQL-t.
- Átfogó monitorozási és központosított naplózás létrehozása a teljesítményelemzések fenntartása érdekében.
- Biztonságossá teheti környezetét hálózati házirendekkel, SSL-ekkel és Role-Based hozzáférés-vezérléssel (RBAC), és konfigurálhatja az Airflow-összetevőket (Scheduler, Web Server, Workers) a magas rendelkezésre állás érdekében.
- CI-/CD-folyamatokat implementálhat a DAG zökkenőmentes üzembe helyezéséhez, és rendszeres biztonsági mentéseket állíthat be a vészhelyreállításhoz.
Következő lépések
A nyílt forráskódú szoftverek Azure Kubernetes Service-ben (AKS) való üzembe helyezéséről az alábbi cikkekben olvashat bővebben:
- A Kubernetes-szolgáltatás (AKS) MongoDB-fürtjének üzembe helyezése az Azure-on
- Magas rendelkezésre állású PostgreSQL-adatbázis üzembe helyezése az Azure Kubernetes Service-ben (AKS)
- Valkey-fürt üzembe helyezése az Azure Kubernetes Service-ben (AKS)
Contributors
A Microsoft fenntartja ezt a cikket. Eredetileg a következő közreműködők írták:
- Don High | Fő ügyfélmérnök
- Satya Chandragiri | Vezető digitálisfelhő-megoldástervező
- Erin Schaffer | Tartalomfejlesztő 2