Storage Commands
The v8x provides a hierarchical command structure for managing storage:
uvx v8x storage
├── system # Manage storage system deployments (CephNFS, etc.)
├── import # Import storage into cluster namespaces
│ ├── nfs # NFS-specific import commands
│ ├── cephfs # CephFS-specific import commands
│ └── internal # Cross-namespace PVC imports
├── expose # Expose cluster storage to external clients
│ ├── cephfs # CephFS external expose commands
│ └── nfs # NFS external expose commands
├── create # Create a PVC
├── delete # Delete a PVC
├── get # Get PVC details
├── list # List PVCs
└── list-available # List available storage classes
If this is your first time using the storage commands, start with:
uvx v8x storage --help
uvx v8x storage system create --help
uvx v8x storage import --help
uvx v8x storage expose --help
This lets you discover which subcommand group matches your task before you start filling in cluster names, namespaces, and provider-specific configuration.
In this section, the pattern is the same throughout: choose a storage subcommand group, inspect --help, then provide the cluster, object name, and any storage-specific configuration needed for create, import, or expose operations.
Storage System Commands
Manage storage system deployments (CephNFS, CephFS infrastructure, etc.).
Create a Storage System
The key options here are the storage system name, system type, and storage class. Use --config-json when the backing system needs additional configuration.
Success looks like this: the storage system is registered for the target cluster and can be retrieved or listed by name afterward.
uvx v8x storage system create <name> <cluster> <system-type> <storage-class> \
[--namespace <ns>] \
[--config-json '{"key": "value"}']
Example - deploy a CephNFS system:
uvx v8x storage system create my-nfs prod-cluster cephnfs \
--namespace vantage-rook-ceph
Get Storage System Details
uvx v8x storage system get <name> <cluster>
List All Storage Systems
uvx v8x storage system list <cluster>
Update a Storage System
uvx v8x storage system update <name> <cluster> \
--config-json '{"server_count": 2}'
Delete a Storage System
uvx v8x storage system delete <name> <cluster> [--force]
Import Commands
Import storage into cluster namespaces. Organised by storage type.
NFS Import
Create NFS Import
Use uvx v8x storage import nfs create --help to inspect optional flags such as --capacity, --access-mode, and --read-only before creating the import.
Success looks like this: the import creates a PVC-backed view of the remote NFS share in the target namespace, and later get or list commands show it as an available storage resource.
uvx v8x storage import nfs create <pvc-name> <cluster> <nfs-server> <nfs-share> \
[--namespace <ns>] \
[--capacity 100Gi] \
[--access-mode ReadWriteMany] \
[--read-only]
Example:
uvx v8x storage import nfs create datasets prod-cluster nas01.internal /exports/ml-datasets \
--capacity 1Ti
Create External NFS Import
Import an NFS server from outside the cluster:
uvx v8x storage import nfs create-external <name> <cluster> <nfs-server> <nfs-share> \
--namespace <ns> \
[--capacity 100Gi] \
[--access-mode ReadWriteMany]
CephFS Import
Create CephFS Import
uvx v8x storage import cephfs create <pvc-name> <cluster> <source-pvc> <source-ns> \
[--namespace <ns>] \
[--capacity 100Gi]
Example:
uvx v8x storage import cephfs create shared-ceph prod-cluster shared-storage vantage-system
Create External CephFS Import
Import from an external (non-Rook) Ceph cluster:
uvx v8x storage import cephfs create-external <name> <cluster> \
--ceph-monitors "10.0.0.1:6789,10.0.0.2:6789" \
--ceph-client <client-name> \
--ceph-client-key "AQD...==" \
--ceph-fs-name <fs-name> \
[--ceph-root-path /] \
--namespace <ns> \
[--capacity 500Gi]
Internal (Cross-Namespace) Import
Expose an existing PVC to another namespace:
Create Cross-Namespace Import
uvx v8x storage import internal create <target-pvc-name> <cluster> <source-pvc> <source-ns> \
[--namespace <target-ns>] \
[--capacity 100Gi] \
[--access-mode ReadWriteMany] \
[--read-only]
Example - expose shared-storage to your namespace:
uvx v8x storage import internal create shared-storage prod-cluster shared-storage vantage-system \
--capacity 500Gi
Get / List / Delete Cross-Namespace Imports
uvx v8x storage import internal get <pvc-name> <cluster> [--namespace <ns>]
uvx v8x storage import internal list <cluster> [--namespace <ns>]
uvx v8x storage import internal delete <pvc-name> <cluster> [--namespace <ns>] [--force]
Shared Import Commands
These commands operate across all import types (NFS, CephFS, internal):
# Get details of any import
uvx v8x storage import get <pvc-name> <cluster> [--namespace <ns>]
# List all imports in a namespace
uvx v8x storage import list <cluster> [--namespace <ns>]
# Delete any import
uvx v8x storage import delete <pvc-name> <cluster> [--namespace <ns>] [--force]
# External import lifecycle
uvx v8x storage import get-external <name> <cluster>
uvx v8x storage import list-external <cluster> [--namespace <ns>]
uvx v8x storage import delete-external <name> <cluster> [--force]
uvx v8x storage import external-status <name> <cluster>
uvx v8x storage import external-mount-info <name> <cluster>
uvx v8x storage import external-config <name> <cluster> [--json]
Expose Commands
Expose cluster storage to clients outside the Kubernetes cluster.
CephFS External Expose
Use uvx v8x storage expose cephfs create --help if you need to inspect monitor, client, or service-exposure options before creating the expose configuration.
Success looks like this: the expose operation generates the external access configuration, and the follow-up credentials, status, or mount-commands subcommands return the details clients need to connect.
# Create
uvx v8x storage expose cephfs create <name> <cluster> \
[--ceph-client <client-name>] \
[--mds-path /volumes/csi] \
[--osd-pool vantage-cephfs-data] \
[--expose-monitors] \
[--monitor-service-type NodePort]
# Get details
uvx v8x storage expose cephfs get <name> <cluster>
# List all
uvx v8x storage expose cephfs list <cluster>
# Delete
uvx v8x storage expose cephfs delete <name> <cluster> [--force]
# Get mount commands
uvx v8x storage expose cephfs mount-commands <name> <cluster>
# Get credentials
uvx v8x storage expose cephfs credentials <name> <cluster>
# Get status
uvx v8x storage expose cephfs status <name> <cluster>
NFS External Expose
# Create
uvx v8x storage expose nfs create <name> <cluster> \
--source-pvc <pvc-name> \
--source-namespace <ns>
# Get details
uvx v8x storage expose nfs get <name> <cluster>
# Delete
uvx v8x storage expose nfs delete <name> <cluster> [--force]
Common Options
| Option | Description |
|---|---|
CLUSTER_NAME (positional) | Cluster name (required) |
--namespace, -n | Target namespace (default: derived from your username) |
--json | Output in JSON format |
--force, -f | Skip confirmation prompt (delete commands) |
Notes
- All operations are idempotent - re-importing or re-exposing the same storage returns the existing resource
- Namespaces are created automatically if they don't exist, with Istio sidecar injection enabled
- Only resources managed by Vantage (labeled with
app.kubernetes.io/managed-by=vantage-storage) can be deleted through these commands - The
--namespaceflag defaults to your user namespace derived from your login email