curl --request DELETE \
--url https://api.ornn.com/v1/orchestrator/controllers/{controller_id}/nodes/{node_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.ornn.com/v1/orchestrator/controllers/{controller_id}/nodes/{node_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.delete(url, headers=headers)
print(response.text)const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.ornn.com/v1/orchestrator/controllers/{controller_id}/nodes/{node_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ornn.com/v1/orchestrator/controllers/{controller_id}/nodes/{node_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.ornn.com/v1/orchestrator/controllers/{controller_id}/nodes/{node_id}"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.delete("https://api.ornn.com/v1/orchestrator/controllers/{controller_id}/nodes/{node_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ornn.com/v1/orchestrator/controllers/{controller_id}/nodes/{node_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"controller_id": "44444444-4444-4444-8444-444444444444",
"node_id": "33333333-3333-4333-8333-333333333333",
"state": "draining"
}Remove a physical worker
Starts removing a host from an owned cluster. Workloads on that host stop, and its local data can be lost. The 200 response with state draining means cleanup was sent, not finished. Poll listClusters - the host leaves the cluster’s nodes after it confirms cleanup. A member left in state cleanup_failed reported that cleanup did not finish; contact Ornn before reusing it. Repeating the request while the host is draining sends cleanup again; once the host has left, it returns 404 node_not_found. Removing a worker does not cancel its reservation or stop its billing.
curl --request DELETE \
--url https://api.ornn.com/v1/orchestrator/controllers/{controller_id}/nodes/{node_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.ornn.com/v1/orchestrator/controllers/{controller_id}/nodes/{node_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.delete(url, headers=headers)
print(response.text)const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.ornn.com/v1/orchestrator/controllers/{controller_id}/nodes/{node_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ornn.com/v1/orchestrator/controllers/{controller_id}/nodes/{node_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.ornn.com/v1/orchestrator/controllers/{controller_id}/nodes/{node_id}"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.delete("https://api.ornn.com/v1/orchestrator/controllers/{controller_id}/nodes/{node_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ornn.com/v1/orchestrator/controllers/{controller_id}/nodes/{node_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"controller_id": "44444444-4444-4444-8444-444444444444",
"node_id": "33333333-3333-4333-8333-333333333333",
"state": "draining"
}ornn login:
ornn clusters remove-node CLUSTER_ID NODE_ID
Authorizations
Create an organization API key in Account Settings > Developer. Do not send this key to the Kubernetes API server.
Path Parameters
Cluster id returned by create or list; not a reservation ID.
An existing owned physical worker ID.
Response
Removal started; draining and cleanup are asynchronous.
On a new addition, cleaning while Ornn prepares the host or joining when it attaches directly. On a repeated addition, the current membership state, such as joining or ready, or cleaning while preparation is still pending. On removal, draining.
Was this page helpful?