mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-27 16:50:23 +00:00
Merge pull request #594 from Madhu-1/cherrypick-vol
Add mount option for Cephfs
This commit is contained in:
commit
99e81e6b61
@ -78,6 +78,8 @@ is used to define in which namespace you want the configmaps to be stored
|
|||||||
| `fsName` | yes | CephFS filesystem name into which the volume shall be created |
|
| `fsName` | yes | CephFS filesystem name into which the volume shall be created |
|
||||||
| `mounter` | no | Mount method to be used for this volume. Available options are `kernel` for Ceph kernel client and `fuse` for Ceph FUSE driver. Defaults to "default mounter". |
|
| `mounter` | no | Mount method to be used for this volume. Available options are `kernel` for Ceph kernel client and `fuse` for Ceph FUSE driver. Defaults to "default mounter". |
|
||||||
| `pool` | no | Ceph pool into which volume data shall be stored |
|
| `pool` | no | Ceph pool into which volume data shall be stored |
|
||||||
|
| `kernelMountOptions` | no | Comma separated string of mount options accepted by cephfs kernel mounter, by default no options are passed. Check man mount.ceph for options. |
|
||||||
|
| `fuseMountOptions` | no | Comma separated string of mount options accepted by ceph-fuse mounter, by default no options are passed. |
|
||||||
| `csi.storage.k8s.io/provisioner-secret-name`, `csi.storage.k8s.io/node-stage-secret-name` | for Kubernetes | Name of the Kubernetes Secret object containing Ceph client credentials. Both parameters should have the same value |
|
| `csi.storage.k8s.io/provisioner-secret-name`, `csi.storage.k8s.io/node-stage-secret-name` | for Kubernetes | Name of the Kubernetes Secret object containing Ceph client credentials. Both parameters should have the same value |
|
||||||
| `csi.storage.k8s.io/provisioner-secret-namespace`, `csi.storage.k8s.io/node-stage-secret-namespace` | for Kubernetes | Namespaces of the above Secret objects |
|
| `csi.storage.k8s.io/provisioner-secret-namespace`, `csi.storage.k8s.io/node-stage-secret-namespace` | for Kubernetes | Namespaces of the above Secret objects |
|
||||||
|
|
||||||
|
@ -20,6 +20,14 @@ parameters:
|
|||||||
# (optional) Ceph pool into which volume data shall be stored
|
# (optional) Ceph pool into which volume data shall be stored
|
||||||
# pool: cephfs_data
|
# pool: cephfs_data
|
||||||
|
|
||||||
|
# (optional) Comma separated string of Ceph-fuse mount options.
|
||||||
|
# For eg:
|
||||||
|
# fuseMountOptions: debug
|
||||||
|
|
||||||
|
# (optional) Comma separated string of Cephfs kernel mount options.
|
||||||
|
# Check man mount.ceph for mount options. For eg:
|
||||||
|
# kernelMountOptions: readdir_max_bytes=1048576,norbytes
|
||||||
|
|
||||||
# The secrets have to contain user and/or Ceph admin credentials.
|
# The secrets have to contain user and/or Ceph admin credentials.
|
||||||
csi.storage.k8s.io/provisioner-secret-name: csi-cephfs-secret
|
csi.storage.k8s.io/provisioner-secret-name: csi-cephfs-secret
|
||||||
csi.storage.k8s.io/provisioner-secret-namespace: default
|
csi.storage.k8s.io/provisioner-secret-namespace: default
|
||||||
|
@ -141,6 +141,9 @@ func mountFuse(ctx context.Context, mountPoint string, cr *util.Credentials, vol
|
|||||||
"-o", "nonempty",
|
"-o", "nonempty",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if volOptions.FuseMountOptions != "" {
|
||||||
|
args = append(args, ","+volOptions.FuseMountOptions)
|
||||||
|
}
|
||||||
if volOptions.FsName != "" {
|
if volOptions.FsName != "" {
|
||||||
args = append(args, "--client_mds_namespace="+volOptions.FsName)
|
args = append(args, "--client_mds_namespace="+volOptions.FsName)
|
||||||
}
|
}
|
||||||
@ -197,6 +200,9 @@ func mountKernel(ctx context.Context, mountPoint string, cr *util.Credentials, v
|
|||||||
if volOptions.FsName != "" {
|
if volOptions.FsName != "" {
|
||||||
optionsStr += fmt.Sprintf(",mds_namespace=%s", volOptions.FsName)
|
optionsStr += fmt.Sprintf(",mds_namespace=%s", volOptions.FsName)
|
||||||
}
|
}
|
||||||
|
if volOptions.KernelMountOptions != "" {
|
||||||
|
optionsStr += fmt.Sprintf(",%s", volOptions.KernelMountOptions)
|
||||||
|
}
|
||||||
args = append(args, "-o", optionsStr)
|
args = append(args, "-o", optionsStr)
|
||||||
|
|
||||||
return execCommandErr(ctx, "mount", args[:]...)
|
return execCommandErr(ctx, "mount", args[:]...)
|
||||||
|
@ -38,6 +38,8 @@ type volumeOptions struct {
|
|||||||
RootPath string `json:"rootPath"`
|
RootPath string `json:"rootPath"`
|
||||||
Mounter string `json:"mounter"`
|
Mounter string `json:"mounter"`
|
||||||
ProvisionVolume bool `json:"provisionVolume"`
|
ProvisionVolume bool `json:"provisionVolume"`
|
||||||
|
KernelMountOptions string `json:"kernelMountOptions"`
|
||||||
|
FuseMountOptions string `json:"fuseMountOptions"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func validateNonEmptyField(field, fieldName string) error {
|
func validateNonEmptyField(field, fieldName string) error {
|
||||||
@ -147,6 +149,14 @@ func newVolumeOptions(ctx context.Context, requestName string, size int64, volOp
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err = extractOptionalOption(&opts.KernelMountOptions, "kernelMountOptions", volOptions); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = extractOptionalOption(&opts.FuseMountOptions, "fuseMountOptions", volOptions); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
opts.RequestName = requestName
|
opts.RequestName = requestName
|
||||||
opts.Size = size
|
opts.Size = size
|
||||||
|
|
||||||
@ -223,6 +233,14 @@ func newVolumeOptionsFromVolID(ctx context.Context, volID string, volOpt, secret
|
|||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err = extractOptionalOption(&volOptions.KernelMountOptions, "kernelMountOptions", volOpt); err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = extractOptionalOption(&volOptions.FuseMountOptions, "fuseMountOptions", volOpt); err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
if err = extractMounter(&volOptions.Mounter, volOpt); err != nil {
|
if err = extractMounter(&volOptions.Mounter, volOpt); err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user