【问题标题】:How to mount volume of airflow worker to airflow kubernetes pod operator?如何将气流工作者的体积安装到气流 kubernetes pod 运算符?
【发布时间】:2020-01-05 08:21:05
【问题描述】:

我正在尝试在气流中使用 kubernetes pod 运算符,并且我希望与气流工作人员上的 Kubernetes pod 共享一个目录,有没有办法将气流工作人员的目录挂载到 kubernetes pod?

我尝试使用下面的代码,但该卷似乎没有成功安装。

import datetime
import unittest
from unittest import TestCase
from airflow.operators.kubernetes_pod_operator import KubernetesPodOperator
from airflow.kubernetes.volume import Volume
from airflow.kubernetes.volume_mount import VolumeMount


class TestMailAlarm(TestCase):
    def setUp(self):
        self.namespace = "test-namespace"
        self.image = "ubuntu:16.04"
        self.name = "default"

        self.cluster_context = "default"

        self.dag_id = "test_dag"
        self.task_id = "root_test_dag"
        self.execution_date = datetime.datetime.now()

        self.context = {"dag_id": self.dag_id,
                        "task_id": self.task_id,
                        "execution_date": self.execution_date}

        self.cmds = ["sleep"]
        self.arguments = ["100"]

        self.volume_mount = VolumeMount('test',
                                        mount_path='/tmp',
                                        sub_path=None,
                                        read_only=False)

        volume_config = {
            'persistentVolumeClaim':
                {
                    'claimName': 'test'
                }
        }
        self.volume = Volume(name='test', configs=volume_config)

        self.operator = KubernetesPodOperator(
            namespace=self.namespace, image=self.image, name=self.name,
            cmds=self.cmds,
            arguments=self.arguments,
            startup_timeout_seconds=600,
            is_delete_operator_pod=True,
            # the operator could run successfully but the directory /tmp is not mounted to kubernetes operator
            volume=[self.volume],
            volume_mount=[self.volume_mount],
            **self.context)

    def test_execute(self):
        self.operator.execute(self.context)

【问题讨论】:

    标签: python docker kubernetes airflow


    【解决方案1】:

    文档中的示例似乎与您的代码非常相似,只是参数是复数 volume_mountsvolumes。对于您的代码,它看起来像这样:

    self.operator = KubernetesPodOperator(
                namespace=self.namespace, image=self.image, name=self.name,
                cmds=self.cmds,
                arguments=self.arguments,
                startup_timeout_seconds=600,
                is_delete_operator_pod=True,
                # the operator could run successfully but the directory /tmp is not mounted to kubernetes operator
                volumes=[self.volume],
                volume_mounts=[self.volume_mount],
                **self.context)
    

    【讨论】:

    • 我尝试使用文档中的示例,并且日志始终显示:事件:test-302a784b 有一个类型为 Pending 的事件,kubernetes 抛出错误:未找到 persistentvolumeclaim "test-volume",你能分享你对这个问题的看法吗?我是 kubernetes 的新手,在这里被屏蔽了:(
    • @buxizhizhoum,我编辑了我的答案更具体。您是否已经这样做了并且收到了您发布的错误?
    • 非常感谢您的回复,我仍然收到新答案的错误,但是我应该在尝试挂载目录之前在 kubernetes 中创建 PV 吗?我检查了kubernetes集群,没有名为“test”的PV,是这个错误的原因吗?
    • 请大家寻找 example 看起来您应该创建 pv 和 pvc 并使用这些信息更新您的 DAG。
    • @Hanx,你说得对,mount前应该有一个pv,因为我的test env里没有pv,一直挂载失败。
    猜你喜欢
    • 2021-07-02
    • 2020-12-13
    • 2016-08-31
    • 2022-07-29
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    相关资源
    最近更新 更多