> For the complete documentation index, see [llms.txt](https://docs.cloudeka.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.cloudeka.ai/guidance-for-enterprise/service-limit/troubleshooting.md).

# Troubleshooting

When the platform rejects a `kubectl apply`/`create`, the error is returned **immediately** in your terminal (or CI/CD output) — the object is never created. This page maps the messages and error codes you'll see to their cause and fix.

{% hint style="info" %}
If a message here doesn't match what you got exactly, run the same command with `-v=6` for the raw API response, or `kubectl describe` the nearest related object (e.g. your `rquota`) for more context. Include the error code when contacting platform support — it pinpoints the exact check that failed.
{% endhint %}

## Pods

The **Pods** section includes several codes, as follows:

### Code: `POD6011`

<table><thead><tr><th width="186.8333740234375">Message</th><th>Cause</th><th>Fix</th></tr></thead><tbody><tr><td>Resources limits missing</td><td>Container has no <code>resources.limits</code> and mutation defaulting didn't apply cpu+memory together</td><td>Set <code>resources.limits.cpu</code> and <code>resources.limits.memory</code> explicitly</td></tr></tbody></table>

### Code: `POD6012`

<table><thead><tr><th width="182.66668701171875">Message</th><th>Cause</th><th>Fix</th></tr></thead><tbody><tr><td>Missing <code>cpu</code> limit</td><td><code>resources.limits</code> present but no <code>cpu</code> key</td><td>Add <code>resources.limits.cpu</code></td></tr></tbody></table>

### Code: `POD6013`

<table><thead><tr><th width="182.66668701171875">Message</th><th>Cause</th><th>Fix</th></tr></thead><tbody><tr><td>Missing <code>memory</code> limit</td><td><code>resources.limits</code> present but no <code>memory</code> key</td><td>Add <code>resources.limits.memory</code></td></tr></tbody></table>

### Code: `POD6017/POD6018`

<table><thead><tr><th width="182.66668701171875">Message</th><th>Cause</th><th>Fix</th></tr></thead><tbody><tr><td>VPC not found for namespace</td><td>Your Pod's virtual network isn't set up yet (only relevant inside vCluster-backed namespaces)</td><td>Contact platform support — your default VPC should exist; this indicates a setup issue</td></tr></tbody></table>

### Code: `POD621/POD623`

<table><thead><tr><th width="182.66668701171875">Message</th><th>Cause</th><th>Fix</th></tr></thead><tbody><tr><td>GPU type not identified</td><td>Your GPU node selector doesn't match a known GPU model/MIG profile</td><td>Check your node selector against the GPU models listed in <code>kubectl get price -o yaml</code> under <code>spec.gpu</code></td></tr></tbody></table>

### No Code

<table><thead><tr><th width="182.66668701171875">Message</th><th>Cause</th><th>Fix</th></tr></thead><tbody><tr><td><code>Insufficient balance</code></td><td>The <a href="/pages/e9ade1d187b0a98202c207efda5cffccad96ebfe">48-hour look-ahead check</a> failed — your balance can't cover this Pod plus everything already running for 48h</td><td>Top up your balance, or free up quota by scaling down other workloads</td></tr></tbody></table>

## PersistentVolumeClaims (PVCs)

### Code: `VOL2003` / `VOL2007`

| Message                    | Cause                           | Fix                                          |
| -------------------------- | ------------------------------- | -------------------------------------------- |
| `storageClassName` missing | `spec.storageClassName` not set | Set it to a storage class you have quota for |

### Code: `VOL2004` / `VOL2008`

| Message                    | Cause                                                       | Fix                                                                                     |
| -------------------------- | ----------------------------------------------------------- | --------------------------------------------------------------------------------------- |
| Storage class not in quota | The class you named isn't in your `rquota.spec.storage` map | Check `kubectl get rquota -o yaml`; use a provisioned class or request one from support |

### Code: `VOL2005` / `VOL2009`

| Message              | Cause                                     | Fix                        |
| -------------------- | ----------------------------------------- | -------------------------- |
| Storage size missing | `spec.resources.requests.storage` not set | Set a storage size request |

### Code: `VOL2006`

| Message                         | Cause                                                               | Fix                                              |
| ------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------ |
| "not allowed to shrink storage" | You tried to reduce `resources.requests.storage` on an existing PVC | Delete and recreate the PVC instead of shrinking |

### No Code

| Message                                 | Cause                                                     | Fix                                                         |
| --------------------------------------- | --------------------------------------------------------- | ----------------------------------------------------------- |
| "Pricing for storage class … not found" | The storage class has no price configured for your tenant | Contact platform support to have pricing set for that class |

### No Code

| Message                        | Cause                                                          | Fix                                     |
| ------------------------------ | -------------------------------------------------------------- | --------------------------------------- |
| `Insufficient balance` / quota | Same 48-hour-runway or quota check as Pods, applied to storage | Top up balance or free up storage quota |

## Services (LoadBalancer / Floating IP)

| Message (paraphrased)                  | Cause                                                                          | Fix                                                                                         |
| -------------------------------------- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------- |
| Insufficient Floating-IP quota/balance | Your `rquota.spec.floatingIP` count (or balance) can't cover another public IP | Delete an unused LoadBalancer Service to free a slot, or request a higher Floating IP quota |

Non-LoadBalancer Services (`ClusterIP`, `NodePort`) are never rejected by these checks.

## Namespace-level (usually a platform-setup issue, not yours to fix)

Your namespace is created for you, pre-validated by the platform team. You should not normally see these — if you do (e.g. self-service namespace requests), they mean:

### Code: `NS2019`

| Cause                                                |
| ---------------------------------------------------- |
| A namespace with this tenant identity already exists |

### Code: `NS2017`

| Cause                                                       |
| ----------------------------------------------------------- |
| The platform's local IP pool is exhausted (contact support) |

### Code: `NS2016`

| Cause                                         |
| --------------------------------------------- |
| Required annotations missing on the namespace |

### Code: `NS2004`/`NS2005`

| Cause                                                                                    |
| ---------------------------------------------------------------------------------------- |
| `billingType` annotation missing or not one of the allowed values (`prepaid`/`postpaid`) |

### Code: `NS2006`/`NS2008`

| Cause                                                                                 |
| ------------------------------------------------------------------------------------- |
| `chargeType` annotation missing or not one of the allowed values (`hourly`/`fixed`/…) |

### Code: `NS2009`/`NS2020`

| Cause                                                                  |
| ---------------------------------------------------------------------- |
| Hourly + postpaid namespaces require a positive starting quota balance |

### Code: `NS2010`–`NS2015`

| Cause                                                                                                                  |
| ---------------------------------------------------------------------------------------------------------------------- |
| A per-product quota/price value (CPU, RAM, NVAIE, Floating IP, storage, GPU) failed validation against the charge type |

If you hit any of these, it's a request to platform support to fix your onboarding configuration, not something you can resolve with `kubectl`.

## Access (`CloudekaUser`, if you manage your own users)

| Message                                                      | Cause                                                                                       | Fix                                                                                            |
| ------------------------------------------------------------ | ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| "Invalid date format for expiry date … Format is YYYY-MM-DD" | `spec.expiredAt` isn't `YYYY-MM-DD`                                                         | Use `YYYY-MM-DD`, e.g. `2026-12-31`                                                            |
| "Cannot find cluster role …"                                 | A `spec.privileges.clusterRole` entry names a ClusterRole that doesn't exist in the cluster | Check the ClusterRole name/spelling, or ask platform support which cluster roles are available |
| "Cannot find role …"                                         | A `spec.privileges.role` entry names a Role that doesn't exist in the given namespace       | Check the Role name and namespace                                                              |

{% hint style="success" %}
Every check above runs **before** the object is created (an *admission* check) — so a rejection never leaves a half-created or broken resource behind. It's always safe to fix the manifest and re-apply.
{% endhint %}
