我目前正在尝试将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 密钥,并:
-
>部署密钥> ssh_key.pub 值的存储库名称>设置
-
确保选中"写入访问权限">
-
-
我正在使用的
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-STRING
Pod 将运行 3 个容器。查看容器git-sync-init
的日志(如果未看到处于"正在运行"状态的 Pod(