git - 在 Pod 中使用 Airflow 设置 Git-Sync 的问题
问题描述
我目前正在尝试将 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
以下是我设置我的 origin/config repo 的方式:
-root
|-configmaps/airflow
|-airflow.cfg
|-airflow-configmap.yaml
|-environment
|-<environment specific stuff>
|-secrets
|-airflow-secrets.yaml
|-ssh
|-id_rsa
|-id_rsa.pub
|-README.md
气流配置图和机密如下所示:
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
来自
values.yaml
官方 Airflow Helm 存储库 (helm repo add apache-airflow https://airflow.apache.org
) 的 需要更新以下值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,请查看容器的日志
推荐阅读
- c# - 使用 ASP.NET MVC 和实体框架保持库存水平
- ios - 如何在 Flutter 应用上为 iOS 创建自定义视图
- amazon-web-services - 负载均衡器“A 记录”条目在 GoDaddy 的 A 记录字段中不起作用
- apache-kafka - 以偏移量的倍数读取 Kafka 主题
- excel - 从并行循环中访问 Excel 工作簿时出错
- angular - Angular 6 - 反应式表单验证模式不起作用
- bash - 在包含 awk 的 bash 脚本中创建一个函数
- emacs - 检查 company-active-map 中的绑定
- python - 访问 statsmodels 中的单个参数
- java - 使用 RecyclerView 时我的应用程序崩溃