> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apinizer.com/llms.txt
> Use this file to discover all available pages before exploring further.

# System and Software Requirements

> Software requirements for the Apinizer platform to operate: supported operating systems, Kubernetes, MongoDB and Elasticsearch versions with critical configuration settings. Since Apinizer is a Kubernetes-based platform, installing all components in correct versions and appropriate configurations is of critical importance.

## Supported Operating Systems

Since Apinizer runs on Kubernetes, it supports Linux-based operating systems that support Kubernetes. Using modern and supported versions is recommended for production environments.

| Operating System                    | Supported Versions              | Recommended Version                              |
| ----------------------------------- | ------------------------------- | ------------------------------------------------ |
| **Red Hat Enterprise Linux (RHEL)** | 8.x, 9.x                        | 8.x or 9.x                                       |
| **Ubuntu**                          | 20.04 LTS, 22.04 LTS, 24.04 LTS | 22.04 LTS or 24.04 LTS                           |
| **Oracle Linux**                    | 8.x, 9.x                        | 8.x or 9.x                                       |
| **Rocky Linux**                     | 8.x, 9.x                        | 8.x or 9.x                                       |
| **CentOS**                          | 8.x                             | 8.x (EOL - migration to Rocky Linux recommended) |

<Warning>
  **Important**: RHEL 7.x and other older versions are no longer supported. **RHEL 8.x or 9.x**, **Oracle Linux 8.x or 9.x**, **Rocky Linux 8.x or 9.x** versions should be used for production environments.
</Warning>

<Info>
  **Note**: Since Apinizer runs on Kubernetes, other Linux distributions supporting Kubernetes can also be used (SUSE Linux Enterprise Server, Debian, etc.). However, official testing and support are provided for the operating systems specified above.
</Info>

## Kubernetes Requirements

### Supported Versions

Since Apinizer uses modern features of Kubernetes, minimum **Kubernetes 1.24** version is required. Older versions are not supported.

| Platform       | Minimum Version  | Recommended Version    | Notes                             |
| -------------- | ---------------- | ---------------------- | --------------------------------- |
| **Kubernetes** | 1.24+            | 1.28+ or latest stable | Minimum 1.24 is mandatory         |
| **OpenShift**  | 4.12+            | 4.14+                  | Based on Kubernetes 1.24+         |
| **Tanzu**      | v1.5+            | v1.6+                  | VMware Tanzu Kubernetes Grid      |
| **RKE2**       | 1.28+            | Latest version         | Rancher Kubernetes Engine 2       |
| **AKS**        | Kubernetes 1.24+ | Latest version         | Azure Kubernetes Service          |
| **EKS**        | Kubernetes 1.24+ | Latest version         | Amazon Elastic Kubernetes Service |
| **GKE**        | Kubernetes 1.24+ | Latest version         | Google Kubernetes Engine          |

<Warning>
  **Critical**: Versions older than Kubernetes 1.24 are not supported. Make sure your Kubernetes version is 1.24 or above before installation.
</Warning>

### Kubernetes Critical Settings

#### Container Runtime

Since Apinizer images are provided as rootless from DockerHub, the following container runtimes are supported:

* **containerd**: Recommended (standard runtime for Kubernetes 1.24+)
* **CRI-O**: Supported (Kubernetes 1.24+)
* **Docker**: Deprecated for Kubernetes 1.24+ - should not be used

<Info>
  **Note**: Docker runtime support has been removed in Kubernetes 1.24 and above versions. **containerd** or **CRI-O** should be used in production environments.
</Info>

#### Required Kubernetes Features

* **Namespace support**: Apinizer components run within namespaces
* **RBAC**: Role-Based Access Control must be active
* **Network Policies**: Optional, recommended for security
* **Storage Classes**: Required for Persistent Volumes
* **Ingress Controller**: For external access (Nginx, Traefik, etc.)

#### Important Configurations

**Kubelet Settings:**

```yaml theme={null}
# /var/lib/kubelet/config.yaml
maxPods: 110
podPidsLimit: 4096
```

**API Server Settings:**

```yaml theme={null}
# /etc/kubernetes/manifests/kube-apiserver.yaml
--max-requests-inflight=400
--max-mutating-requests-inflight=200
```

<Info>
  For detailed Kubernetes installation steps and system configuration (kernel settings, network settings, time synchronization), you can refer to the [Pre-Installation Recommendations](/en/concepts/deployment/pre-installation-recommendations) and [Kubernetes Installation](/en/setup/kubernetes/version-management-with-argocd) pages.
</Info>

## MongoDB Requirements

### Supported Versions

| Version         | Status    | Recommended |
| --------------- | --------- | ----------- |
| **MongoDB 4.4** | Supported | ✓           |
| **MongoDB 5.0** | Supported | ✓✓          |
| **MongoDB 6.0** | Supported | ✓✓          |
| **MongoDB 7.0** | Supported | ✓✓          |

<Warning>
  **Critical**: MongoDB must be configured as a **Replica Set**. Even for a single node, it must be installed as a replica set. Standalone instance should not be used.
</Warning>

### MongoDB Critical Settings

#### Replica Set Configuration

**Mandatory**: MongoDB must be installed as a Replica Set. Replica set configuration is required even for a single node.

**Example Replica Set Configuration:**

```javascript theme={null}
// MongoDB Replica Set initialization
rs.initiate({
  _id: "apinizer-rs",
  members: [
    { _id: 0, host: "mongodb-0:25080" },
    { _id: 1, host: "mongodb-1:25080" },
    { _id: 2, host: "mongodb-2:25080" }
  ]
})
```

#### Important MongoDB Settings

**Critical Configuration Requirements:**

* **Replica Set**: Must be configured as a replica set (even for a single node)
* **WiredTiger Storage Engine**: Recommended storage engine
* **Cache Size**: 50% of RAM is recommended (max 32GB)
* **Replication**: Replica set name must be configured

<Info>
  For detailed MongoDB installation steps and configuration examples, you can refer to the [MongoDB Installation](/en/setup/mongodb/rhel-mongodb) pages.
</Info>

## Elasticsearch Requirements

| Version                            | Status                 | Notes                                     |
| ---------------------------------- | ---------------------- | ----------------------------------------- |
| **Elasticsearch 7.9.2**            | Supported              | Minimum supported version                 |
| **Elasticsearch 8.17.10**          | Officially Recommended | ✓✓ Recommended version                    |
| **Elasticsearch 8.x (\< 8.17.10)** | Tested                 | No official support, can be used          |
| **Elasticsearch 8.x (> 8.17.10)**  | Not Recommended        | Not recommended as it has not been tested |

### Elasticsearch Critical Settings

#### Cluster Configuration

**Minimum Configuration:**

* **Node Count**: Minimum 1 node
* **Shard Count**: 1-5 shards per index (depending on data volume)
* **Replica Count**: Minimum 0 (for single node)

<Warning>
  **For Production Environments**: **High Availability (HA) Elasticsearch architecture** should be used for high availability (HA) in production environments.
</Warning>

**High Availability (HA) Configuration (Recommended):**

* **Node Count**: Minimum 3 nodes (Master + Data + Ingest roles)
* **Master Node Count**: Must be odd number (3, 5, 7, etc.) - to prevent split-brain
* **Shard Count**: 1-5 shards per index (depending on data volume)
* **Replica Count**: Minimum 1 (for high availability)
* **Dedicated Master Node**: Recommended for large clusters (3 dedicated master nodes)

#### Important Elasticsearch Settings

**Critical Configuration Requirements:**

* **Cluster Name**: Cluster name must be configured
* **JVM Heap Size**: 50% of RAM is recommended (maximum 32GB)
* **Index Lifecycle Management (ILM)**: Must be active
* **Discovery**: Single-node or cluster discovery must be configured
* **Network**: HTTP port (9200) and transport port (9300) must be configured

<Info>
  For detailed Elasticsearch installation steps, configuration examples, and ILM policies, you can refer to the [Elasticsearch Installation](/en/setup/elasticsearch/simple-authentication) pages. For system configuration (kernel settings, network settings, time synchronization), you can refer to the [Pre-Installation Recommendations](/en/concepts/deployment/pre-installation-recommendations) page.
</Info>
