在 Pod 中设置 Git-Sync 与 Airflow 时出现问题



我目前正在尝试将Airflow设置为在类似Kubernetes的环境中工作。为了使气流有用,我需要能够使用 Git-Sync 功能,以便 DAG 可以与 Pod 分开存储,从而在 Pod 缩小或重新启动时不会重置。我正在尝试使用 ssh 设置它。

我一直在寻找有关 Airflow 配置的良好文档或有关如何正确设置的教程,但这无济于事。我非常感谢这里的一些帮助,因为我已经为此苦苦挣扎了一段时间。

以下是我设置相关配置的方式,请注意,出于安全原因,我有一些链接和一些信息的替身:

git_repo = https://<git-host>/scm/<project-name>/airflow
git_branch = develop
git_subpath = dags
git_sync_root = /usr/local/airflow
git_sync_dest = dags
git_sync_depth = 1
git_sync_ssh = true
git_dags_folder_mount_point = /usr/local/airflow/dags
git_ssh_key_secret_name = airflow-secrets
git_ssh_known_hosts_configmap_name = airflow-configmap
dags_folder = /usr/local/airflow/
executor = KubernetesExecutor
dags_in_image = False

以下是我设置源/配置存储库的方法:

-root
|-configmaps/airflow
|-airflow.cfg
|-airflow-configmap.yaml
|-environment
|-<environment specific stuff>
|-secrets
|-airflow-secrets.yaml
|-ssh
|-id_rsa
|-id_rsa.pub
|-README.md

气流-conifgmap 和秘密如下所示:

apiVersion: v1
kind: Secret
metadata:
name: airflow-secrets
data:
# key needs to be gitSshKey
gitSshKey: <base64 encoded private sshKey>

apiVersion: v1
kind: ConfigMap
metadata:
name: airflow-configmap
data:
known_hosts: |
https://<git-host>/ ssh-rsa <base64 encoded public sshKey>

我尝试同步到的存储库将公钥设置为访问密钥,并且只是一个名为 dags 的文件夹,里面有 1 个 dag。

我的问题是,我现在不知道我的问题是什么。我无法知道我的配置的哪一部分设置正确,哪一部分设置不正确,并且有关该主题的文档非常乏善可陈。

如果需要更多信息,我很乐意提供。

谢谢你的时间

你在这样做时看到什么错误?

您需要考虑的几件事:

  • 使用此链接在本地创建 SSH 密钥,并:

    1. >部署密钥> ssh_key.pub 值的存储库名称>设置

    2. 确保选中"写入访问权限">

  • 我正在使用的Dockerfile如下所示:

    FROM apache/airflow:2.1.2
    COPY requirements.txt .
    RUN python -m pip install --upgrade pip
    RUN pip install -r requirements.txt
    
  • 来自官方 Airflow Helm 存储库 (helm repo add apache-airflow https://airflow.apache.org( 的values.yaml需要在gitSync下更新以下值:

    • enabled: true

    • repo: ssh://git@github.com/username/repository-name.git

    • branch: master

    • subPaths: ""(如果 DAG 位于存储库根目录中(

    • sshKeySecret: airflow-ssh-git-secret

    • credentialsSecret: git-credentials

  • 将 SSH 密钥和known_hosts导出到 Kubernetes 密钥以访问私有仓库

    kubectl create secret generic airflow-ssh-git-secret 
    --from-file=gitSshKey=/path/to/.ssh/id_ed25519 
    --from-file=known_hosts=/path/to/.ssh/known_hosts 
    --from-file=id_ed25519.pub=/path/to/.ssh/id_ed25519.pub 
    -n airflow
    
  • 创建和应用清单:

    apiVersion: v1
    kind: Secret
    metadata:
    namespace: airflow
    name: airflow-ssh-git-secret
    data:
    gitSshKey: <base64_encoded_private_key_id_ed25519_in_one_line>
    
    apiVersion: v1
    kind: Secret
    metadata:
    name: git-credentials
    data:
    GIT_SYNC_USERNAME: base64_encoded_git_username
    GIT_SYNC_PASSWORD: base64_encoded_git_password
    
    apiVersion: v1
    kind: ConfigMap
    metadata:
    namespace: airflow
    name: known-hosts
    data:
    known_hosts: |
    line 1 of known_host file
    line 2 of known_host file
    line 3 of known_host file
    ...
    
  • 更新气流版本

    helm upgrade --install airflow apache-airflow/airflow -n airflow -f values.yaml --debug

  • 获取气流命名空间中的 pod

    kubectl get pods -n airflow

  • airflow-scheduler-SOME-STRINGPod 将运行 3 个容器。查看容器git-sync-init的日志(如果未看到处于"正在运行"状态的 Pod(

最新更新