In the context of NAS-ECO, here is what you can configure in Trident 24.10:
LimitVolumeSize: limits the max size of a PVC (ie qtree)
LimitVolumePoolSize: limits the max size of the FlexVol hosting the qtrees
DenyNewVolumePools: avoids the creation of a new FlexVol when the current one is full
QtreesPerFlexvol: defines the max number of Qtrees you want to have per FlexVol (default: 200, min: 50, max: 300)
In ONTAP, you can:
Limit the max number of FlexVol per SVM
Limit the logical capacity assigned to a SVM (9.13+, no MCC)
You can also pre-provision FlexVol that Trident will pick up (or create a dummy PVC, which triggers the creation of a FlexVol, delete the PVC, & patch the TBC with denyNewVolumePools)
The difficult part is to find the correct configuration of the FlexVol when doing it manually
Example or pre-provisioned FlexVol:
My Trident Backend:
cat << EOF | kubectl apply -f -
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
name: backend-nas-eco2
namespace: trident
spec:
version: 1
backendName: nas-eco2
storageDriverName: ontap-nas-economy
managementLIF: 192.168.0.133
storagePrefix: eco2_
autoExportCIDRs:
- 192.168.0.0/24
autoExportPolicy: true
denyNewVolumePools: "true"
limitVolumeSize: 15Gi
limitVolumePoolSize: 20Gi
qtreesPerFlexvol: '50'
defaults:
nameTemplate: "{{ .config.StoragePrefix }}_{{ .volume.Namespace }}_{{ .volume.RequestName }}"
credentials:
name: secret-nas-svm-creds
EOF
The API Calls to create the corresponding volume:
curl -X POST -ku admin:Netapp1! -H "accept: application/json" -H "Content-Type: application/json" -d '{
"name": "eco2_empty",
"svm": {"name": "nassvm"}
}' https://cluster1.demo.netapp.com/api/protocols/nfs/export-policies
curl -X POST -ku admin:Netapp1! -H "accept: application/json" -H "Content-Type: application/json" -d '{
"aggregates": [{"name": "aggr1"}],
"comment": "",
"guarantee":{"type":"none"},
"name": "trident_qtree_pool_eco2_demo",
"nas":{
"export_policy":{"name":"eco2_empty"},
"security_style":"unix",
"unix_permissions":711
},
"size": "1073741824",
"snapshot_policy":{"name":"none"},
"space":{"snapshot":{"reserve_percent":0}},
"state":"online",
"style": "flexvol",
"svm": {"name":"nassvm"},
"tiering":{"policy":"none"}
}' https://cluster1.demo.netapp.com/api/storage/volumes
GETVOL=$(curl -X GET -ku admin:Netapp1! https://cluster1.demo.netapp.com/api/storage/volumes?fields=nas.path&name=trident_qtree_pool_eco2_demo&state=online&style=flexvol&svm.name=nassvm -H "accept: application/json")
VOLID=$(echo $GETVOL | jq -r .records[0].uuid)
curl -X POST -ku admin:Netapp1! -H "accept: application/json" -H "Content-Type: application/json" -d '{
"qtree":{"name":""},
"space":{"hard_limit":-1},
"svm":{"name":"nassvm"},
"type":"tree",
"volume":{"name":"trident_qtree_pool_eco2_demo"}
}' https://cluster1.demo.netapp.com/api/storage/quota/rules
curl -X PATCH -ku admin:Netapp1! -H "accept: application/json" -H "Content-Type: application/json" -d '{
"quota":{"enabled": "true"}
}' https://cluster1.demo.netapp.com/api/storage/volumes/$VOLID
curl -X PATCH -ku admin:Netapp1! -H "accept: application/json" -H "Content-Type: application/json" -d '{
"snapshot_directory_access_enabled": "false"
}' https://cluster1.demo.netapp.com/api/storage/volumes/$VOLID
In order to retrieve the list of API calls for a specific TBC, you need to enable debug mode for Trident, which will log all the API calls.
From there, you need to retrieve all the POST/PATCH calls…
hth
Comments
0 B
|👍
/👎
0 B
|👍
/👎
0 B
|👍
/👎
0 B
|👍
/👎
0 B
|👍
/👎
0 B
|👍
/👎
0 B
|👍
/👎
0 B
|👍
/👎
0 B
|👍
/👎