如何在 Jelastic 环境中将数据卷挂载到添加的节点上

How to mount a data volume onto an added node on a Jelastic environment

我想创建一个带有负载均衡器和 cp 节点的 Jelastic 环境。我想用 addNodes api 方法添加cp节点,因为它需要特定的数据才能启动。我的清单如下所示:

jpsVersion: 1.3
jpsType: install
application:
  id: test-app
  name: Test App
  version: 0.0

  env:
    topology:
      nodes:
        - nodeGroup: bl
          nodeType: nginx-dockerized
          tag: 1.16.1
          displayName: Node balancing
          count: 1
          fixedCloudlets: 1
          cloudlets: 4

  onInstall:
  - addFile
  - setup

  actions:
    addFile:
    - cmd [bl]:
      - mkdir /data
      - echo "Hello world" > /data/test.txt
      user: root
    setup:
    - addNodes:
      - nodeGroup: cp
        nodeType: docker
        displayName: Test Mount
        count: 1
        fixedCloudlets: 1
        cloudlets: 4
        dockerName: alpine
        volumeMounts:
          /kickstart:
            readOnly: true
            sourcePath: /data
            sourceNodeGroup: bl
        dockerVolumes:
        - /kickstart

出于某种原因,我希望我的 alpine 图像与我存储在文件夹 /kickstart 中的数据一起提供。当然,在那种情况下,它是完全无关紧要的。上面的示例只是保持足够简单以便于重现。在我的真实用例中,如果没有一些特定于应用程序的数据,我想挂载的 docker 图像将无法 运行,这些数据由用户输入完成的清单设置填充。这就是为什么必须在 docker 添加节点时提供数据。

我的问题是上面的简单清单不起作用。实际上,在我的 docker 节点上,我无权访问 /kickstart/test.txt 文件夹。我做错了什么?

volumeMounts 选项不可用于操作 addNodes

下面是一个如何实现它的例子:

type: install
name: Test App
​
nodes:
  - nodeGroup: bl
    nodeType: nginx
    tag: 1.16.1
    displayName: Node balancing    
    cloudlets: 4
​
  - nodeGroup: cp
    displayName: Test Mount
    cloudlets: 4
    image: alpine
    startServiceOnCreation: false
    volumes: 
      - /kickstart
    volumeMounts: 
      /kickstart:       
        sourcePath: /data
        sourceNodeGroup: bl     
        readOnly: true

onInstall:
  - cmd [bl]: |-
      echo "Hello world" > /data/test.txt
    user: root    

  - env.control.ExecDockerRunCmd [${nodes.cp.join(id,)}] 

您也可以使用 volumeMounts

中不存在的目录

它会自己创造一切