首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在KubernetesPodOperator中共享一个卷?

在KubernetesPodOperator中共享一个卷?
EN

Stack Overflow用户
提问于 2019-02-22 13:40:35
回答 2查看 2.3K关注 0票数 4

我使用来自KubernetesPodOperator()内部气流的ffmpeg对接图像从视频中提取帧。

它工作得很好,但我无法检索存储的帧:如何将Pod生成的帧直接存储到我的文件系统(主机)?

更新:

https://airflow.apache.org/kubernetes.html#中,我想我知道我需要处理volume_mountvolume_configvolume参数,但仍然没有运气。

错误消息:

代码语言:javascript
复制
"message":"Not found: \"test-volume\"","field":"spec.containers[0].volumeMounts[0].name"

PV与PVC:

命令kubectl get pv,pvc test-volume提供:

代码语言:javascript
复制
NAME                           CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                 STORAGECLASS   REASON   AGE
persistentvolume/test-volume   10Gi       RWO            Retain           Bound    default/test-volume   manual                  3m

NAME                                STATUS   VOLUME        CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/test-volume   Bound    test-volume   10Gi       RWO            manual         3m

代码:

代码语言:javascript
复制
volume_mount = VolumeMount('test-volume',
                           mount_path='/',
                           sub_path=None,
                           read_only=False)

volume_config= {
    'persistentVolumeClaim':
    {
        'claimName': 'test-volume' # uses the persistentVolumeClaim given in the Kube yaml
    }
}

volume = Volume(name="test-volume", configs=volume_config)



with DAG('test_kubernetes',
         default_args=default_args,
         schedule_interval=schedule_interval,
         ) as dag:

        extract_frames = KubernetesPodOperator(namespace='default',
                                  image="jrottenberg/ffmpeg:3.4-scratch",
                                  arguments=[                                    
                                    "-i", "http://www.jell.yfish.us/media/jellyfish-20-mbps-hd-hevc-10bit.mkv",                                    
                                    "test_%04d.jpg"
                                    ],                                  
                                  name="extract-frames",
                                  task_id="extract_frames",
                                  volume=[volume],
                                  volume_mounts=[volume_mount],
                                  get_logs=True
                                  )
EN

回答 2

Stack Overflow用户

发布于 2019-03-06 10:30:53

下面是一些猜测,对可能出了什么问题的猜测:

  1. (您的错误很可能来自) KubernetesPodOperator需要参数“s”,而不是“音量”
  2. 通常,安装到"/“上是错误的做法,因为您将删除正在运行的映像上的所有内容。也就是说,您可能应该将mount_path对象中的"/stored_frames“改为”/stored_frames“。
票数 0
EN

Stack Overflow用户

发布于 2020-03-25 15:10:25

您应该创建一个测试荚来验证您的k8s对象(卷、荚、configmap、机密等),然后再用KubernetesPodOperator包装在DAG中创建这个容器。根据上面的代码,它可以如下所示:

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
 name: "extract-frames-pod"
 namespace: "default"
spec:
 containers:
  - name: "extract-frames"
    image: "jrottenberg/ffmpeg:3.4-scratch"
    command:
    args: ["-i", "http://www.jell.yfish.us/media/jellyfish-20-mbps-hd-hevc-10bit.mkv",  "test_%04d.jpg"]
    imagePullPolicy: IfNotPresent
    volumeMounts:
      - name: "test-volume"
#       do not use "/" for mountPath.
        mountPath: "/images"
 restartPolicy: Never
 volumes:
  - name: "test-volume"
    persistentVolumeClaim:
      claimName: "test-volume"
 serviceAccountName: default

我希望您会得到与您所犯的相同的错误:"message":"Not found: \"test-volume\"","field":"spec.containers[0].volumeMounts[0].name"

我认为这是PersistentVolume清单文件中的一个问题。你设置路径test-volume了吗?类似于:

代码语言:javascript
复制
    path: /test-volume

路径是否存在于目标卷中?如果没有,则创建该目录/文件夹。也许能解决你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54828390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档