Repository: fluid-cloudnative/fluid
Pull request #3760 (2024-03-13 07:21:47)

Add env for vineyard fuse and update the api doc.
### Ⅰ. Describe what this PR does

As titled.

fluid-e2e-bot[bot]: [APPROVALNOTIFIER] This PR is **NOT APPROVED**

This pull-request has been approved by:
**Once this PR has been reviewed and has the lgtm label**, please assign zwwhdls for approval by writing `/assign @zwwhdls` in a comment. For more information see:[The Kubernetes Code Review Process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process).

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=fluid-cloudnative%2Ffluid).

<details open>
Needs approval from an approver in each of these files:

- **[OWNERS](https://github.com/fluid-cloudnative/fluid/blob/master/OWNERS)**

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":["zwwhdls"]} -->
fluid-e2e-bot[bot]: Hi @dashanji. Thanks for your PR.

I'm waiting for a [fluid-cloudnative](https://github.com/orgs/fluid-cloudnative/people) member to verify that this patch is reasonable to test. If it is, they should reply with `/ok-to-test` on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should [join the org](https://github.com/orgs/fluid-cloudnative/people) to skip this step.

Once the patch is verified, the new status will be reflected by the `ok-to-test` label.

I understand the commands that are listed [here](https://go.k8s.io/bot-commands?repo=fluid-cloudnative%2Ffluid).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository.
</details>

sonarcloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=fluid-cloudnative_fluid&pullRequest=3760) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=fluid-cloudnative_fluid&pullRequest=3760&resolved=false&inNewCodePeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/component_measures?id=fluid-cloudnative_fluid&pullRequest=3760&metric=new_accepted_issues&view=list)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=fluid-cloudnative_fluid&pullRequest=3760&resolved=false&inNewCodePeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/no-data-16px.png '') No data about Coverage  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [20.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=fluid-cloudnative_fluid&pullRequest=3760&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarCloud](https://sonarcloud.io/dashboard?id=fluid-cloudnative_fluid&pullRequest=3760)


codecov[bot]: ## [Codecov](https://app.codecov.io/gh/fluid-cloudnative/fluid/pull/3760?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=fluid-cloudnative) Report
All modified and coverable lines are covered by tests :white_check_mark:
> Project coverage is 64.20%. Comparing base [(`b980003`)](https://app.codecov.io/gh/fluid-cloudnative/fluid/commit/b9800030ebc833e737d5b54c6c3120d9569eb141?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=fluid-cloudnative) to head [(`913d1b3`)](https://app.codecov.io/gh/fluid-cloudnative/fluid/pull/3760?dropdown=coverage&src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=fluid-cloudnative).


<details><summary>Additional details and impacted files</summary>


```diff
@@           Coverage Diff           @@
##           master    #3760   +/-   ##
=======================================
  Coverage   64.19%   64.20%           
=======================================
  Files         474      474           
  Lines       28236    28240    +4     
=======================================
+ Hits        18127    18131    +4     
  Misses       7945     7945           
  Partials     2164     2164           
```



</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/fluid-cloudnative/fluid/pull/3760?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=fluid-cloudnative).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=fluid-cloudnative).

fluid-e2e-bot[bot]: [APPROVALNOTIFIER] This PR is **APPROVED**

This pull-request has been approved by: *<a href="https://github.com/fluid-cloudnative/fluid/pull/3760#pullrequestreview-1935547367" title="Approved">cheyang</a>*

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=fluid-cloudnative%2Ffluid).

The pull request process is described [here](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process)

<details >
Needs approval from an approver in each of these files:

- ~~[OWNERS](https://github.com/fluid-cloudnative/fluid/blob/master/OWNERS)~~ [cheyang]

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":[]} -->

Patch:
diff --git a/api/v1alpha1/openapi_generated.go b/api/v1alpha1/openapi_generated.go
index 7190e540..176372bc 100644
--- a/api/v1alpha1/openapi_generated.go
+++ b/api/v1alpha1/openapi_generated.go
@@ -6713,6 +6713,22 @@ func schema_fluid_cloudnative_fluid_api_v1alpha1_VineyardSockSpec(ref common.Ref
 							Format:      "",
 						},
 					},
+					"env": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Environment variables that will be used by Vineyard Fuse. Default is not set.",
+							Type:        []string{"object"},
+							AdditionalProperties: &spec.SchemaOrBool{
+								Allows: true,
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Default: "",
+										Type:    []string{"string"},
+										Format:  "",
+									},
+								},
+							},
+						},
+					},
 					"cleanPolicy": {
 						SchemaProps: spec.SchemaProps{
 							Description: "CleanPolicy decides when to clean Vineyard Fuse pods. Currently Fluid supports two policies: OnDemand and OnRuntimeDeleted OnDemand cleans fuse pod once th fuse pod on some node is not needed OnRuntimeDeleted cleans fuse pod only when the cache runtime is deleted Defaults to OnRuntimeDeleted",
diff --git a/api/v1alpha1/swagger.json b/api/v1alpha1/swagger.json
index c461dc53..92dcbb4d 100644
--- a/api/v1alpha1/swagger.json
+++ b/api/v1alpha1/swagger.json
@@ -705,7 +705,7 @@
       ],
       "properties": {
         "affinity": {
-          "description": "Affinity defines affinity for DataLoad pod",
+          "description": "Affinity defines affinity for DataMigrate pod",
           "$ref": "#/definitions/v1.Affinity"
         },
         "block": {
@@ -730,7 +730,7 @@
           "type": "string"
         },
         "nodeSelector": {
-          "description": "NodeSelector defiens node selector for DataLoad pod",
+          "description": "NodeSelector defiens node selector for DataMigrate pod",
           "type": "object",
           "additionalProperties": {
             "type": "string",
@@ -745,8 +745,21 @@
             "default": ""
           }
         },
+        "parallelOptions": {
+          "description": "ParallelOptions defines options like ssh port and ssh secret name when parallelism is greater than 1.",
+          "type": "object",
+          "additionalProperties": {
+            "type": "string",
+            "default": ""
+          }
+        },
+        "parallelism": {
+          "description": "Parallelism defines the parallelism tasks numbers for DataMigrate. If the value is greater than 1, the job acts as a launcher, and users should define the WorkerSpec.",
+          "type": "integer",
+          "format": "int32"
+        },
         "podMetadata": {
-          "description": "PodMetadata defines labels and annotations that will be propagated to DataLoad pods",
+          "description": "PodMetadata defines labels and annotations that will be propagated to DataMigrate pods",
           "default": {},
           "$ref": "#/definitions/.PodMetadata"
         },
@@ -772,7 +785,7 @@
           "type": "string"
         },
         "schedulerName": {
-          "description": "SchedulerName sets the scheduler to be used for DataLoad pod",
+          "description": "SchedulerName sets the scheduler to be used for DataMigrate pod",
           "type": "string"
         },
         "to": {
@@ -781,7 +794,7 @@
           "$ref": "#/definitions/.DataToMigrate"
         },
         "tolerations": {
-          "description": "Tolerations defines tolerations for DataLoad pod",
+          "description": "Tolerations defines tolerations for DataMigrate pod",
           "type": "array",
           "items": {
             "default": {},
@@ -1000,9 +1013,6 @@
     ".DatasetSpec": {
       "description": "DatasetSpec defines the desired state of Dataset",
       "type": "object",
-      "required": [
-        "mounts"
-      ],
       "properties": {
         "accessModes": {
           "description": "AccessModes contains all ways the volume backing the PVC can be mounted",
@@ -1017,7 +1027,7 @@
           "$ref": "#/definitions/.DataRestoreLocation"
         },
         "mounts": {
-          "description": "Mount Points to be mounted on Alluxio.",
+          "description": "Mount Points to be mounted on cache runtime. \u003cbr\u003e This field can be empty because some runtimes don't need to mount external storage (e.g. \u003ca href=\"https://v6d.io/\"\u003eVineyard\u003c/a\u003e).",
           "type": "array",
           "items": {
             "default": {},
@@ -3759,6 +3769,14 @@
           "description": "CleanPolicy decides when to clean Vineyard Fuse pods. Currently Fluid supports two policies: OnDemand and OnRuntimeDeleted OnDemand cleans fuse pod once th fuse pod on some node is not needed OnRuntimeDeleted cleans fuse pod only when the cache runtime is deleted Defaults to OnRuntimeDeleted",
           "type": "string"
         },
+        "env": {
+          "description": "Environment variables that will be used by Vineyard Fuse. Default is not set.",
+          "type": "object",
+          "additionalProperties": {
+            "type": "string",
+            "default": ""
+          }
+        },
         "image": {
           "description": "Image for Vineyard Fuse Default is `vineyardcloudnative/vineyard-fluid-fuse`",
           "type": "string"
diff --git a/api/v1alpha1/vineyardruntime_types.go b/api/v1alpha1/vineyardruntime_types.go
index b07e955b..004a8ae5 100644
--- a/api/v1alpha1/vineyardruntime_types.go
+++ b/api/v1alpha1/vineyardruntime_types.go
@@ -157,6 +157,11 @@ type VineyardSockSpec struct {
 	// +optional
 	ImagePullPolicy string `json:"imagePullPolicy,omitempty"`
 
+	// Environment variables that will be used by Vineyard Fuse.
+	// Default is not set.
+	// +optional
+	Env map[string]string `json:"env,omitempty"`
+
 	// CleanPolicy decides when to clean Vineyard Fuse pods.
 	// Currently Fluid supports two policies: OnDemand and OnRuntimeDeleted
 	// OnDemand cleans fuse pod once th fuse pod on some node is not needed
diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go
index 63d27502..fccd1842 100644
--- a/api/v1alpha1/zz_generated.deepcopy.go
+++ b/api/v1alpha1/zz_generated.deepcopy.go
@@ -2908,6 +2908,13 @@ func (in *VineyardRuntimeSpec) DeepCopy() *VineyardRuntimeSpec {
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *VineyardSockSpec) DeepCopyInto(out *VineyardSockSpec) {
 	*out = *in
+	if in.Env != nil {
+		in, out := &in.Env, &out.Env
+		*out = make(map[string]string, len(*in))
+		for key, val := range *in {
+			(*out)[key] = val
+		}
+	}
 	in.Resources.DeepCopyInto(&out.Resources)
 }
 
diff --git a/charts/fluid/fluid/crds/data.fluid.io_vineyardruntimes.yaml b/charts/fluid/fluid/crds/data.fluid.io_vineyardruntimes.yaml
index 3e22f9f0..f049fe62 100644
--- a/charts/fluid/fluid/crds/data.fluid.io_vineyardruntimes.yaml
+++ b/charts/fluid/fluid/crds/data.fluid.io_vineyardruntimes.yaml
@@ -100,6 +100,12 @@ spec:
                       needed OnRuntimeDeleted cleans fuse pod only when the cache
                       runtime is deleted Defaults to OnRuntimeDeleted'
                     type: string
+                  env:
+                    additionalProperties:
+                      type: string
+                    description: Environment variables that will be used by Vineyard
+                      Fuse. Default is not set.
+                    type: object
                   image:
                     description: Image for Vineyard Fuse Default is `vineyardcloudnative/vineyard-fluid-fuse`
                     type: string
diff --git a/charts/vineyard/templates/fuse/daemonset.yaml b/charts/vineyard/templates/fuse/daemonset.yaml
index d1353017..65a0461a 100644
--- a/charts/vineyard/templates/fuse/daemonset.yaml
+++ b/charts/vineyard/templates/fuse/daemonset.yaml
@@ -76,6 +76,10 @@ spec:
             value: {{ .Values.fuse.targetPath }}/rpc-conf
           - name: PRESTOP_MARKER
             value: /tmp/prestop-marker
+          {{- range $key, $value := .Values.fuse.env }}
+          - name: "{{ $key }}"
+            value: "{{ $value }}"
+          {{- end }}
           lifecycle:
             preStop:
               exec:
diff --git a/charts/vineyard/values.yaml b/charts/vineyard/values.yaml
index 9442d153..61d5e44c 100644
--- a/charts/vineyard/values.yaml
+++ b/charts/vineyard/values.yaml
@@ -99,6 +99,7 @@ fuse:
   image: vineyardcloudnative/vineyard-fluid-fuse
   imageTag: latest
   imagePullPolicy: IfNotPresent
+  env: {}
   targetPath: ""
   nodeSelector: {}
 
diff --git a/config/crd/bases/data.fluid.io_vineyardruntimes.yaml b/config/crd/bases/data.fluid.io_vineyardruntimes.yaml
index 3e22f9f0..f049fe62 100644
--- a/config/crd/bases/data.fluid.io_vineyardruntimes.yaml
+++ b/config/crd/bases/data.fluid.io_vineyardruntimes.yaml
@@ -100,6 +100,12 @@ spec:
                       needed OnRuntimeDeleted cleans fuse pod only when the cache
                       runtime is deleted Defaults to OnRuntimeDeleted'
                     type: string
+                  env:
+                    additionalProperties:
+                      type: string
+                    description: Environment variables that will be used by Vineyard
+                      Fuse. Default is not set.
+                    type: object
                   image:
                     description: Image for Vineyard Fuse Default is `vineyardcloudnative/vineyard-fluid-fuse`
                     type: string
diff --git a/docs/en/dev/api_doc.md b/docs/en/dev/api_doc.md
index c9ff9eea..19349ca5 100644
--- a/docs/en/dev/api_doc.md
+++ b/docs/en/dev/api_doc.md
@@ -906,7 +906,7 @@ PodMetadata
 </em>
 </td>
 <td>
-<p>PodMetadata defines labels and annotations that will be propagated to DataLoad pods</p>
+<p>PodMetadata defines labels and annotations that will be propagated to DataMigrate pods</p>
 </td>
 </tr>
 <tr>
@@ -920,7 +920,7 @@ Kubernetes core/v1.Affinity
 </td>
 <td>
 <em>(Optional)</em>
-<p>Affinity defines affinity for DataLoad pod</p>
+<p>Affinity defines affinity for DataMigrate pod</p>
 </td>
 </tr>
 <tr>
@@ -934,7 +934,7 @@ Kubernetes core/v1.Affinity
 </td>
 <td>
 <em>(Optional)</em>
-<p>Tolerations defines tolerations for DataLoad pod</p>
+<p>Tolerations defines tolerations for DataMigrate pod</p>
 </td>
 </tr>
 <tr>
@@ -946,7 +946,7 @@ map[string]string
 </td>
 <td>
 <em>(Optional)</em>
-<p>NodeSelector defiens node selector for DataLoad pod</p>
+<p>NodeSelector defiens node selector for DataMigrate pod</p>
 </td>
 </tr>
 <tr>
@@ -958,7 +958,7 @@ string
 </td>
 <td>
 <em>(Optional)</em>
-<p>SchedulerName sets the scheduler to be used for DataLoad pod</p>
+<p>SchedulerName sets the scheduler to be used for DataMigrate pod</p>
 </td>
 </tr>
 <tr>
@@ -1001,6 +1001,31 @@ Kubernetes core/v1.ResourceRequirements
 <p>Resources that will be requested by the DataMigrate job. <br></p>
 </td>
 </tr>
+<tr>
+<td>
+<code>parallelism</code></br>
+<em>
+int32
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>Parallelism defines the parallelism tasks numbers for DataMigrate. If the value is greater than 1, the job acts
+as a launcher, and users should define the WorkerSpec.</p>
+</td>
+</tr>
+<tr>
+<td>
+<code>parallelOptions</code></br>
+<em>
+map[string]string
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>ParallelOptions defines options like ssh port and ssh secret name when parallelism is greater than 1.</p>
+</td>
+</tr>
 </table>
 </td>
 </tr>
@@ -1085,7 +1110,10 @@ DatasetSpec
 </em>
 </td>
 <td>
-<p>Mount Points to be mounted on Alluxio.</p>
+<em>(Optional)</em>
+<p>Mount Points to be mounted on cache runtime. <br>
+This field can be empty because some runtimes don&rsquo;t need to mount external storage (e.g.
+<a href="https://v6d.io/">Vineyard</a>).</p>
 </td>
 </tr>
 <tr>
@@ -3754,7 +3782,7 @@ PodMetadata
 </em>
 </td>
 <td>
-<p>PodMetadata defines labels and annotations that will be propagated to DataLoad pods</p>
+<p>PodMetadata defines labels and annotations that will be propagated to DataMigrate pods</p>
 </td>
 </tr>
 <tr>
@@ -3768,7 +3796,7 @@ Kubernetes core/v1.Affinity
 </td>
 <td>
 <em>(Optional)</em>
-<p>Affinity defines affinity for DataLoad pod</p>
+<p>Affinity defines affinity for DataMigrate pod</p>
 </td>
 </tr>
 <tr>
@@ -3782,7 +3810,7 @@ Kubernetes core/v1.Affinity
 </td>
 <td>
 <em>(Optional)</em>
-<p>Tolerations defines tolerations for DataLoad pod</p>
+<p>Tolerations defines tolerations for DataMigrate pod</p>
 </td>
 </tr>
 <tr>
@@ -3794,7 +3822,7 @@ map[string]string
 </td>
 <td>
 <em>(Optional)</em>
-<p>NodeSelector defiens node selector for DataLoad pod</p>
+<p>NodeSelector defiens node selector for DataMigrate pod</p>
 </td>
 </tr>
 <tr>
@@ -3806,7 +3834,7 @@ string
 </td>
 <td>
 <em>(Optional)</em>
-<p>SchedulerName sets the scheduler to be used for DataLoad pod</p>
+<p>SchedulerName sets the scheduler to be used for DataMigrate pod</p>
 </td>
 </tr>
 <tr>
@@ -3849,6 +3877,31 @@ Kubernetes core/v1.ResourceRequirements
 <p>Resources that will be requested by the DataMigrate job. <br></p>
 </td>
 </tr>
+<tr>
+<td>
+<code>parallelism</code></br>
+<em>
+int32
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>Parallelism defines the parallelism tasks numbers for DataMigrate. If the value is greater than 1, the job acts
+as a launcher, and users should define the WorkerSpec.</p>
+</td>
+</tr>
+<tr>
+<td>
+<code>parallelOptions</code></br>
+<em>
+map[string]string
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>ParallelOptions defines options like ssh port and ssh secret name when parallelism is greater than 1.</p>
+</td>
+</tr>
 </tbody>
 </table>
 <h3 id="data.fluid.io/v1alpha1.DataProcess">DataProcess
@@ -4238,7 +4291,10 @@ Kubernetes meta/v1.Time
 </em>
 </td>
 <td>
-<p>Mount Points to be mounted on Alluxio.</p>
+<em>(Optional)</em>
+<p>Mount Points to be mounted on cache runtime. <br>
+This field can be empty because some runtimes don&rsquo;t need to mount external storage (e.g.
+<a href="https://v6d.io/">Vineyard</a>).</p>
 </td>
 </tr>
 <tr>
@@ -10140,6 +10196,19 @@ Available values are <code>Always</code>, <code>IfNotPresent</code>, <code>Never
 </tr>
 <tr>
 <td>
+<code>env</code></br>
+<em>
+map[string]string
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>Environment variables that will be used by Vineyard Fuse.
+Default is not set.</p>
+</td>
+</tr>
+<tr>
+<td>
 <code>cleanPolicy</code></br>
 <em>
 <a href="#data.fluid.io/v1alpha1.FuseCleanPolicy">
@@ -10239,5 +10308,5 @@ bool
 <hr/>
 <p><em>
 Generated with <code>gen-crd-api-reference-docs</code>
-on git commit <code>c7cfb1888</code>.
+on git commit <code>b9800030e</code>.
 </em></p>
diff --git a/docs/zh/dev/api_doc.md b/docs/zh/dev/api_doc.md
index c9ff9eea..19349ca5 100644
--- a/docs/zh/dev/api_doc.md
+++ b/docs/zh/dev/api_doc.md
@@ -906,7 +906,7 @@ PodMetadata
 </em>
 </td>
 <td>
-<p>PodMetadata defines labels and annotations that will be propagated to DataLoad pods</p>
+<p>PodMetadata defines labels and annotations that will be propagated to DataMigrate pods</p>
 </td>
 </tr>
 <tr>
@@ -920,7 +920,7 @@ Kubernetes core/v1.Affinity
 </td>
 <td>
 <em>(Optional)</em>
-<p>Affinity defines affinity for DataLoad pod</p>
+<p>Affinity defines affinity for DataMigrate pod</p>
 </td>
 </tr>
 <tr>
@@ -934,7 +934,7 @@ Kubernetes core/v1.Affinity
 </td>
 <td>
 <em>(Optional)</em>
-<p>Tolerations defines tolerations for DataLoad pod</p>
+<p>Tolerations defines tolerations for DataMigrate pod</p>
 </td>
 </tr>
 <tr>
@@ -946,7 +946,7 @@ map[string]string
 </td>
 <td>
 <em>(Optional)</em>
-<p>NodeSelector defiens node selector for DataLoad pod</p>
+<p>NodeSelector defiens node selector for DataMigrate pod</p>
 </td>
 </tr>
 <tr>
@@ -958,7 +958,7 @@ string
 </td>
 <td>
 <em>(Optional)</em>
-<p>SchedulerName sets the scheduler to be used for DataLoad pod</p>
+<p>SchedulerName sets the scheduler to be used for DataMigrate pod</p>
 </td>
 </tr>
 <tr>
@@ -1001,6 +1001,31 @@ Kubernetes core/v1.ResourceRequirements
 <p>Resources that will be requested by the DataMigrate job. <br></p>
 </td>
 </tr>
+<tr>
+<td>
+<code>parallelism</code></br>
+<em>
+int32
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>Parallelism defines the parallelism tasks numbers for DataMigrate. If the value is greater than 1, the job acts
+as a launcher, and users should define the WorkerSpec.</p>
+</td>
+</tr>
+<tr>
+<td>
+<code>parallelOptions</code></br>
+<em>
+map[string]string
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>ParallelOptions defines options like ssh port and ssh secret name when parallelism is greater than 1.</p>
+</td>
+</tr>
 </table>
 </td>
 </tr>
@@ -1085,7 +1110,10 @@ DatasetSpec
 </em>
 </td>
 <td>
-<p>Mount Points to be mounted on Alluxio.</p>
+<em>(Optional)</em>
+<p>Mount Points to be mounted on cache runtime. <br>
+This field can be empty because some runtimes don&rsquo;t need to mount external storage (e.g.
+<a href="https://v6d.io/">Vineyard</a>).</p>
 </td>
 </tr>
 <tr>
@@ -3754,7 +3782,7 @@ PodMetadata
 </em>
 </td>
 <td>
-<p>PodMetadata defines labels and annotations that will be propagated to DataLoad pods</p>
+<p>PodMetadata defines labels and annotations that will be propagated to DataMigrate pods</p>
 </td>
 </tr>
 <tr>
@@ -3768,7 +3796,7 @@ Kubernetes core/v1.Affinity
 </td>
 <td>
 <em>(Optional)</em>
-<p>Affinity defines affinity for DataLoad pod</p>
+<p>Affinity defines affinity for DataMigrate pod</p>
 </td>
 </tr>
 <tr>
@@ -3782,7 +3810,7 @@ Kubernetes core/v1.Affinity
 </td>
 <td>
 <em>(Optional)</em>
-<p>Tolerations defines tolerations for DataLoad pod</p>
+<p>Tolerations defines tolerations for DataMigrate pod</p>
 </td>
 </tr>
 <tr>
@@ -3794,7 +3822,7 @@ map[string]string
 </td>
 <td>
 <em>(Optional)</em>
-<p>NodeSelector defiens node selector for DataLoad pod</p>
+<p>NodeSelector defiens node selector for DataMigrate pod</p>
 </td>
 </tr>
 <tr>
@@ -3806,7 +3834,7 @@ string
 </td>
 <td>
 <em>(Optional)</em>
-<p>SchedulerName sets the scheduler to be used for DataLoad pod</p>
+<p>SchedulerName sets the scheduler to be used for DataMigrate pod</p>
 </td>
 </tr>
 <tr>
@@ -3849,6 +3877,31 @@ Kubernetes core/v1.ResourceRequirements
 <p>Resources that will be requested by the DataMigrate job. <br></p>
 </td>
 </tr>
+<tr>
+<td>
+<code>parallelism</code></br>
+<em>
+int32
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>Parallelism defines the parallelism tasks numbers for DataMigrate. If the value is greater than 1, the job acts
+as a launcher, and users should define the WorkerSpec.</p>
+</td>
+</tr>
+<tr>
+<td>
+<code>parallelOptions</code></br>
+<em>
+map[string]string
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>ParallelOptions defines options like ssh port and ssh secret name when parallelism is greater than 1.</p>
+</td>
+</tr>
 </tbody>
 </table>
 <h3 id="data.fluid.io/v1alpha1.DataProcess">DataProcess
@@ -4238,7 +4291,10 @@ Kubernetes meta/v1.Time
 </em>
 </td>
 <td>
-<p>Mount Points to be mounted on Alluxio.</p>
+<em>(Optional)</em>
+<p>Mount Points to be mounted on cache runtime. <br>
+This field can be empty because some runtimes don&rsquo;t need to mount external storage (e.g.
+<a href="https://v6d.io/">Vineyard</a>).</p>
 </td>
 </tr>
 <tr>
@@ -10140,6 +10196,19 @@ Available values are <code>Always</code>, <code>IfNotPresent</code>, <code>Never
 </tr>
 <tr>
 <td>
+<code>env</code></br>
+<em>
+map[string]string
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>Environment variables that will be used by Vineyard Fuse.
+Default is not set.</p>
+</td>
+</tr>
+<tr>
+<td>
 <code>cleanPolicy</code></br>
 <em>
 <a href="#data.fluid.io/v1alpha1.FuseCleanPolicy">
@@ -10239,5 +10308,5 @@ bool
 <hr/>
 <p><em>
 Generated with <code>gen-crd-api-reference-docs</code>
-on git commit <code>c7cfb1888</code>.
+on git commit <code>b9800030e</code>.
 </em></p>
diff --git a/pkg/ddc/vineyard/transform.go b/pkg/ddc/vineyard/transform.go
index 06367f71..aea415d6 100644
--- a/pkg/ddc/vineyard/transform.go
+++ b/pkg/ddc/vineyard/transform.go
@@ -155,6 +155,11 @@ func (e *VineyardEngine) transformFuse(runtime *datav1alpha1.VineyardRuntime, va
 	imagePullPolicy := runtime.Spec.Fuse.ImagePullPolicy
 	value.Fuse.Image, value.Fuse.ImageTag, value.Fuse.ImagePullPolicy = e.parseFuseImage(image, imageTag, imagePullPolicy)
 
+	if len(runtime.Spec.Fuse.Env) > 0 {
+		value.Fuse.Env = runtime.Spec.Fuse.Env
+	} else {
+		value.Fuse.Env = map[string]string{}
+	}
 	value.Fuse.CleanPolicy = runtime.Spec.Fuse.CleanPolicy
 
 	value.Fuse.NodeSelector = e.transformFuseNodeSelector(runtime)
diff --git a/pkg/ddc/vineyard/type.go b/pkg/ddc/vineyard/type.go
index 92ad5788..00cb288f 100644
--- a/pkg/ddc/vineyard/type.go
+++ b/pkg/ddc/vineyard/type.go
@@ -78,6 +78,7 @@ type Fuse struct {
 	Image           string                       `json:"image,omitempty"`
 	ImageTag        string                       `json:"imageTag,omitempty"`
 	ImagePullPolicy string                       `json:"imagePullPolicy,omitempty"`
+	Env             map[string]string            `json:"env,omitempty"`
 	CleanPolicy     datav1alpha1.FuseCleanPolicy `json:"cleanPolicy,omitempty"`
 	TargetPath      string                       `json:"targetPath,omitempty"`
 	NodeSelector    map[string]string            `json:"nodeSelector,omitempty"`


Test patch:
diff --git a/pkg/ddc/vineyard/transform_test.go b/pkg/ddc/vineyard/transform_test.go
index f7cd6078..3c626d3c 100755
--- a/pkg/ddc/vineyard/transform_test.go
+++ b/pkg/ddc/vineyard/transform_test.go
@@ -38,9 +38,10 @@ func TestTransformFuse(t *testing.T) {
 	}))
 
 	var tests = []struct {
-		runtime *datav1alpha1.VineyardRuntime
-		value   *Vineyard
-		expect  []string
+		runtime   *datav1alpha1.VineyardRuntime
+		value     *Vineyard
+		expect    []string
+		expectEnv map[string]string
 	}{
 		{&datav1alpha1.VineyardRuntime{
 			Spec: datav1alpha1.VineyardRuntimeSpec{
@@ -48,10 +49,11 @@ func TestTransformFuse(t *testing.T) {
 					Image:           "dummy-fuse-image",
 					ImageTag:        "dummy-tag",
 					ImagePullPolicy: "IfNotPresent",
+					Env:             map[string]string{"TEST_ENV": "true"},
 					CleanPolicy:     "OnRuntimeDeleted",
 				},
 			},
-		}, &Vineyard{}, []string{"dummy-fuse-image", "dummy-tag", "IfNotPresent", "OnRuntimeDeleted"}},
+		}, &Vineyard{}, []string{"dummy-fuse-image", "dummy-tag", "IfNotPresent", "OnRuntimeDeleted"}, map[string]string{"TEST_ENV": "true"}},
 	}
 	for _, test := range tests {
 		engine := &VineyardEngine{}
@@ -70,7 +72,9 @@ func TestTransformFuse(t *testing.T) {
 		if string(test.value.Fuse.CleanPolicy) != test.expect[3] {
 			t.Errorf("Expected Fuse CleanPolicy %s, got %s", test.expect[3], test.value.Fuse.CleanPolicy)
 		}
-
+		if !reflect.DeepEqual(test.value.Fuse.Env, test.expectEnv) {
+			t.Errorf("Expected Fuse Env %v, got %v", test.expectEnv, test.value.Fuse.Env)
+		}
 	}
 }