我有一个通过minikube部署的本地运行群集。 Spring Cloud Data Flow根据this tutorial进行部署。目前,我可以在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"]
预计我的任务将从已安装目录中读取文件。但是目录为空。我的意思是,尽管没有同步,它还是已安装。
答案 0 :(得分:1)
您所遇到的实际问题似乎是您在配置属性中指定的卷的name
。由于K8的名称不允许使用大写字母(请参阅here),因此您需要为name
值使用小写字母(当前有accessFilesDir和processingFilesDir),等等,
我试图在minikube上传递类似的设置(不进行NFS安装等),只是为了查看启动的任务是否通过了Volume和Volume Mount 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 describe)时,将导致以下配置:
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