Yandex Cloud
Search
Discuss with expertTry it for free
  • Customer Stories
  • Documentation
  • Blog
  • All Services
    • Cloud Interconnect
    • Cloud Backup
    • Cloud Registry
    • Yandex AI Studio
    • Compute Cloud
    • Object Storage
    • Managed Service for Kubernetes®
    • Yandex BareMetal
    • Smart Web Security
    • Security Deck
    • Managed Service for PostgreSQL
    • Managed Service for ClickHouse®
    • Monium
    • Cloud CDN
    • Network Load Balancer
    • Virtual Private Cloud
    • Cloud DNS
    • Application Load Balancer
    • Yandex Cloud Video
    • Stackland
    • Yandex Cloud Router
    • Yandex Managed Service for Trino
    • Managed Service for MySQL®
    • Managed Service for Valkey™
    • Managed Service for Apache Spark™
    • Yandex StoreDoc
    • Managed Service for OpenSearch
    • Managed Service for Apache Kafka®
    • Data Transfer
    • Yandex MPP Analytics Engine for PostgreSQL
    • Yandex Managed Service for Apache Airflow®
    • Data Processing
    • Yandex MetaData Hub
    • Managed Service for YDB
    • Managed Service for Sharded PostgreSQL
    • Managed Service for YTsaurus
    • Yandex WebSQL
    • DataLens
    • Yandex Search API
    • SpeechSense
    • SpeechKit
    • DataSphere
    • Vision OCR
    • Translate
    • Yandex Identity Hub
    • Key Management Service
    • Certificate Manager
    • Yandex Lockbox
    • Audit Trails
    • SmartCaptcha
    • Yandex SIEM
    • SourceCraft Code Assistant
    • Container Registry
    • Managed Service for GitLab
    • Managed Service for Prometheus®
    • Cloud Functions
    • API Gateway
    • Yandex Cloud Postbox
    • Message Queue
    • IoT Core
    • Data Streams
    • Serverless Containers
    • Cloud Notification Service
    • Identity and Access Management
    • Yandex Cloud Console
    • Resource Manager
    • Yandex Cloud Billing
    • Yandex Cloud Quota Manager
    • Cloud Apps
  • System Status
  • Marketplace
    • Featured
    • Infrastructure & Network
    • Data Platform
    • AI for business
    • Security
    • DevOps tools
    • Serverless
    • Monitoring & Resources
  • All Solutions
    • By industry
    • By use case
    • Economics and Pricing
    • Security
    • Technical Support
    • Start testing with double trial credits
    • Cloud credits to scale your IT product
    • Gateway to Russia
    • Cloud for Startups
    • Center for Technologies and Society
    • Yandex Cloud Partner program
    • Price calculator
    • Pricing plans
  • Customer Stories
  • Documentation
  • Blog
© 2026 Direct Cursus Technology L.L.C.
Yandex Cloud Stackland
  • What's new
  • Installation
    • All tutorials
    • Installing Stackland on Yandex BareMetal
    • Installing Stackland on Yandex BareMetal via PXE
    • Installing Stackland on Yandex Cloud VMs
    • Setting up external access to a pod in a cluster
    • Verifying signatures for custom images
    • All guides
        • Activate Managed Service for Apache Airflow™
        • Creating a Apache Airflow™ cluster
        • Updating Apache Airflow™ cluster settings
        • Getting Apache Airflow™ administrator credentials
        • Opening the Apache Airflow™ web UI
        • Pausing or resuming an Apache Airflow™ cluster
        • Deleting a cluster Apache Airflow™
        • Troubleshooting Apache Airflow™
        • Disabling Managed Service for Apache Airflow™
    • Projects
    • Resource model
    • Scaling a cluster
    • Licensing
  • Access management
  • Pricing policy
  • Diagnostics and troubleshooting

In this article:

  • Getting started
  • Using the CLI
  • Private Git repository
  • External S3 storage
  • Next steps
  1. Step-by-step guides
  2. Orchestrating data
  3. Managed Service for Apache Airflow™
  4. Creating a Apache Airflow™ cluster

Creating an Apache Airflow™ cluster

Written by
Yandex Cloud
Updated at October 30, 2026
View in Markdown
  • Getting started
  • Using the CLI
  • Private Git repository
  • External S3 storage
  • Next steps

The Apache Airflow™ cluster is created by the AirflowCluster resource in the project namespace. Before creating the cluster, the installation administrator must enable Managed Service for Apache Airflow™.

The metadata database is created automatically. No database connection configuration is required.

Getting startedGetting started

Set up the following:

  • Project namespace.
  • Git repository with DAG files or S3-compatible storage.
  • S3-compatible storage if remote task logs are required.
  • Secret containing credentials if a private Git repository or external S3 storage is used.

Create the Secret and ConfigMap referenced by the configuration in the same namespace as AirflowCluster.

The Object Storage component must be enabled for automatically created buckets.

Check available Apache Airflow™ versions:

kubectl get airflowimagecatalog airflow \
  -o jsonpath='{range .spec.images[*]}{.version}{"\n"}{end}'

If the command does not output versions, check the resource structure: kubectl get airflowimagecatalog airflow -o yaml.

Using the CLIUsing the CLI

  1. Create an AirflowCluster resource file, e.g., airflow-cluster.yaml and insert one of the following configurations:

    Git and local logs
    Object Storage for DAG and logs

    This example uses a public Git repository and local task logs.

    apiVersion: airflow.stackland.yandex.cloud/v1alpha1
    kind: AirflowCluster
    metadata:
      name: airflow-demo
    spec:
      version: "3.1.8"
      dags:
        source: git
        git:
          repo: https://github.com/example/airflow-dags.git
          ref: main
      publicAccess: true
      deletionProtection: true
    

    This example creates separate buckets for DAG files and task logs. DAG files are loaded from the dags/ prefix in the bucket.

    apiVersion: airflow.stackland.yandex.cloud/v1alpha1
    kind: AirflowCluster
    metadata:
      name: airflow-demo
    spec:
      version: "3.1.8"
      dags:
        source: s3
        s3:
          type: stackland-storage
          stacklandStorage:
            subPath: dags/
      taskLogs:
        type: stackland-storage
        stacklandStorage:
          subPath: logs/
      publicAccess: true
      deletionProtection: true
    
  2. Specify the cluster name in metadata.name and the available version in spec.version. For the Git source, replace the repository URL and the ref value with your own.

    Both examples include public access to the web interface (spec.publicAccess: true) and deletion protection (spec.deletionProtection: true). Change these parameters if necessary.

  3. Apply the manifest:

    kubectl apply -f airflow-cluster.yaml -n <namespace>
    

    You can also specify the namespace in the manifest metadata.namespace and omit the -n parameter from the command.

  4. Substitute the cluster name from metadata.name and wait for the Ready state:

    kubectl get airflowcluster <cluster_name> \
      -n <namespace> \
      -w
    
  5. If the cluster remains in Provisioning for a long time or goes Failed, check the status conditions in status.conditions:

    kubectl describe airflowcluster <cluster_name> -n <namespace>
    

    Recommendations are provided in the Troubleshooting section.

Private Git repositoryPrivate Git repository

For HTTPS, create a Secret with fixed username and password keys:

kubectl create secret generic airflow-git-auth \
  -n <namespace> \
  --from-literal=username=<username> \
  --from-literal=password=<token_or_password>

Add a link to spec.dags.git.authSecretRef of the manifest:

spec:
  dags:
    source: git
    git:
      repo: https://git.example.com/team/airflow-dags.git
      ref: main
      authSecretRef:
        name: airflow-git-auth

For SSH, the Secret must contain ssh-privatekey, and the ConfigMap must contain the known_hosts key:

spec:
  dags:
    source: git
    git:
      repo: git@git.example.com:team/airflow-dags.git
      ref: main
      authSecretRef:
        name: airflow-git-ssh
      knownHostsConfigMapRef:
        name: airflow-git-known-hosts

The Git and S3 synchronization interval is 60 seconds and is not configurable.

External S3 storageExternal S3 storage

Create a Secret with access keys:

kubectl create secret generic airflow-s3-credentials \
  -n <namespace> \
  --from-literal=access-key-id=<key_ID> \
  --from-literal=secret-access-key=<secret_key>

For DAG files, specify the following in spec:

spec:
  dags:
    source: s3
    s3:
      type: s3
      s3:
        bucket: airflow-dags
        region: ru-central1
        endpointUrl: https://storage.yandexcloud.net
        credentialsSecretRef:
          name: airflow-s3-credentials
          accessKeyIdPath: access-key-id
          secretAccessKeyPath: secret-access-key
        subPath: dags/

For remote logs, set the taskLogs field in spec:

spec:
  taskLogs:
    type: s3
    s3:
      bucket: airflow-logs
      region: ru-central1
      endpointUrl: https://storage.yandexcloud.net
      credentialsSecretRef:
        name: airflow-s3-credentials
        accessKeyIdPath: access-key-id
        secretAccessKeyPath: secret-access-key
      subPath: logs/

Next stepsNext steps

  • Get administrator credentials.
  • Open the Apache Airflow™ web interface.
  • Modify the cluster settings if you need to configure resources or dependencies.

Was the article helpful?

Previous
Activate Managed Service for Apache Airflow™
Next
Updating Apache Airflow™ cluster settings
© 2026 Direct Cursus Technology L.L.C.