Skip to main content

Storage

Applications and add-ons on AstroPulse never name a StorageClass. They ask for storage by a name, such as fast or local, and each cluster says which of its own StorageClasses that name means, so the same application runs on any cluster whatever its classes are called. A name and the class it points at is a binding. You make bindings; the StorageClasses belong to the cluster, and AstroPulse never creates, changes or deletes one.

Before you start​

  • A cluster whose storage AstroPulse has observed. A cluster AstroPulse created is observed by AstroPulse; a registered cluster is observed by its agent, so the agent must be connected.
  • The StorageClasses you want to offer, already on the cluster.

In the console​

  1. Open the cluster from the cluster list and select the Storage tab. It lists the cluster's StorageClasses, with each class's kind and how many bindings point at it, then the bindings: Name workloads ask for, Points at StorageClass, Used by and State.

    Open zoom view

    The Storage tab: the cluster's StorageClasses and its bindings

    The Storage tab: the cluster's StorageClasses and its bindingsThe Storage tab: the cluster's StorageClasses and its bindings
  2. Select Bind a name. In Bind a storage name, enter the Name, pick the StorageClass, and select Bind. For a class whose driver AstroPulse does not recognise, also pick the Kind of storage.

    Open zoom view

    The Bind a storage name dialog

    The Bind a storage name dialogThe Bind a storage name dialog
  3. To point a name at another class, select Bind a name, enter the same Name and pick the other StorageClass. The dialog says "Choosing another class repoints it; a volume already provisioned is not moved."; select Repoint.

  4. To remove a name, select Unbind on its row and confirm. The class and its volumes are not touched. A name an add-on uses shows In use instead.

Select a class or a binding for its details: the driver, default, expansion and binding mode as Kubernetes reports them, the kind AstroPulse reads from the driver, and which add-on uses a name.

You should see​

The name appears under the bindings with its class, and its State reads Available. Workloads that ask for the name get volumes from that class.

Kinds of storage​

A StorageClass does not say whether its volumes can be shared, so AstroPulse reads the kind from the class's driver:

KindAccessWhat it isRight for
SharedReadWriteManyOne copy many nodes mount at once: EFS, Filestore, NFS.Several replicas over one dataset, such as model weights
DedicatedReadWriteOnceA disk attached to one node at a time: EBS, Persistent Disk, Azure Disk. It survives the node.A single-writer database
Node-localNoneThe node's own disk. Fast, and gone when the node is.Scratch space, a cache that can be refilled

Dedicated means one node, not one pod: three replicas on a dedicated class wait in Pending once they land on different nodes. A driver AstroPulse does not recognise shows as Unknown, and you choose the kind when you bind a name to it. A recognised driver's kind cannot be overridden.

A name in use​

A name an installed add-on asks for, such as the one in Cost Visibility's prometheus.storage.name, shows that add-on under Used by. It cannot be unbound or repointed while that is so: the add-on's volume would keep running, but its next update, resync or rollback could not find its storage. To free the name, change that add-on setting to another name, or uninstall the add-on.

How the list stays current​

AstroPulse observes a cluster it created itself; a registered cluster's Astro Agent reports its StorageClasses. A class added or deleted on the cluster appears on the next observation. Refresh in the console re-reads what AstroPulse holds; it does not observe the cluster again.

If observation stops, the list keeps the last thing it saw. A cluster whose storage has never been observed says "This cluster's storage has not been observed yet." rather than showing an empty list, and names can be bound once the first observation arrives.

When a class is deleted outside AstroPulse​

Someone can delete a StorageClass directly, with kubectl for example. On the next observation the class leaves the list. A binding that pointed at it is kept and its State reads Missing: anything asking for that name would fail. Restore the class, or bind the name to another class. Volumes already created from the deleted class keep running; a StorageClass is read only when a new volume is created.

Other ways in​

  • Nova: ask, for example, "which storage names does production have?" or "bind fast to gp3 on production". Nova shows the change and applies it after you approve it.
  • SDK and API: the cluster's storage, with its classes and bindings. See the API reference.

With astroctl​

Terminal
astroctl infra k8s storage get production
astroctl infra k8s storage set production --binding local=standard --binding fast=gp3
astroctl infra k8s storage set production --binding fast=my-class:Dedicated
astroctl infra k8s storage set production --clear

storage set replaces every binding with the set you pass, so a name left out is unbound: always pass the full set. class:kind names the kind for a class whose driver AstroPulse does not recognise. Every flag: astroctl infra k8s storage.

Settings​

NamenameRequired

The name workloads ask for.

Accepts
A lowercase DNS-1123 label, such as fast or local. Each name binds to one class.
StorageClassclassRequired

The cluster's StorageClass the name points at.

Kind of storagekind

What the class provides, for a driver AstroPulse does not recognise.

Accepts
  • Shared Shared Many nodes can use the same volume at the same time.
  • Dedicated Dedicated One node uses the volume at a time. Data is kept when the node is replaced.
  • Node Node-local The node's own disk. Data is lost when the node is removed.

If it's refused​

"storage binding "local" on cluster production is used by cost-visibility (prometheus.storage.name), so it cannot be unbound; change that setting to another name, or uninstall the add-on, first"
Cause
An installed add-on asks for this name. Repointing it says "so it cannot be pointed at another class" instead.
Fix
Change that add-on setting to another name, or uninstall the add-on, then unbind or repoint the name.
"this cluster's storage has not been observed yet, so a binding cannot be checked against the classes it has; wait for storage discovery and try again"
Cause
AstroPulse has not observed the cluster's StorageClasses yet. On a registered cluster, the agent may not be connected.
Fix
Wait for the first observation, then bind again.
"storage binding "fast" names StorageClass "gp4", which this cluster does not have. It has: …"
Cause
The class name is not one of the cluster's StorageClasses.
Fix
Pick one of the classes the message lists.

Next​