advertise multi node capabilities for zfs-local to provide seamless experience

Signed-off-by: Travis Glenn Hansen <travisghansen@yahoo.com>
This commit is contained in:
Travis Glenn Hansen 2022-02-20 16:34:02 -07:00
parent 4dd57c13bd
commit e80eff2bda
4 changed files with 143 additions and 3784 deletions

View File

@ -53,6 +53,7 @@ Predominantly 3 things are needed:
## Community Guides
- https://jonathangazeley.com/2021/01/05/using-truenas-to-provide-persistent-storage-for-kubernetes/
- https://www.lisenet.com/2021/moving-to-truenas-and-democratic-csi-for-kubernetes-persistent-storage/
- https://gist.github.com/admun/4372899f20421a947b7544e5fc9f9117 (migrating
from `nfs-client-provisioner` to `democratic-csi`)
- https://gist.github.com/deefdragon/d58a4210622ff64088bd62a5d8a4e8cc
@ -148,7 +149,15 @@ necessary.
This `driver` provisions node-local storage. Each node should have an
identically named zfs pool created and avaialble to the `driver`. Note, this is
_NOT_ the same thing as using the docker zfs storage driver (although the same
pool could be used). No other requirements are necessary.
pool could be used). Nodes should have the standard `zfs` utilities installed.
In the name of ease-of-use these drivers by default report `MULTI_NODE` support
(`ReadWriteMany` in k8s) however the volumes will implicity only work on the
node where originally provisioned. Topology contraints manage this in an
automated fashion preventing any undesirable behavior. So while you may
provision `MULTI_NODE` / `RWX` volumes, any workloads using the volume will
always land a single node and that node will always be the node where the
volume is/was provisioned.
## Server Prep
@ -380,4 +389,4 @@ A special shout out to the wonderful sponsors of the project!
- https://datamattsson.tumblr.com/post/624751011659202560/welcome-truenas-core-container-storage-provider
- https://github.com/dravanet/truenas-csi
- https://github.com/SynologyOpenSource/synology-csi
- https://github.com/openebs/zfs-localpv

3882
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -18,26 +18,26 @@
"url": "https://github.com/democratic-csi/democratic-csi.git"
},
"dependencies": {
"@grpc/grpc-js": "^1.3.6",
"@grpc/grpc-js": "^1.5.5",
"@grpc/proto-loader": "^0.6.0",
"@kubernetes/client-node": "^0.16.1",
"@kubernetes/client-node": "^0.16.3",
"async-mutex": "^0.3.1",
"bunyan": "^1.8.15",
"grpc-uds": "^0.1.6",
"handlebars": "^4.7.7",
"js-yaml": "^4.0.0",
"lodash": "^4.17.21",
"lru-cache": "^6.0.0",
"prompt": "^1.2.0",
"lru-cache": "^7.3.1",
"prompt": "^1.2.2",
"request": "^2.88.2",
"semver": "^7.3.4",
"ssh2": "^1.1.0",
"uri-js": "^4.4.1",
"uuid": "^8.3.2",
"winston": "^3.3.3",
"winston": "^3.6.0",
"yargs": "^17.0.1"
},
"devDependencies": {
"eslint": "^8.1.0"
"eslint": "^8.9.0"
}
}

View File

@ -99,6 +99,15 @@ class ControllerZfsLocalDriver extends ControllerZfsBaseDriver {
}
}
/**
* Although it is conter-intuitive to advertise node-local volumes as RWX we
* do so here to provide an easy out-of-the-box experience as users will by
* default want to provision volumes of RWX. The topology contraints
* implicity will enforce only a single node can use the volume at a given
* time.
*
* @returns Array
*/
getAccessModes() {
const driverZfsResourceType = this.getDriverZfsResourceType();
let access_modes = _.get(this.options, "csi.access_modes", null);
@ -113,9 +122,9 @@ class ControllerZfsLocalDriver extends ControllerZfsBaseDriver {
"SINGLE_NODE_SINGLE_WRITER", // added in v1.5.0
"SINGLE_NODE_MULTI_WRITER", // added in v1.5.0
"SINGLE_NODE_READER_ONLY",
//"MULTI_NODE_READER_ONLY",
//"MULTI_NODE_SINGLE_WRITER",
//"MULTI_NODE_MULTI_WRITER",
"MULTI_NODE_READER_ONLY",
"MULTI_NODE_SINGLE_WRITER",
"MULTI_NODE_MULTI_WRITER",
];
case "volume":
return [
@ -124,8 +133,9 @@ class ControllerZfsLocalDriver extends ControllerZfsBaseDriver {
"SINGLE_NODE_SINGLE_WRITER", // added in v1.5.0
"SINGLE_NODE_MULTI_WRITER", // added in v1.5.0
"SINGLE_NODE_READER_ONLY",
//"MULTI_NODE_READER_ONLY",
//"MULTI_NODE_SINGLE_WRITER",
"MULTI_NODE_READER_ONLY",
"MULTI_NODE_SINGLE_WRITER",
"MULTI_NODE_MULTI_WRITER",
];
}
}