---
title: "Start a version upgrade"
method: POST
path: "/api/v1/k8s/clusters/{cluster_id}/upgrade"
tags: ["Kubernetes"]
---

# Start a version upgrade

`POST /api/v1/k8s/clusters/{cluster_id}/upgrade`

Start an in-place Kubernetes upgrade to one of the versions from [List available version upgrades](#tag/Kubernetes/operation/listK8sClusterUpgrades). The upgrade is rolling: control-plane nodes one at a time, then workers drained first (PodDisruptionBudgets honoured). HA clusters upgrade with no API interruption; single-master clusters have a brief interruption and require `confirm_single_master: true`. Progress appears in the cluster events; upgrades are free.

## Path parameters

- `cluster_id` string, required

## Headers

- `X-Project-ID` string, uuid, required

## Request body

- object
  - `version_id` integer, required — Target from List available version upgrades
  - `confirm_single_master` boolean — Required true on non-HA clusters

## Response `200`

Upgrade started

- SuccessResponse
  - `success` boolean
  - `message` string

## Other responses

- `400` — Invalid target (skew policy, unknown version, downgrade)
- `404` — Resource not found
- `412` — Pre-flight refused (busy pool, unconfirmed single-master)

## Changes

- **2026-08-24** `9f5798fcd5a1` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/rafftechnologies/apis/raff-api/changes/api/v1/k8s/clusters/:cluster_id/upgrade/post.md)

---

[API](https://skmtc.dev/rafftechnologies/apis/raff-api.md) · [All operations](https://skmtc.dev/rafftechnologies/apis/raff-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/rafftechnologies/raff-api/revisions/2f4df56be77c/schema)
