# Pre-requisites

This document describes the pre-requisites to deploy Self-Hosted version of <code class="expression">space.vars.product\_name</code>.

Following table provides the recommended number of servers you should allocate to run your Self-Hosted <code class="expression">space.vars.product\_name</code> Instance.

### Management Cluster

As part of the installation process, the Self-Hosted version of <code class="expression">space.vars.product\_name</code> creates a **Kubernetes cluster** using the physical servers that you use to deploy it on. We refer to this cluster as the **management cluster**. The <code class="expression">space.vars.product\_name</code> management plane then runs as a set of Kubernetes pods and services on this management cluster.

Following is the recommended capacity for the management cluster, based on the projected scale of your <code class="expression">space.vars.product\_name</code> deployment.

| **Hypervisors You Plan to Use**       | **Minimum Management Cluster Capacity**                                                                                                              | **Recommended Management Cluster Capacity**                                                                                                        |
| ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p>Small<br><br>(<20 hosts)</p>       | <p>3 servers, each with:<br><br>12 vCPUs, 24GB RAM and 250GB SSD</p>                                                                                 | <p>4 servers, each with:<br><br>16 vCPUs, 32GB RAM and 500GB SSD</p>                                                                               |
| <p>Growth<br><br>(<100 hosts)</p>     | <p>3 servers, each with:<br><br>16 vCPUs, 32GB RAM and 500GB SSD</p>                                                                                 | <p>5 servers, each with:<br><br>16 vCPUs, 32GB RAM and 1TB SSD</p>                                                                                 |
| <p>Enterprise<br><br>(>100 hosts)</p> | <p>5 servers, each with:<br><br>16 vCPUs, 32GB RAM and 1TB SSD<br><br>1 additional server for every 100 workload servers or 10 workload clusters</p> | <p>6 servers, each with:<br><br>24 vCPUs, 32GB RAM and 1TB SSD<br><br>1 additional server for every 50 workload servers or 5 workload clusters</p> |

### Server Configuration

Each physical server that you use to run as part of the management cluster should meet following requirements:

**Operating System**: Ubuntu 22.04

**Swap config:**

* Make sure that each server has swap disabled. You can run the following command to do this.

{% tabs %}
{% tab title="Bash" %}

```bash
swapoff -a
```

{% endtab %}
{% endtabs %}

**IPv6 support:**

Ensure the below sysctl setting is set to 0, so that IPv6 support is enabled on the server.

{% tabs %}
{% tab title="Bash" %}

```bash
sysctl net.ipv6.conf.all.disable_ipv6
# If currently set to 1, change it to 0 as below:
echo net.ipv6.conf.all.disable_ipv6=0 >> /etc/sysctl.conf
sysctl -p
```

{% endtab %}
{% endtabs %}

**Passwordless Sudo:**

* Many operations require sudo access (for example, the installation of yum repos, docker etc.). Please ensure that your server has passwordless sudo enabled.

**Kernel Panic Option**

Update the server configuration section to include a step for setting `kernel.panic=10`

{% tabs %}
{% tab title="YAML" %}

```yaml
echo "kernel.panic=10" >> /etc/sysctl.conf && sysctl -p
```

{% endtab %}
{% endtabs %}

**SSH Keys:**

* We rely on ssh to login to the management cluster hosts, and to install various components and manage them.
* Please generate ssh keys and sync them across all hosts of the management cluster.
* We recommend generating the key pair on one host and then adding the public key to all other hosts in their `~/.ssh/authorized_keys` file. This will enable every host in the management cluster to ssh into every other host.

{% tabs %}
{% tab title="Bash" %}

```bash
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh-copy-id -i ~/.ssh/id_rsa.pub root@test-3
```

{% endtab %}
{% endtabs %}

**Package Updates:**

* Install `cgroup-tools` :

{% tabs %}
{% tab title="Bash" %}

```bash
apt-get update -y && apt-get install cgroup-tools -y
```

{% endtab %}
{% endtabs %}

* Download and Update OpenSSL Version to 3.0.7 for Ubuntu 22.04:

{% tabs %}
{% tab title="Bash" %}

```bash
curl --user-agent "<YOUR-USER-AGENT-KEY>" https://pf9-airctl.s3-accelerate.amazonaws.com/openssl-smcp-ubuntu/openssl_3.0.7-1_amd64.deb --output openssl_3.0.7-1_amd64.deb
sudo dpkg -i openssl_3.0.7-1_amd64.deb
cd /etc/ld.so.conf.d/
echo "/usr/local/ssl/lib64" > openssl-3.0.7.conf
ldconfig -v
sed -i 's/\(^PATH="[^"]*\)"/\1:\/usr\/local\/ssl\/bin"/' /etc/environment
source /etc/environment
ln -sf /usr/local/ssl/bin/openssl /usr/bin/openssl
cd
```

{% endtab %}
{% endtabs %}

* Verify OpenSSL Version

{% tabs %}
{% tab title="Bash" %}

```bash
openssl version
```

{% endtab %}
{% endtabs %}

**User Agent Key For Installation:**

You will need a specific Platform9 user agent key for installation of your self-hosted management plane. Your Platform9 sales engineer will share the key with you prior to the install.

### Networking

You will need 2 virtual IPs that are on the same L2 domain as the hosts in the management cluster.

* VIP #1: This is the IP where you can access the <code class="expression">space.vars.product\_name</code> management plane UI.
* VIP #2: This is used to serve the management Kubernetes cluster's API server.

### Storage

For a production setup of <code class="expression">space.vars.self\_hosted\_product\_name</code>, you will need a Kubernetes Container Strorage Interface (CSI) compatible storage for persisting the state of the management cluster. Read more about [CSI and Kubernetes Storage here](https://kubernetes.io/docs/concepts/storage/volumes/).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.platform9.com/private-cloud-director/2025.4/getting-started/self-hosted/self-hosted-pre-requisites.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
