-
Notifications
You must be signed in to change notification settings - Fork 35
Storage Class Requirements
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.
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.
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.
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.
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