Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SpringDataFlowServer中创建任务应用程序并使用Kubernetes挂载远程目录?_Kubernetes_Spring Cloud Dataflow_Persistent Volumes - Fatal编程技术网

如何在SpringDataFlowServer中创建任务应用程序并使用Kubernetes挂载远程目录?

如何在SpringDataFlowServer中创建任务应用程序并使用Kubernetes挂载远程目录?,kubernetes,spring-cloud-dataflow,persistent-volumes,Kubernetes,Spring Cloud Dataflow,Persistent Volumes,我使用minikube部署了一个本地运行集群。Spring云数据流根据部署。此时,我能够在SCDF仪表板上创建kubernetes任务并启动它。虽然我有一个任务,从文件系统中读取文件,我想从POD中装载的共享NFS目录中读取该文件 我在另一个虚拟机中配置并运行了一个NFS服务器,并且在我的kubernetes集群中创建了一个指向NFS主机的持久卷。启动任务时,会提供一些参数 deployer.job-import-access-file.kubernetes.volumes=[ {

我使用minikube部署了一个本地运行集群。Spring云数据流根据部署。此时,我能够在SCDF仪表板上创建kubernetes任务并启动它。虽然我有一个任务,从文件系统中读取文件,我想从POD中装载的共享NFS目录中读取该文件

我在另一个虚拟机中配置并运行了一个NFS服务器,并且在我的kubernetes集群中创建了一个指向NFS主机的持久卷。启动任务时,会提供一些参数

  deployer.job-import-access-file.kubernetes.volumes=[
  {
    name: accessFilesDir,
    persistentVolumeClaim: {
      claimName: 'apache-volume-claim'
    }
  },
  {
    name: processedFilesDir,
    persistentVolumeClaim: {
      claimName: 'apache-volume-claim'
    }
  }
]deployer.job-import-access-file.kubernetes.volumeMounts=[
  {
    name: 'accessFilesDir',
    mountPath: '/data/apache/access'
  },
  {
    name: 'processedFilesDir',
    mountPath: '/data/apache/processed'
  }
]
nfs-volume.yaml

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-apache-volume
spec:
  capacity:
    storage: 1Gi
  accessModes:
  - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: standard
  nfs:
    server: 10.255.254.10
    path: '/var/nfs/apache'
nfs-volume-claim.yaml

---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: apache-volume-claim
  namespace: default
spec:
  storageClassName: standard
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
应用程序Docker文件

FROM openjdk:8-jdk-alpine

COPY target/job-import-access-file-0.1.0.jar /opt/job-import-access-file-0.1.0.jar
VOLUME ["/data/apache/access", "/data/apache/processed"]

ENTRYPOINT ["java","-jar","/opt/job-import-access-file-0.1.0.jar"]

我的任务应该从装载的目录中读取文件。但目录是空的。我的意思是,虽然没有同步,但它还是被装载了。

看起来您案例中的实际问题是您在配置属性中指定的卷的
名称。由于K8s不允许名称使用大写字母(请参阅),因此需要使用小写字母表示
名称
值(目前有AccessFileDir和ProcessedFileDir),等等

我尝试在minikube上传递类似的设置(没有NFS装载等),只是想看看任务启动是否传递了卷和卷装载K8s部署器属性,并且它们似乎工作正常:

dataflow:>task create a1 --definition "timestamp"

dataflow:>task launch a1 --properties "deployer.timestamp.kubernetes.volumes=[{name: accessfilesdir, persistentVolumeClaim: { claimName: 'apache-volume-claim' }},{name: processedfilesdir, persistentVolumeClaim: { claimName: 'apache-volume-claim' }}],deployer.timestamp.kubernetes.volumeMounts=[{name: 'accessfilesdir', mountPath: '/data/apache/access'},{name: 'processedfilesdir', mountPath: '/data/apache/processed'}]"
当我描述已启动任务的pod(kubectl Descripte)时,这导致了以下配置:

Volumes:
  accessfilesdir:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  apache-volume-claim
    ReadOnly:   false
  processedfilesdir:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  apache-volume-claim
    ReadOnly:   false

看起来您案例中的实际问题是您在配置属性中指定的卷的
名称
。由于K8s不允许名称使用大写字母(请参阅),因此需要使用小写字母表示
名称
值(目前有AccessFileDir和ProcessedFileDir),等等

我尝试在minikube上传递类似的设置(没有NFS装载等),只是想看看任务启动是否传递了卷和卷装载K8s部署器属性,并且它们似乎工作正常:

dataflow:>task create a1 --definition "timestamp"

dataflow:>task launch a1 --properties "deployer.timestamp.kubernetes.volumes=[{name: accessfilesdir, persistentVolumeClaim: { claimName: 'apache-volume-claim' }},{name: processedfilesdir, persistentVolumeClaim: { claimName: 'apache-volume-claim' }}],deployer.timestamp.kubernetes.volumeMounts=[{name: 'accessfilesdir', mountPath: '/data/apache/access'},{name: 'processedfilesdir', mountPath: '/data/apache/processed'}]"
当我描述已启动任务的pod(kubectl Descripte)时,这导致了以下配置:

Volumes:
  accessfilesdir:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  apache-volume-claim
    ReadOnly:   false
  processedfilesdir:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  apache-volume-claim
    ReadOnly:   false

谢谢你的回复。我陷入了圈套。我已经对卷名进行了您建议的更改,并将这些配置作为属性而不是参数传递。因为一个愚蠢的错误而做了很多工作。@Aureliano如果答案解决了你的问题,那么请接受它。谢谢你的回复。我陷入了圈套。我已经对卷名进行了您建议的更改,并将这些配置作为属性而不是参数传递。因为一个愚蠢的错误而做了很多工作。@Aureliano如果答案解决了你的问题,那么请接受它。