Common library Storage¶
This page describes the different ways you can attach storage to charts using the common library.
Types¶
These are the types of storage that are supported in the common library. Of course, other types are possible with the custom
type.
Persistent Volume Claim¶
This is probably the most common storage type, therefore it is also the default when no type
is specified.
It can be attached in two ways.
Dynamically provisioned¶
Charts can be configured to create the required persistentVolumeClaim manifests on the fly.
Field | Mandatory | Docs / Description |
---|---|---|
enabled | Yes | |
type | Yes | |
accessMode | Yes | link |
size | Yes | link |
mountPath | No | Where to mount the volume in the main container. Defaults to /<name_of_the_volume> . |
readOnly | No | Specify if the volume should be mounted read-only. |
nameOverride | No | Override the name suffix that is used for this volume. |
storageClass | No | Storage class to use for this volume. |
retain | No | Set to true to retain the PVC upon helm uninstall . |
Minimal config:
persistence:
config:
enabled: true
type: pvc
accessMode: ReadWriteOnce
size: 1Gi
This will create a 1Gi RWO PVC named RELEASE-NAME-config
with the default storageClass, which will mount to /config
.
Existing claim¶
Charts can be configured to attach to a pre-existing persistentVolumeClaim.
Field | Mandatory | Docs / Description |
---|---|---|
enabled | Yes | |
type | Yes | |
existingClaim | Yes | Name of the existing PVC |
mountPath | No | Where to mount the volume in the main container. Defaults to /<name_of_the_volume> . |
subPath | No | Specifies a sub-path inside the referenced volume instead of its root. |
readOnly | No | Specify if the volume should be mounted read-only. |
nameOverride | No | Override the name suffix that is used for this volume. |
Minimal config:
persistence:
config:
enabled: true
type: pvc
existingClaim: myAppData
This will mount an existing PVC named myAppData
to /config
.
Empty Dir¶
Sometimes you need to share some data between containers, or need some scratch space. That is where an emptyDir can come in.
See the Kubernetes docs for more information.
Field | Mandatory | Docs / Description |
---|---|---|
enabled | Yes | |
type | Yes | |
medium | No | Set this to Memory to mount a tmpfs (RAM-backed filesystem) instead of the storage medium that backs the node. |
sizeLimit | No | If the SizeMemoryBackedVolumes feature gate is enabled, you can specify a size for memory backed volumes. |
mountPath | No | Where to mount the volume in the main container. Defaults to /<name_of_the_volume> . |
nameOverride | No | Override the name suffix that is used for this volume. |
Minimal config:
persistence:
config:
enabled: true
type: emptyDir
This will create an ephemeral emptyDir volume and mount it to /config
.
Host path¶
In order to mount a path from the node where the Pod is running you can use a hostPath
type persistence item.
This can also be used to mount an attached USB device to a Pod. Note that this will most likely also require setting an elevated securityContext
.
See the Kubernetes docs for more information.
Field | Mandatory | Docs / Description |
---|---|---|
enabled | Yes | |
type | Yes | |
hostPath | Yes | Which path on the host should be mounted. |
hostPathType | No | Specifying a hostPathType adds a check before trying to mount the path. See Kubernetes documentation for options. |
mountPath | No | Where to mount the volume in the main container. Defaults to the value of hostPath . |
readOnly | No | Specify if the volume should be mounted read-only. |
nameOverride | No | Override the name suffix that is used for this volume. |
Minimal config:
persistence:
config:
enabled: true
type: hostPath
hostPath: /dev
This will mount the /dev
folder from the underlying host to /dev
in the container.
configMap¶
In order to mount a configMap to a mount point within the Pod you can use the configMap
type persistence item.
Field | Mandatory | Docs / Description |
---|---|---|
enabled | Yes | |
type | Yes | |
name | Yes | Which configMap should be mounted. Supports Helm templating. |
defaultMode | No | The default file access permission bit. |
items | No | Specify item-specific configuration. Will be passed 1:1 to the volumeSpec. |
readOnly | No | Explicitly specify if the volume should be mounted read-only. Even if not specified, the configMap will be read-only. |
Minimal config:
persistence:
config:
enabled: true
type: configMap
name: mySettings
This will mount the contents of the pre-existing mySettings
configMap to /config
.
Secret¶
In order to mount a Secret to a mount point within the Pod you can use the secret
type persistence item.
Field | Mandatory | Docs / Description |
---|---|---|
enabled | Yes | |
type | Yes | |
name | Yes | Which Secret should be mounted. Supports Helm templating. |
defaultMode | No | The default file access permission bit. |
items | No | Specify item-specific configuration. Will be passed 1:1 to the volumeSpec. |
readOnly | No | Explicitly specify if the volume should be mounted read-only. Even if not specified, the Secret will be read-only. |
Minimal config:
persistence:
config:
enabled: true
type: secret
name: mySecret
This will mount the contents of the pre-existing mySecret
Secret to /config
.
NFS Volume¶
To mount an NFS share to your Pod you can either pre-create a persistentVolumeClaim referring to it, or you can specify an inline NFS volume:
Note
Mounting an NFS share this way does not allow for specifying mount options. If you require these, you must create a PVC to mount the share.
Field | Mandatory | Docs / Description |
---|---|---|
enabled | Yes | |
type | Yes | |
server | Yes | Host name or IP address of the NFS server. |
path | Yes | The path on the server to mount. |
readOnly | No | Explicitly specify if the volume should be mounted read-only. Even if not specified, the Secret will be read-only. |
Minimal config:
persistence:
config:
enabled: true
type: nfs
server: 10.10.0.8
path: /tank/nas/library
This will mount the NFS share /tank/nas/library
on server 10.10.0.8
to /config
.
Custom¶
When you wish to specify a custom volume, you can use the custom
type. This can be used for example to mount configMap or Secret objects.
See the Kubernetes docs for more information.
Field | Mandatory | Docs / Description |
---|---|---|
enabled | Yes | |
type | Yes | |
volumeSpec | Yes | Define the raw Volume spec here. |
mountPath | No | Where to mount the volume in the main container. Defaults to the value of hostPath . |
readOnly | No | Specify if the volume should be mounted read-only. |
nameOverride | No | Override the name suffix that is used for this volume. |
Permissions¶
Charts do not modify file or folder permissions on volumes out of the box.
This means that you will have to make sure that your storage can be written to by the application.
Multiple subPaths for 1 volume¶
It is possible to mount multiple subPaths from the same volume to the main container. This can be achieved by specifying subPath
with a list instead of a string.
Note
It is not possible to define mountPath
at the top level when using this feature
Examples:
persistence:
config:
enabled: true
type: custom
volumeSpec:
configMap:
name: myData
subPath:
- path: myFirstScript.sh
mountPath: /data/myFirstScript.sh
- path: myCertificate.pem
mountPath: /certs/myCertificate.pem
readOnly: true
persistence:
config:
enabled: true
type: pvc
existingClaim: myAppData
subPath:
- path: .
mountPath: /my_media
- path: Series
mountPath: /series
- path: Downloads
mountPath: /downloads