kubernetes - 将自定义 volumeMount 添加到 Airflow 工作 pod(使用 k8s Executor)
问题描述
在airflow.conf 部分下有一个为dag 和日志安装volumeMount 的选项,kubernetes
例如
[kubernetes]
airflow_configmap = airflow_config
worker_container_repository = airflow
worker_container_tag = runner2
worker_container_image_pull_policy = IfNotPresent
delete_worker_pods = true
dags_volume_claim = airflow-dags-pvc
dags_volume_subpath = airflow/development/dags
logs_volume_claim = airflow-logs-pvc
logs_volume_subpath = airflow/development/logs
namespace = development
这按预期工作。意味着我可以看到工作 pod 成功地在容器内安装了这两个卷及其相关的 volumeMounts。
"volumeMounts": [
{
"name": "airflow-dags",
"readOnly": true,
"mountPath": "/usr/local/airflow/dags",
"subPath": "airflow/development/dags"
},
{
"name": "airflow-logs",
"mountPath": "/usr/local/airflow/logs",
"subPath": "airflow/development/logs"
},
但是,我的工作 pod 依赖于从目录airflow/development/plugins
和airflow/development/libs
. 因此,我需要使用来自 NFS 服务器的相关子路径将更多 volumeMount 添加到工作 pod 中。我怎样才能做到这一点?我尝试搜索任何相关的配置值,但找不到。
更新:我executor_config
作为 .dags 传感器任务之一传入executor_config={"KubernetesExecutor": {"image": "airflow:runner2"}}
。通过查看代码airflow/contrib/kubernetes/worker_configuration.py
,似乎如果我将volumes和volumeMounts作为此配置的一部分传递,它应该可以工作。我会试试这个并在这里更新。
解决方案
对不起,我会回答我自己的问题。也许会帮助某人。在我定义任务的 dag 文件中,我只需添加 executor_config 如下;
IngestionStatusSensor(
task_id=...,
executor_config={"KubernetesExecutor": {
"image": "airflow:runner2",
"volume_mounts": [
{
"name": "airflow-dags",
"mountPath": "/usr/local/airflow/libs",
"subPath": "airflow/development/libs"
},
{
"name": "airflow-dags",
"mountPath": "/usr/local/airflow/plugins",
"subPath": "airflow/development/plugins"
}],
}
},
dag=dag,
ingestion_feed=table,
poke_interval=60 * 30,
offset=0,
start_date=start_date
)
其中airflow-dags
volume已经由pod创建者定义,该pod创建者声称在kubernetes
airflow.conf部分下的configs中定义的PVC,例如dags_volume_claim = airflow-pvc
。
推荐阅读
- ant-media-server - 我们如何在 Windows 上安装 Ant Media Server?
- javascript - 替换两个字符之间的字符串
- python - 使用正则表达式删除日期周围的括号
- c# - AspNet Identity - 重复外键的自定义 IdentityRoleClaim & IdentityUserRole & IdentityUserClaim
- php - 如何使用 Web 服务进行重定向?
- node.js - 如何通过socket.io向用户离线/在线发送聊天通知?
- r - R中“相同()”函数的问题?“相同()”如何适用于不同类型的对象?
- javascript - 不允许用户删除逗号/点,如果
- javascript - 如何使用 react-easy-crop 来反映从 react-easy-crop 到在另一个 div 中呈现的实时图像的位置变化?
- c# - 我试图从我的数据库中输出所有数据,并且 foreach 语句中存在错误