270 lines
11 KiB
Markdown
270 lines
11 KiB
Markdown
# Ondat Operator Helm Chart
|
||
|
||
> **Note**: This chart requires Helm 3 and defaults to StorageOS v2. To upgrade
|
||
> from a previous chart or from StorageOS version 1.x to 2.x, please contact
|
||
> support for assistance.
|
||
|
||
StorageOS is a cloud native, software-defined storage platform that transforms
|
||
commodity server or cloud based disk capacity into enterprise-class persistent
|
||
storage for containers. StorageOS volumes offer high throughput, low latency
|
||
and consistent performance, and are therefore ideal for deploying databases,
|
||
message queues, and other mission-critical stateful solutions. StorageOS
|
||
Project edition also offers ReadWriteMany volumes that are concurrently
|
||
accessible by multiple applications.
|
||
|
||
The Ondat Operator installs and manages StorageOS within a cluster. Cluster
|
||
nodes may contribute local or attached disk-based storage into a distributed
|
||
pool, which is then available to all cluster members via a global namespace.
|
||
|
||
Volumes are available across the cluster so if an application container gets
|
||
moved to another node it has immediate access to re-attach its data.
|
||
|
||
StorageOS is extremely lightweight - minimum requirements are a reserved CPU
|
||
core and 2GB of free memory. There are minimal external dependencies, and no
|
||
custom kernel modules.
|
||
|
||
After StorageOS is installed, please register for a free personal license to
|
||
enable 1TiB of capacity and HA with synchronous replication by following the
|
||
instructions [here](https://docs.ondat.io/docs/operations/licensing). For
|
||
additional capacity, features and support plans contact sales@ondat.io.
|
||
|
||
## Highlighted Features
|
||
|
||
* High Availability - synchronous replication insulates you from node failure.
|
||
* Delta Sync - replicas out of sync due to transient failures only transfer
|
||
changed blocks.
|
||
* Multiple AccessModes - dynamically provision ReadWriteOnce or ReadWriteMany
|
||
volumes.
|
||
* Rapid Failover - quickly detects node failure and automates recovery actions
|
||
without administrator intervention.
|
||
* Data Encryption - both in transit and at rest.
|
||
* Scalability - disaggregated consensus means no single scheduling point of
|
||
failure.
|
||
* Thin provisioning - only consume the space you need in a storage pool.
|
||
* Data reduction - transparent inline data compression to reduce the amount of
|
||
storage used in a backing store as well as reducing the network bandwidth
|
||
requirements for replication.
|
||
* Flexible configuration - all features can be enabled per volume, using PVC
|
||
and StorageClass labels.
|
||
* Multi-tenancy - fully supports standard Namespace and RBAC methods.
|
||
* Observability & instrumentation - Log streams for observability and
|
||
Prometheus support for instrumentation.
|
||
* Deployment flexibility - scale up or scale out storage based on application
|
||
requirements. Works with any infrastructure – on-premises, VM, bare metal
|
||
or cloud.
|
||
|
||
## About StorageOS
|
||
|
||
StorageOS is a software-defined cloud native storage platform delivering
|
||
persistent storage for Kubernetes. StorageOS is built from the ground-up with
|
||
no legacy restrictions to give enterprises working with cloud native workloads
|
||
a scalable storage platform with no compromise on performance, availability or
|
||
security. For additional information, visit www.ondat.io.
|
||
|
||
This chart installs a Ondat Cluster Operator which helps deploy and
|
||
configure a StorageOS cluster on kubernetes.
|
||
|
||
## Prerequisites
|
||
|
||
- Helm 3
|
||
- Kubernetes 1.18+
|
||
- Privileged mode containers (enabled by default)
|
||
- Etcd cluster
|
||
|
||
Refer to the [StorageOS prerequisites
|
||
docs](https://docs.ondat.io/docs/prerequisites/) for more information.
|
||
|
||
## Installing the chart
|
||
|
||
<!-- TODO: which URL should I use to refrence the chart? The below also
|
||
works at time of writing -->
|
||
|
||
```console
|
||
# Add ondat charts repo.
|
||
$ helm repo add ondat https://ondat.github.io/charts
|
||
# Install the chart in a namespace.
|
||
$ kubectl create namespace ondat-operator
|
||
$ helm install my-ondat ondat/ondat-operator \
|
||
--namespace ondat-operator \
|
||
--set cluster.kvBackend.address=<etcd-node-ip>:2379 \
|
||
--set cluster.admin.password=<password>
|
||
```
|
||
|
||
This will install the Ondat cluster operator in `ondat-operator`
|
||
namespace and deploys StorageOS with a minimal configuration. Etcd address
|
||
(kvBackend) and admin password are mandatory values to install the chart.
|
||
|
||
The password must be at least 8 characters long and the default username is
|
||
`storageos`, which can be changed like the above values. Find more information
|
||
about installing etcd in our [etcd
|
||
docs](https://docs.ondat.io/docs/prerequisites/etcd/).
|
||
|
||
To avoid passing the password as a flag, install the chart with the values file.
|
||
Create a values.yaml file and pass the file name with `--values` flag.
|
||
|
||
```yaml
|
||
cluster:
|
||
kvBackend:
|
||
address: <etcd-node-ip>:2379
|
||
admin:
|
||
password: <password>
|
||
```
|
||
|
||
```console
|
||
$ helm install ondat/ondat-operator \
|
||
--namespace ondat-operator \
|
||
--values <values-file>
|
||
```
|
||
> **Tip**: List all releases using `helm list -A`
|
||
|
||
## Creating a StorageOS cluster manually
|
||
|
||
The Helm chart supports a subset of StorageOSCluster custom resource parameters.
|
||
For advanced configurations, you may wish to create the cluster resource
|
||
manually and only use the Helm chart to install the Operator.
|
||
|
||
To disable auto-provisioning the cluster with the Helm chart, set
|
||
`cluster.create` to false:
|
||
|
||
```yaml
|
||
cluster:
|
||
...
|
||
create: false
|
||
```
|
||
|
||
Create a secret to store storageos cluster secrets:
|
||
|
||
```yaml
|
||
apiVersion: v1
|
||
kind: Secret
|
||
metadata:
|
||
name: "storageos-api"
|
||
namespace: <storageos-cluster-namespace>
|
||
labels:
|
||
app: "storageos"
|
||
type: "kubernetes.io/storageos"
|
||
data:
|
||
# echo -n '<secret>' | base64
|
||
username: c3RvcmFnZW9z
|
||
password: c3RvcmFnZW9z
|
||
```
|
||
|
||
Create a `StorageOSCluster` custom resource and refer the above secret in the
|
||
`secretRefName` field.
|
||
|
||
```yaml
|
||
apiVersion: "storageos.com/v1"
|
||
kind: "StorageOSCluster"
|
||
metadata:
|
||
name: "example-storageos"
|
||
namespace: <storageos-cluster-namespace>
|
||
spec:
|
||
secretRefName: "storageos-api"
|
||
kvBackend:
|
||
address: "etcd-client.etcd.svc.cluster.local:2379"
|
||
# address: '10.42.15.23:2379,10.42.12.22:2379,10.42.13.16:2379' # You can set ETCD server IPs.
|
||
storageClassName: "storageos"
|
||
```
|
||
|
||
<!--- TODO: replace this when an equivalent specification exsists for the new
|
||
operator, ticket has been created. Also replace in app-readme -->
|
||
Learn more about advanced configuration options
|
||
[here](https://github.com/storageos/cluster-operator/blob/master/README.md#storageoscluster-resource-configuration).
|
||
|
||
To check cluster status, run:
|
||
|
||
```console
|
||
$ kubectl get storageoscluster --namespace <storageos-cluster-namespace>
|
||
NAME READY STATUS AGE
|
||
example-storageos 3/3 Running 4m
|
||
```
|
||
|
||
All the events related to this cluster are logged as part of the cluster object
|
||
and can be viewed by describing the object.
|
||
|
||
```console
|
||
$ kubectl describe storageoscluster example-storageos --namespace <storageos-cluster-namespace>
|
||
Name: example-storageos
|
||
Namespace: default
|
||
Labels: <none>
|
||
...
|
||
...
|
||
Events:
|
||
Type Reason Age From Message
|
||
---- ------ ---- ---- -------
|
||
Warning ChangedStatus 1m (x2 over 1m) storageos-operator 0/3 StorageOS nodes are functional
|
||
Normal ChangedStatus 35s storageos-operator 3/3 StorageOS nodes are functional. Cluster healthy
|
||
```
|
||
|
||
## Configuration
|
||
|
||
The following tables lists the configurable parameters of the StorageOSCluster
|
||
Operator chart and their default values.
|
||
|
||
Parameter | Description | Default
|
||
--------- | ----------- | -------
|
||
`operator.image.repository` | StorageOS Operator container image repository | `storageos/operator`
|
||
`operator.image.tag` | StorageOS Operator container image tag | `v2.5.0`
|
||
`operator.image.pullPolicy` | StorageOS Operator container image pull policy | `IfNotPresent`
|
||
`cluster.create` | If true, auto-create the StorageOS cluster | `true`
|
||
`cluster.name` | Name of the storageos deployment | `storageos`
|
||
`cluster.namespace` | Namespace to install the StorageOS cluster into |
|
||
`storageos`
|
||
`cluster.secretRefName` | Name of the secret containing StorageOS API credentials | `storageos-api`
|
||
`cluster.admin.username` | Username to authenticate to the StorageOS API with | `storageos`
|
||
`cluster.admin.password` | Password to authenticate to the StorageOS API with |
|
||
`cluster.sharedDir` | The path shared into to kubelet container when running kubelet in a container |
|
||
`cluster.kvBackend.address` | List of etcd targets, in the form ip[:port], separated by commas |
|
||
`cluster.kvBackend.backend` | Key-Value store backend name | `etcd`
|
||
`cluster.kvBackend.tlsSecretName` | Name of the secret containing kv backend tls cert |
|
||
`cluster.kvBackend.tlsSecretNamespace` | Namespace of the secret containing kv backend tls cert |
|
||
`cluster.nodeSelectorTerm.key` | Key of the node selector term used for pod placement |
|
||
`cluster.nodeSelectorTerm.value` | Value of the node selector term used for pod placement |
|
||
`cluster.toleration.key` | Key of the pod toleration parameter |
|
||
`cluster.toleration.value` | Value of the pod toleration parameter |
|
||
`cluster.disableTelemetry` | If true, no telemetry data will be collected from the cluster | `false`
|
||
`cluster.storageClassName` | Name of the StorageClass to be created | `storageos`
|
||
`cluster.images.apiManager.repository` | StorageOS API Manager container image repository |
|
||
`cluster.images.apiManager.tag` | StorageOS API Manager container image tag |
|
||
`cluster.images.csiV1ExternalAttacherV3.repository` | CSI v1 External Attacher v3 image repository |
|
||
`cluster.images.csiV1ExternalAttacherV3.tag` | CSI v1 External Attacher v3 image tag |
|
||
`cluster.images.csiV1ExternalProvisioner.repository` | CSI v1 External Provisioner image repository |
|
||
`cluster.images.csiV1ExternalProvisioner.tag` | CSI v1 External Provisioner image tag |
|
||
`cluster.images.csiV1ExternalResizer.repository` | CSI v1 External Resizer image repository |
|
||
`cluster.images.csiV1ExternalResizer.tag` | CSI v1 External Resizer image tag |
|
||
`cluster.images.csiV1LivenessProbe.repository` | CSI v1 Liveness Probe image repository |
|
||
`cluster.images.csiV1LivenessProbe.tag` | CSI v1 Liveness Probe image tag |
|
||
`cluster.images.csiV1NodeDriverRegistrar.repository` | CSI v1 Node Driver Registrar image repository |
|
||
`cluster.images.csiV1NodeDriverRegistrar.tag` | CSI v1 Node Driver Registrar image tag |
|
||
`cluster.images.init.repository` | StorageOS init container image repository |
|
||
`cluster.images.init.tag` | StorageOS init container image tag |
|
||
`cluster.images.node.repository` | StorageOS Node container image repository |
|
||
`cluster.images.node.tag` | StorageOS Node container image tag |
|
||
|
||
## Deleting a StorageOS Cluster
|
||
|
||
Deleting the `StorageOSCluster` custom resource object would delete the
|
||
storageos cluster and its associated resources.
|
||
|
||
In the above example,
|
||
|
||
```console
|
||
$ kubectl delete storageoscluster example-storageos --namespace <storageos-cluster-namespace>
|
||
```
|
||
|
||
would delete the custom resource and the cluster.
|
||
|
||
## Uninstalling the Chart
|
||
|
||
To uninstall/delete the storageos cluster operator deployment:
|
||
|
||
```console
|
||
$ helm uninstall <release-name> --namespace ondat-operator
|
||
```
|
||
|
||
If the chart was installed with cluster auto-provisioning enabled, chart
|
||
uninstall will clean-up the installed StorageOS cluster resources as well.
|
||
|
||
Learn more about configuring the StorageOS Operator on
|
||
[GitHub](https://github.com/storageos/operator).
|