メインコンテンツまでスキップ
バージョン: 次

Cluster Add-ons API Reference

Managing add-ons on Kubernetes clusters with API endpoints.

This reference covers the endpoints for managing Helm-based add-ons on Kubernetes clusters.

Overview

Cluster add-ons allow you to install common tools like JupyterHub and KubeRay on your provisioned clusters without needing to manage Helm directly. The IaaS API handles the lifecycle of these add-ons by coordinating with Flux on the tenant cluster.

Authentication

All endpoints require a valid Bearer token with user scope.

export API_BASE_URL="https://your-iaas-domain/api"
export JWT_TOKEN="your-access-token"

Endpoints

List Available Add-ons (Catalog)

Retrieve the list of add-ons available for installation.

  • Method: GET
  • Path: /api/addons/catalog

Response Example (200 OK):

[
{
"name": "jupyterhub",
"display_name": "JupyterHub",
"description": "Notebook environment for data science",
"version": "3.3.8",
"params": {
"cpu_limit": {
"type": "number",
"description": "CPU limit per notebook session"
},
"memory_limit": {
"type": "string",
"description": "Memory limit per notebook session (for example, 4Gi)"
}
}
},
{
"name": "kuberay",
"display_name": "KubeRay Operator",
"description": "Ray operator for distributed ML workloads",
"version": "1.1.0",
"params": {}
}
]

List Installed Add-ons

List all add-on instances installed on a specific cluster.

  • Method: GET
  • Path: /api/clusters/{cluster_id}/addons

Response Example (200 OK):

[
{
"name": "jupyterhub-x7k2",
"addon_type": "jupyterhub",
"status": "deployed",
"version": "3.3.8",
"cluster_id": "abc-123",
"info": { "web_ui": "http://10.96.14.5:80" },
"created_at": "2026-02-11T14:30:00Z",
"updated_at": "2026-02-11T14:32:15Z"
}
]

Install an Add-on

Provision a new add-on instance on a cluster.

  • Method: POST
  • Path: /api/clusters/{cluster_id}/addons

Request Body:

{
"addon": "jupyterhub",
"params": {
"cpu_limit": 2,
"memory_limit": "4Gi"
}
}

Response Example (202 Accepted):

{
"name": "jupyterhub-x7k2",
"addon_type": "jupyterhub",
"status": "pending-install",
"version": "3.3.8",
"message": null,
"created_at": "2026-02-11T14:30:00Z",
"updated_at": "2026-02-11T14:30:00Z"
}

cURL Example:

curl -X POST \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"addon": "jupyterhub", "params": {"cpu_limit": 1}}' \
"${API_BASE_URL}/clusters/abc-123/addons"

Get Add-on Instance Details

Retrieve the current status and information for a specific add-on instance.

  • Method: GET
  • Path: /api/clusters/{cluster_id}/addons/{name}

Response Example (200 OK - Deployed):

{
"name": "jupyterhub-x7k2",
"addon_type": "jupyterhub",
"status": "deployed",
"version": "3.3.8",
"info": { "web_ui": "http://10.96.14.5:80" },
"message": null,
"created_at": "2026-02-11T14:30:00Z",
"updated_at": "2026-02-11T14:32:15Z"
}

Response Example (200 OK - Failed):

{
"name": "jupyterhub-x7k2",
"addon_type": "jupyterhub",
"status": "failed",
"version": "3.3.8",
"message": "pod jupyterhub-hub-xyz did not reach ready state within timeout",
"created_at": "2026-02-11T14:30:00Z",
"updated_at": "2026-02-11T14:45:00Z"
}

Uninstall an Add-on

Remove an add-on instance and its associated Kubernetes resources.

  • Method: DELETE
  • Path: /api/clusters/{cluster_id}/addons/{name}

Response Example (202 Accepted): Returns an empty body or a status object confirming the deletion has started.

cURL Example:

curl -X DELETE \
-H "Authorization: Bearer $JWT_TOKEN" \
"${API_BASE_URL}/clusters/abc-123/addons/jupyterhub-x7k2"

Response Models & Status Values

Lifecycle Status

StatusDescription
pending-installThe installation request has been accepted and Flux is deploying the chart.
deployedThe add-on is healthy and ready to use.
failedThe installation failed or the add-on is in an unhealthy state.

Error Codes

CodeDescription
400 Bad RequestInvalid parameters, or cluster version does not satisfy add-on requirements.
401 UnauthorizedMissing or invalid authentication token.
404 Not FoundCluster or add-on instance not found.
422 Unprocessable EntityValidation error in the request body.
500 Internal Server ErrorUnexpected error communicating with the Kubernetes cluster.