# Cluster prerequisites

## Kubernetes cluster requirements <a href="#kubernetes-cluster-requirements" id="kubernetes-cluster-requirements"></a>

1. **Storage requirements**
   * A Kubernetes storage volume with CSI Driver support.
2. **Load Balancer configuration**
   * Should support the **TLS 1.3** protocol and higher.
   * ALPN policy for the TLS:443 listener should be set to **HTTP2Optional**.
   * Should support **HTTP2** and have **port 443** open.
   * AWS-specific implementation:
     * The security policy for the TLS:443 listener should be **ELBSecurityPolicy-TLS13-1-2-2021-06**.
3. **DNS configuration**
   * The domain name and namespace (where the provisioner will be installed) should not contain digits.
   * Final domain URL structure: `<namespace_name>.<suffix_url>` .
   * Service-specific URL patterns:
     * API: `api-<namespace_name>.<suffix_url>`&#x20;
     * MinIO: `minio-<namespace_name>.<suffix_url>`&#x20;
     * Zitadel: `zitadel-<namespace_name>.<suffix_url>`&#x20;

{% hint style="info" %}
These DNS records should point to the cluster Load Balancer.
{% endhint %}

4. **Storage configuration**

* A default StorageClass should be configured.

{% hint style="info" %}
**Configuration example**:

```yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ebs-sc
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
  type: gp3
  encrypted: "true"
```

{% endhint %}

## Client software requirements <a href="#client-software-requirements" id="client-software-requirements"></a>

The following tools need to be installed on the system used to communicate with and install the provisioner:

1. **kubectl** - command-line tool for interaction with Kubernetes clusters

{% embed url="<https://kubernetes.io/docs/reference/kubectl>" %}

2. Kubernetes version compatibility: **1.30 and above**.

## Persistent storage requirements

Persistent storage is required for stateful platform components, such as databases and internal stateful services. To enable dynamic provisioning and ensure data durability across pod restarts or failures, a CSI (Container Storage Interface) compatible storage solution must be available and properly configured in your Kubernetes cluster.&#x20;

Ensure that your cluster has a functioning default StorageClass and access to underlying storage that meets your environment's performance and durability needs.

## Verifying Prerequisites

1. Ensure your Load Balancer is configured properly.
2. Ensure DNS records are properly connected to your Load Balancer.
