Annotations, labels and parameters
Every pillar-csi.bhyoo.com annotation, label, StorageClass parameter, finalizer and volume attribute that pillar-csi reads or writes, and what each one means.
On this page
You set pillar-csi configuration with three keys: pillar-csi.bhyoo.com/backend, pillar-csi.bhyoo.com/protocol and pillar-csi.bhyoo.com/filesystem. Each value is a YAML document with the same shape as the matching subtree of PillarStore.spec.backend, PillarProtocol.spec.protocol or PillarStorageClass.spec.filesystem. The same three keys and shapes work as PVC annotations and as parameters of a hand-written StorageClass, so a setting reads the same wherever you write it. iSCSI, NFS and SMB are planned and designed to use the same protocol document; in v0.3.3 it accepts only nvmeofTcp.
All pillar-csi keys live under the pillar-csi.bhyoo.com/ prefix. The CSI driver name and StorageClass provisioner is pillar-csi.bhyoo.com.
Keys you set
PVC annotations
Each value is limited to the tunable fields of its subtree. See Override settings per binding or per volume.
| Key | Document shape | Tunable fields |
|---|---|---|
pillar-csi. | zfs: {. or lvm: {. | zfs., lvm. |
pillar-csi. | nvmeofTcp: {. | maxQueueSize, inCapsuleDataSize, ctrlLossTmo, reconnectDelay |
pillar-csi. | {fsType, mkfsOptions, mountOptions} | all three |
Rules:
- The controller reads these once, in
CreateVolume. Later edits do not change an existing volume. - Any other key under
pillar-csi.bhyoo.com/on a PVC fails provisioning withunsupported PVC annotation "<key>". The 0.2 keysbackend-override,protocol-override,fs-overrideandparam.*fall under this rule. - Structural fields fail with
<key>: <path> is structural and cannot be set per volume. Unknown fields fail withunknown field. pillar-csi.bhyoo.com/filesystemis rejected on a PVC withvolumeMode: Block.
StorageClass parameters
A StorageClass generated from a PillarStorageClass carries one pillar-csi parameter:
| Key | Value |
|---|---|
pillar-csi. | name of the PillarStorageClass |
Any other pillar-csi.bhyoo.com/ parameter on a generated class is rejected.
A StorageClass you write yourself (provisioner: pillar-csi.bhyoo.com) accepts:
| Key | Required | Value |
|---|---|---|
pillar-csi. | yes | name of a PillarStore |
pillar-csi. | yes | name of a PillarProtocol |
pillar-csi. | no | backend document, as on a PVC |
pillar-csi. | no | protocol document, as on a PVC |
pillar-csi. | no | filesystem document, as on a PVC |
csi. | no | ext4 or xfs; must equal the filesystem document’s fsType if both are set |
Any other pillar-csi.bhyoo.com/ parameter, including the 0.2 flat keys such as zfs-prop.*, lvm-*, nvmeof-*, acl-enabled and backend-type, is rejected.
Keys pillar-csi writes
You do not set these. They are listed so you can recognize them and leave them alone.
Labels
| Key | Object | Set by | Meaning |
|---|---|---|---|
pillar-csi. | Node | controller | The node is referenced by a PillarAgent nodeRef. The agent DaemonSet’s default nodeSelector matches it. |
Annotations
| Key | Object | Set by | Meaning |
|---|---|---|---|
pillar-csi. | CSINode | node plugin at startup | The node’s NVMe host NQN, read from / on the host. If / or / is missing, the node plugin writes a generated ID into it. These are ID files; no packages are installed. The controller uses the NQN to grant and revoke ACL access. |
pillar-csi. | PillarStorageClass | controller | Temporary record of the generated StorageClass’s labels, annotations and allowedTopologies while the controller deletes and recreates the class. Removed once the new class exists. |
pillar-csi. | PillarVolumeState | controller | Marks a volume lifecycle created under the rule that Ready is recorded before CreateVolume reports success. Used when cleaning up abandoned provisioning attempts. |
Finalizers
Each finalizer blocks deletion while something still depends on the object.
| Finalizer | Object | Blocks deletion while |
|---|---|---|
pillar-csi. | PillarAgent | a PillarStore references it, or a volume (PV or PillarVolumeState) on it remains |
pillar-csi. | PillarStore | a PillarStorageClass references it, or a volume provisioned from it remains |
pillar-csi. | PillarProtocol | a PillarStorageClass references it |
pillar-csi. | PillarStorageClass | a PVC uses the generated StorageClass, or a volume provisioned through it remains |
While deletion is blocked, the object’s Ready condition is False with reason DeletionBlocked, and the message starts with Deletion blocked: and lists what still depends on it.
Volume attributes
The controller writes these into PersistentVolume.spec.csi.volumeAttributes at CreateVolume. The node plugin reads them when it connects, formats and mounts. Keys that were not set anywhere are omitted. The first three keys have no prefix.
| Key | Value |
|---|---|
target_id | target identifier; for NVMe-oF/TCP, the subsystem NQN |
address | storage node address the export listens on, recorded at provisioning |
port | TCP port the export listens on, recorded at provisioning |
pillar-csi. | nvmeof-tcp |
pillar-csi. | protocol-level reference of the volume (the NVMe subsystem name) |
pillar-csi. | resolved maxQueueSize |
pillar-csi. | resolved ctrlLossTmo, seconds |
pillar-csi. | resolved reconnectDelay, seconds |
pillar-csi. | resolved fsType |
pillar-csi. | resolved mkfsOptions, as a JSON string array |
pillar-csi. | resolved mountOptions, as a JSON string array |
Topology
The node plugin reports the topology segment pillar-csi.bhyoo.com/nvmeof: "true" on nodes where the nvme_tcp kernel module is loaded (/sys/module/nvme_tcp exists). Nodes without the module omit the key. You can use it in a StorageClass allowedTopologies.