Skip to content

Storage Class Requirements

Jason Shaw edited this page Aug 10, 2023 · 20 revisions

Storage Class Requirements and PVs

The Turbonomic platform will leverage Persistent Volumes to store logs, certificates, tokens and some data for some of the services, and will dynamically provision storage using Persistent Volume Claims to create PVs from the cluster's default storage class. This article provides more details on storage requirements.

Volume Binding Mode and Reclaim Policies

To support pods with multiple PVs, especially where your nodes are spread across multiple AZs or regions, your storage class should use a volume binding mode of WaitForFirstConsumer. This sample storage class shows the minimum requirements that should be part of the default storage class in the cluster, or create a new one and specify this in the Turbonomic CR. Use a SC that reflects your cluster’s Storage Provisioner.

Best Practices: The Turbonomic platform relies on some data stored in PVs that are important to retain target, licensing and historical data association. Minimally you can leverage the reclaimPolicy option of Retain in the Storage Class. The PVs associated with the following PVCs are ones that should also be backed up to ensure recovery in case of a loss of the server: api, api-certs, auth, and consul-data. Volume backup strategy is important. If running a containerized DB for Turbo and/or the Embedded Reporting feature, include these PVs to preserve: db-data, data-timescaledb-0. Also use a SC that allows for volume expansion (allowVolumeExpansion) for the DB PVs.

Recommended properties for a StorageClass. Follow instructions for the storage provisioner you are using.

  • Use a dynamic storage provisioner (Turbonomic will create PVCs)
  • Allow Volume Expansion (set to True)
  • Reclaim Policy set to Retain
  • Set volumeBindingMode to WaitForFirstConsumer
  • Encryption is supported
  • Consider if you want to use storage that is multi-zoned, but the cost may be more.

Specifying a non default SC

The Turbonomic deployment will use the cluster's default storage class if one is defined. If you wish to use a non-default SC, then you must specify the name of this SC in the Turbonomic CR yaml and apply. Example shown below - see line "21":

 18   global:
 19     repository: icr.io/cpopen/turbonomic
 20     tag: 8.9.5
 21     storageClassName: {yourStorageClass}
 22     externalDbIP: 10.97.96.3
 23     pullPolicy: Always

Note, if you wish to reconfigure an existing Turbonomic deployment to use a different SC, you will need to recreate the PVCs which will delete the PVs created with the original SC. Contact Turbonomic Support for assistance if you need to retain data on the original PVs.

NFS and Static Storage Providers

Turbonomic does support working with kubernetes clusters that do not have a dynamic storage provisioner. The steps would involve pre-creating the Persistent Volumes, and then creating a storage class with "No Provisioner" provisioner parameter. This custom storage class will be provided to the Turbonomic Custom Resource (see Specifying a non default SC). Contact Turbonomic Support for more information and sample yamls for the storage class and PVs.

Persistent Volumes

The following table describes the PVC resources and default configurations.

Component Persistent Volume Claim Size in Gi (default) Notes
api api 1
api api-certs 1
arangodb arangodb 100 not used in Turbo v8.0.4+
arangodb arangodb-apps 2 not used in Turbo v8.0.4+
arangodb arangodb-dump 2 not used in Turbo v8.0.4+
auth auth 1
consul consul-data 1
db db-data 500 not required when using External DB Server or Service
kafka kafka-log 50
prometheus prometheus-server 8
redis (suspend) redis-data-redis-master-0 4 Parking Feature
rsyslog rsyslog-auditlogdata 30
rsyslog rsyslog-syslogdata 30
topology-processor topology-processor 3
zookeeper zookeeper-data 3
timescaledb data-timescaledb-0 125 only if embedded reporting enabled. Specify new value {spec:{postgresql:{persistence:{size: value Gib}}}}

If you want to deploy with a different size for the volume, you can specify this in the Custom Resource yaml. You must combine these settings with any other properties specified. See the example below for db where we are modifying the PVC size and Mem Limits:

  db:
    resources:
      limits:
        memory: 16Gi
    persistence:
      size: 500Gi

NOTE: the only components for which you can change storage size are:

  • db
  • consul
  • kafka
  • rsyslog
  • timescaledb/postgresql for embedded reporting
  • if deployed: influxdb and arangodb