Kvindo™ Cloud Docs
An Etcd Cluster is a managed distributed key-value store for service discovery, coordination, and configuration storage. Each instance runs on its own dedicated VM; the cluster is described as a single resource with one entry per node in spec.instances — there is no separate node-group resource.
• Cluster-wide sizing, per-instance identity — spec.vmOfferId/spec.volumeOfferId/spec.volumeSizeGiB apply identically to every instance (the cluster is homogeneous by design); only each instance's id and subnet (spec.instances[].id/vpcSubnetId) vary per node
• Instance id is caller-supplied — the platform diffs the desired instances array against the current one on every modify; reuse an instance's existing id to keep it, or supply a new id to add a node
• Scaling is one node per modify — a single request may only change the instance count by at most one, up or down; a bigger jump is rejected with a validation error. To go from 2 nodes to 4, apply two separate modify requests: 2→3, then 3→4
• Subnet placement — each instance's vpcSubnetId is independent; spread instances across different subnets for availability, or keep them in one subnet for a simpler setup — neither is required
• Cluster size — no enforced minimum or maximum; etcd itself needs a quorum to stay available, so an odd node count (1, 3, 5) is the conventional safe choice — a 2-node cluster has no more fault tolerance than a 1-node one
• Public access — private by default; set spec.createPublicIpv4 to give every instance a public IPv4
| UI Name | API / kc name | Terraform name | Optional | Format | Default | Is read only | Description |
|---|---|---|---|---|---|---|---|
| Tier | spec.tier |
spec.tier |
No | string | standard |
No | Reserved for future use — only standard is accepted today |
| Etcd version | spec.etcdVersion |
spec.etcd_version |
No | string — etcd version | 3.6.14 |
No | 3.6.14 is currently the only supported version — any other value is rejected on both create and modify, so this field is effectively immutable for now |
| Root password | spec.rootPassword |
spec.root_password |
No | string (sensitive, write-only) | — | No | Cluster-wide bootstrap credential for etcdctl auth; never returned in status |
| Public IPv4 | spec.createPublicIpv4 |
spec.create_public_ipv4 |
Yes | boolean | false |
No | Give every instance a public IPv4 |
| VM offer | spec.vmOfferId |
spec.vm_offer_id |
No | string (≤32) — compute offer | g3-1c1-100 |
No | Applies to every instance — see the Console catalog |
| Volume offer | spec.volumeOfferId |
spec.volume_offer_id |
No | string (≤32) — disk offer | gp3-750 |
No | Applies to every instance |
| Volume size | spec.volumeSizeGiB |
spec.volume_size_gib |
No | integer — GiB | 10 |
No | Applies to every instance |
| Instances | spec.instances |
spec.instances |
No | list of objects | — | No | One entry per cluster node |
| Instance ID | instances[].id |
instances[].id |
No | ULID | — | No | Caller-supplied — reuse across modifies to keep an existing instance |
| VPC subnet | instances[].vpcSubnetId |
instances[].vpc_subnet_id |
No | ULID — references a VPC Subnet | — | No | Subnet for this instance |
| CA certificate | status.caCert |
status.ca_cert |
— | string | — | Yes | Cluster's public CA certificate — pass to etcdctl --cacert to trust the cluster's TLS |
| Port | status.port |
status.port |
— | integer | — | Yes | Port etcdctl connects to — always 2379 today |
| Instances | status.instances |
status.instances |
— | list of objects | — | Yes | The provisioned cluster nodes |
| Instance ID | instances[].id |
instances[].id |
— | ULID | — | Yes | Matches the spec instance id |
| Public IPv4 | instances[].publicIpV4 |
instances[].public_ipv4 |
— | string | — | Yes | Set only when the cluster has public IPv4 enabled |
| Private IPv4 | instances[].privateIpV4 |
instances[].private_ipv4 |
— | string | — | Yes | Address on the instance's VPC subnet |
A private 3-node cluster on an existing subnet.
Terraform
Python SDK
kc CLI
Resource docs