Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 20 additions & 41 deletions content/en/docs/v0/install/resource-planning.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,58 +7,37 @@ aliases:
- /docs/install/resource-planning
---

## System Resource Planning Recommendations

How much system resources to allocate per node depending on cluster scale.

These recommendations are based on real-world usage cases from production deployments. While workloads vary across different environments, these calculations should provide reasonably accurate estimates for planning purposes.
This guide helps you plan system resource allocation per node based on cluster size and tenant count. Recommendations are based on production deployments and provide reasonably accurate estimates for planning purposes.

{{% alert color="warning" %}}
**Important:** All values on this page show only the resources that need to be reserved for system components. They do not include resources for running tenant workloads (applications, databases, Kubernetes clusters, VMs, etc.). When planning your infrastructure, add the resources required for tenant workloads on top of these system resource requirements.
**Important:** Values shown are only for system components. Add your tenant workload requirements (applications, databases, Kubernetes clusters, VMs, etc.) on top of these.
{{% /alert %}}

### Simple Recommendations

**Basic recommendation**: Allocate at least **2 CPU cores** and **5 GB memory** per node for system components.

Scale Dependency:

**By number of nodes:**
- Small cluster (3-5 nodes): ~2 CPU cores, ~6 GB memory per node
- Medium cluster (6-10 nodes): ~3 CPU cores, ~7 GB memory per node
- Large cluster (10+ nodes): ~3 CPU cores, ~9 GB memory per node

**Important considerations:**
- System resource consumption may increase as the number of tenants and services within them grows. Each tenant adds load to system components (monitoring, logging, network policies, etc.).
- With a large number of tenants, increase the basic recommendation by **50-100% for CPU** and **100-300% for memory** depending on usage intensity.
- While operators managing these services run in a single instance, the overall system load increases with the number of tenants and workloads. More tenants mean more objects to monitor, more network policies to enforce, and more logs to collect and process.
**Quick start**: Allocate at least **2 CPU cores** and **6 GB RAM** per node for system components. For precise requirements based on your cluster size and tenant count, use the table or calculator below.

**Dependency on number of tenants:**
**Note on allocation**: These values represent expected consumption during normal operation, not hard resource reservations. Kubernetes dynamically schedules workloads, and system components will consume approximately these amounts while remaining capacity stays available for tenant workloads.

The requirements vary based on the number of tenants in your cluster. Use the table below to find the exact values for your specific cluster size and tenant count combination.
## Resource Requirements

**Note:** The values provided are baseline. Actual consumption may vary depending on the number of services within tenants and their usage intensity. With a large number of active services in tenants (e.g., 5+ services per tenant), use the next category by number of tenants.
Requirements depend on both cluster size (number of nodes) and number of tenants. With many active services per tenant (5+), consider using values from the next tenant category.

#### What to do:
| Cluster Size | Nodes | Up to 5 tenants | 6-14 tenants | 15-30 tenants | 31+ tenants |
|--------------|-------|-----------------|---------------|---------------|-------------|
| **Small** | 3-5 | CPU: 2 cores<br>RAM: 6 GB | CPU: 2 cores<br>RAM: 6 GB | CPU: 3 cores<br>RAM: 10 GB | CPU: 3 cores<br>RAM: 15 GB |
| **Medium** | 6-10 | CPU: 3 cores<br>RAM: 7 GB | CPU: 3 cores<br>RAM: 7 GB | CPU: 3 cores<br>RAM: 12 GB | CPU: 4 cores<br>RAM: 18 GB |
| **Large** | 11+ | CPU: 3 cores<br>RAM: 9 GB | CPU: 3 cores<br>RAM: 10 GB | CPU: 4 cores<br>RAM: 15 GB | CPU: 4 cores<br>RAM: 22 GB |

1. **Usage**: Monitor actual resource usage and adjust as needed
2. **Reserve**: Plan for 20-30% growth when planning
3. **Monitoring**: Regularly check actual system resource consumption
4. **Tenant consideration**: Use the table above to select appropriate values based on the number of tenants
**Planning tips:**
- Monitor actual resource consumption and adjust as needed
- Plan for 20-30% growth buffer
- With high tenant activity, consider increasing CPU by 50-100% and memory by 100-300%

### Resource Requirements Table
### Calculate Your Requirements

The table below shows CPU cores and memory (RAM) requirements per node. Rows represent cluster size (number of nodes), columns represent number of tenants. Each cell shows the recommended values on separate lines.
Use the calculator below to find requirements for your specific configuration:

| Cluster Size | Number of Nodes | Up to 5 tenants | 6-14 tenants | 15-30 tenants | 30+ tenants |
|--------------|-----------------|-----------------|---------------|---------------|-------------|
| Small | 3-5 | CPU: 2 cores<br>RAM: 6 GB | CPU: 2 cores<br>RAM: 6 GB | CPU: 3 cores<br>RAM: 10 GB | CPU: 3 cores<br>RAM: 15 GB |
| Medium | 6-10 | CPU: 3 cores<br>RAM: 7 GB | CPU: 3 cores<br>RAM: 7 GB | CPU: 3 cores<br>RAM: 12 GB | CPU: 4 cores<br>RAM: 18 GB |
| Large | 10+ | CPU: 3 cores<br>RAM: 9 GB | CPU: 3 cores<br>RAM: 10 GB | CPU: 4 cores<br>RAM: 15 GB | CPU: 4 cores<br>RAM: 22 GB |
{{< system-resource-calculator >}}

**Calculation examples:**
- Cluster with 5 nodes and 3 tenants: **2 CPU cores**, **6 GB memory** per node (Small cluster, Up to 5 tenants)
- Cluster with 5 nodes and 10 tenants: **2 CPU cores**, **6 GB memory** per node (Small cluster, 6-14 tenants)
- Cluster with 6 nodes and 25 tenants: **3 CPU cores**, **12 GB memory** per node (Medium cluster, 15-30 tenants)
- Cluster with 6 nodes and 40 tenants: **4 CPU cores**, **18 GB memory** per node (Medium cluster, 30+ tenants)
### Why Resource Requirements Scale

System resource consumption increases with cluster size and tenant count because system components must handle more Kubernetes objects to monitor, more network policies to enforce, and more logs to collect and process.
61 changes: 20 additions & 41 deletions content/en/docs/v1/install/resource-planning.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,58 +5,37 @@ description: "How much system resources to allocate per node depending on cluste
weight: 6
---

## System Resource Planning Recommendations

How much system resources to allocate per node depending on cluster scale.

These recommendations are based on real-world usage cases from production deployments. While workloads vary across different environments, these calculations should provide reasonably accurate estimates for planning purposes.
This guide helps you plan system resource allocation per node based on cluster size and tenant count. Recommendations are based on production deployments and provide reasonably accurate estimates for planning purposes.

{{% alert color="warning" %}}
**Important:** All values on this page show only the resources that need to be reserved for system components. They do not include resources for running tenant workloads (applications, databases, Kubernetes clusters, VMs, etc.). When planning your infrastructure, add the resources required for tenant workloads on top of these system resource requirements.
**Important:** Values shown are only for system components. Add your tenant workload requirements (applications, databases, Kubernetes clusters, VMs, etc.) on top of these.
{{% /alert %}}

### Simple Recommendations

**Basic recommendation**: Allocate at least **2 CPU cores** and **5 GB memory** per node for system components.

Scale Dependency:

**By number of nodes:**
- Small cluster (3-5 nodes): ~2 CPU cores, ~6 GB memory per node
- Medium cluster (6-10 nodes): ~3 CPU cores, ~7 GB memory per node
- Large cluster (10+ nodes): ~3 CPU cores, ~9 GB memory per node

**Important considerations:**
- System resource consumption may increase as the number of tenants and services within them grows. Each tenant adds load to system components (monitoring, logging, network policies, etc.).
- With a large number of tenants, increase the basic recommendation by **50-100% for CPU** and **100-300% for memory** depending on usage intensity.
- While operators managing these services run in a single instance, the overall system load increases with the number of tenants and workloads. More tenants mean more objects to monitor, more network policies to enforce, and more logs to collect and process.
**Quick start**: Allocate at least **2 CPU cores** and **6 GB RAM** per node for system components. For precise requirements based on your cluster size and tenant count, use the table or calculator below.

**Dependency on number of tenants:**
**Note on allocation**: These values represent expected consumption during normal operation, not hard resource reservations. Kubernetes dynamically schedules workloads, and system components will consume approximately these amounts while remaining capacity stays available for tenant workloads.

The requirements vary based on the number of tenants in your cluster. Use the table below to find the exact values for your specific cluster size and tenant count combination.
## Resource Requirements

**Note:** The values provided are baseline. Actual consumption may vary depending on the number of services within tenants and their usage intensity. With a large number of active services in tenants (e.g., 5+ services per tenant), use the next category by number of tenants.
Requirements depend on both cluster size (number of nodes) and number of tenants. With many active services per tenant (5+), consider using values from the next tenant category.

#### What to do:
| Cluster Size | Nodes | Up to 5 tenants | 6-14 tenants | 15-30 tenants | 31+ tenants |
|--------------|-------|-----------------|---------------|---------------|-------------|
| **Small** | 3-5 | CPU: 2 cores<br>RAM: 6 GB | CPU: 2 cores<br>RAM: 6 GB | CPU: 3 cores<br>RAM: 10 GB | CPU: 3 cores<br>RAM: 15 GB |
| **Medium** | 6-10 | CPU: 3 cores<br>RAM: 7 GB | CPU: 3 cores<br>RAM: 7 GB | CPU: 3 cores<br>RAM: 12 GB | CPU: 4 cores<br>RAM: 18 GB |
| **Large** | 11+ | CPU: 3 cores<br>RAM: 9 GB | CPU: 3 cores<br>RAM: 10 GB | CPU: 4 cores<br>RAM: 15 GB | CPU: 4 cores<br>RAM: 22 GB |

1. **Usage**: Monitor actual resource usage and adjust as needed
2. **Reserve**: Plan for 20-30% growth when planning
3. **Monitoring**: Regularly check actual system resource consumption
4. **Tenant consideration**: Use the table above to select appropriate values based on the number of tenants
**Planning tips:**
- Monitor actual resource consumption and adjust as needed
- Plan for 20-30% growth buffer
- With high tenant activity, consider increasing CPU by 50-100% and memory by 100-300%

### Resource Requirements Table
### Calculate Your Requirements

The table below shows CPU cores and memory (RAM) requirements per node. Rows represent cluster size (number of nodes), columns represent number of tenants. Each cell shows the recommended values on separate lines.
Use the calculator below to find requirements for your specific configuration:

| Cluster Size | Number of Nodes | Up to 5 tenants | 6-14 tenants | 15-30 tenants | 30+ tenants |
|--------------|-----------------|-----------------|---------------|---------------|-------------|
| Small | 3-5 | CPU: 2 cores<br>RAM: 6 GB | CPU: 2 cores<br>RAM: 6 GB | CPU: 3 cores<br>RAM: 10 GB | CPU: 3 cores<br>RAM: 15 GB |
| Medium | 6-10 | CPU: 3 cores<br>RAM: 7 GB | CPU: 3 cores<br>RAM: 7 GB | CPU: 3 cores<br>RAM: 12 GB | CPU: 4 cores<br>RAM: 18 GB |
| Large | 10+ | CPU: 3 cores<br>RAM: 9 GB | CPU: 3 cores<br>RAM: 10 GB | CPU: 4 cores<br>RAM: 15 GB | CPU: 4 cores<br>RAM: 22 GB |
{{< system-resource-calculator >}}

**Calculation examples:**
- Cluster with 5 nodes and 3 tenants: **2 CPU cores**, **6 GB memory** per node (Small cluster, Up to 5 tenants)
- Cluster with 5 nodes and 10 tenants: **2 CPU cores**, **6 GB memory** per node (Small cluster, 6-14 tenants)
- Cluster with 6 nodes and 25 tenants: **3 CPU cores**, **12 GB memory** per node (Medium cluster, 15-30 tenants)
- Cluster with 6 nodes and 40 tenants: **4 CPU cores**, **18 GB memory** per node (Medium cluster, 30+ tenants)
### Why Resource Requirements Scale

System resource consumption increases with cluster size and tenant count because system components must handle more Kubernetes objects to monitor, more network policies to enforce, and more logs to collect and process.
204 changes: 204 additions & 0 deletions layouts/shortcodes/system-resource-calculator.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
{{ $_hugo_config := `{ "version": 1 }` }}
<div class="resource-calculator">
<div class="calculator-card">
<div class="calculator-inputs">
<div class="input-group">
<label for="nodes-slider">
<span class="label-text">Nodes:</span>
<span class="label-value" id="nodes-value">5</span>
</label>
<input type="range" id="nodes-slider" min="3" max="15" value="5" step="1">
</div>

<div class="input-group">
<label for="tenants-slider">
<span class="label-text">Tenants:</span>
<span class="label-value" id="tenants-value">5</span>
</label>
<input type="range" id="tenants-slider" min="1" max="40" value="5" step="1">
</div>
</div>

<div class="calculator-results">
<div class="result-item">
<div class="result-label">CPU per Node</div>
<div class="result-value" id="cpu-result">2 cores</div>
</div>
<div class="result-item">
<div class="result-label">RAM per Node</div>
<div class="result-value" id="ram-result">6 GB</div>
</div>
</div>
</div>
</div>

<style>
.resource-calculator {
margin: 2rem 0;
}

.calculator-card {
background: #f8f9fa;
border: 1px solid #dee2e6;
border-radius: 8px;
padding: 1.5rem;
}

.calculator-inputs {
margin-bottom: 1.5rem;
}

.input-group {
margin-bottom: 1.5rem;
}

.input-group label {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 0.5rem;
font-weight: 500;
}

.label-text {
color: #495057;
}

.label-value {
background: #007bff;
color: white;
padding: 0.25rem 0.75rem;
border-radius: 12px;
font-weight: 600;
min-width: 3rem;
text-align: center;
margin-left: 1rem;
}

.input-group input[type="range"] {
width: 100%;
height: 6px;
background: #dee2e6;
border-radius: 3px;
outline: none;
-webkit-appearance: none;
}

.input-group input[type="range"]::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 18px;
height: 18px;
background: #007bff;
cursor: pointer;
border-radius: 50%;
}

.input-group input[type="range"]::-moz-range-thumb {
width: 18px;
height: 18px;
background: #007bff;
cursor: pointer;
border-radius: 50%;
border: none;
}

.calculator-results {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 0.75rem;
max-width: 400px;
margin: 0 auto;
}

.result-item {
background: white;
border: 2px solid #28a745;
border-radius: 6px;
padding: 0.75rem;
text-align: center;
}

.result-label {
font-size: 0.875rem;
color: #6c757d;
margin-bottom: 0.5rem;
}

.result-value {
font-size: 1.5rem;
font-weight: 700;
color: #28a745;
}

@media (max-width: 576px) {
.calculator-results {
grid-template-columns: 1fr;
}
}
</style>

<script>
(function() {
// Resource requirements table data
const resourceTable = {
small: { // 3-5 nodes
'0-5': { cpu: 2, ram: 6 },
'6-14': { cpu: 2, ram: 6 },
'15-30': { cpu: 3, ram: 10 },
'30+': { cpu: 3, ram: 15 }
},
medium: { // 6-10 nodes
'0-5': { cpu: 3, ram: 7 },
'6-14': { cpu: 3, ram: 7 },
'15-30': { cpu: 3, ram: 12 },
'30+': { cpu: 4, ram: 18 }
},
large: { // 10+ nodes
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Comment says "10+" but the logic maps 11+ to large.

The getClusterSize function (line 167) returns 'medium' for nodes 6–10 and 'large' for 11+. The comment on this line should say // 11+ nodes to match the code and the markdown tables.

-    large: {  // 10+ nodes
+    large: {  // 11+ nodes
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
large: { // 10+ nodes
large: { // 11+ nodes
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@layouts/shortcodes/system-resource-calculator.html` at line 157, The inline
comment next to the "large" mapping is incorrect: update the comment above the
mapping in the system-resource-calculator shortcode so it matches
getClusterSize's logic (which treats 11+ nodes as large). Locate the "large:"
mapping and change its comment from "// 10+ nodes" to "// 11+ nodes" so it
aligns with the getClusterSize function and the markdown tables.

'0-5': { cpu: 3, ram: 9 },
'6-14': { cpu: 3, ram: 10 },
'15-30': { cpu: 4, ram: 15 },
'30+': { cpu: 4, ram: 22 }
}
};

function getClusterSize(nodes) {
if (nodes >= 3 && nodes <= 5) return 'small';
if (nodes >= 6 && nodes <= 10) return 'medium';
return 'large';
}

function getTenantRange(tenants) {
if (tenants <= 5) return '0-5';
if (tenants <= 14) return '6-14';
if (tenants <= 30) return '15-30';
return '30+';
}

function calculateResources(nodes, tenants) {
const clusterSize = getClusterSize(nodes);
const tenantRange = getTenantRange(tenants);
return resourceTable[clusterSize][tenantRange];
}

function updateResults() {
const nodes = parseInt(document.getElementById('nodes-slider').value);
const tenants = parseInt(document.getElementById('tenants-slider').value);

document.getElementById('nodes-value').textContent = nodes;
document.getElementById('tenants-value').textContent = tenants;

const resources = calculateResources(nodes, tenants);

document.getElementById('cpu-result').textContent = resources.cpu + ' cores';
document.getElementById('ram-result').textContent = resources.ram + ' GB';
}

// Initialize
document.getElementById('nodes-slider').addEventListener('input', updateResults);
document.getElementById('tenants-slider').addEventListener('input', updateResults);

// Initial calculation
updateResults();
})();
</script>