@@ -8,8 +8,9 @@ for [cloudscale.ch](https://www.cloudscale.ch).
88
99## Features
1010
11- - ** CloudscaleCluster** : Network, Subnet, Load Balancer management
12- - ** CloudscaleMachine** : Server provisioning with cloud-init
11+ - ** CloudscaleCluster** : Multi-network management (managed or BYO), Load Balancer (public or private VIP), Floating IP
12+ support
13+ - ** CloudscaleMachine** : Server provisioning with cloud-init and configurable network interfaces
1314- ** CloudscaleMachineTemplate** : Immutable machine templates for KubeadmControlPlane/MachineDeployment
1415
1516## Prerequisites
@@ -42,6 +43,9 @@ clusterctl generate cluster my-cluster \
4243 | kubectl apply -f -
4344```
4445
46+ This uses the default template (public nodes, managed network). See [ Cluster Templates] ( #cluster-templates ) for other
47+ network topologies.
48+
4549Watch the cluster come up:
4650
4751``` bash
@@ -50,15 +54,40 @@ clusterctl describe cluster my-cluster
5054
5155## Environment Variables
5256
53- | Variable | Description | Example |
54- | -------------------------------------------| --------------------------------| -----------------------------------|
55- | ` CLOUDSCALE_API_TOKEN ` | cloudscale.ch API token | ` abc123... ` |
56- | ` CLOUDSCALE_SSH_PUBLIC_KEY ` | SSH public key added to nodes | ` ssh-ed25519 AAAA... ` |
57- | ` CLOUDSCALE_REGION ` | cloudscale.ch region | ` lpg ` or ` rma ` |
58- | ` CLOUDSCALE_MACHINE_IMAGE ` | Server image for nodes | ` custom:ubuntu-2404-kube-v1.xx.x ` |
59- | ` CLOUDSCALE_CONTROL_PLANE_MACHINE_FLAVOR ` | Flavor for control plane nodes | ` flex-4-2 ` |
60- | ` CLOUDSCALE_WORKER_MACHINE_FLAVOR ` | Flavor for worker nodes | ` flex-4-2 ` |
61- | ` CLOUDSCALE_ROOT_VOLUME_SIZE ` | Root volume size in GB | ` 50 ` |
57+ | Variable | Description | Example |
58+ | -------------------------------------------| -------------------------------------------| -----------------------------------|
59+ | ` CLOUDSCALE_API_TOKEN ` | cloudscale.ch API token | ` abc123... ` |
60+ | ` CLOUDSCALE_SSH_PUBLIC_KEY ` | SSH public key added to nodes | ` ssh-ed25519 AAAA... ` |
61+ | ` CLOUDSCALE_REGION ` | cloudscale.ch region | ` lpg ` or ` rma ` |
62+ | ` CLOUDSCALE_MACHINE_IMAGE ` | Server image for nodes | ` custom:ubuntu-2404-kube-v1.xx.x ` |
63+ | ` CLOUDSCALE_CONTROL_PLANE_MACHINE_FLAVOR ` | Flavor for control plane nodes | ` flex-4-2 ` |
64+ | ` CLOUDSCALE_WORKER_MACHINE_FLAVOR ` | Flavor for worker nodes | ` flex-4-2 ` |
65+ | ` CLOUDSCALE_ROOT_VOLUME_SIZE ` | Root volume size in GB | ` 50 ` |
66+ | ` CLOUDSCALE_NETWORK_UUID ` | Existing cloudscale.ch network UUID (BYO) | ` 2db69ba3-... ` |
67+
68+ > ** Note:** ` CLOUDSCALE_NETWORK_UUID ` is required by the ` fip ` , ` public-lb-private-nodes ` , and ` byo-network `
69+ > template flavors. It is not needed for the default template.
70+
71+ ## Cluster Templates
72+
73+ CAPCS ships several cluster templates for different network topologies. Use ` clusterctl generate cluster ` with the
74+ ` --flavor ` flag to select one:
75+
76+ ``` bash
77+ clusterctl generate cluster my-cluster \
78+ --kubernetes-version v1.32.0 \
79+ --control-plane-machine-count 1 \
80+ --worker-machine-count 2 \
81+ --flavor < flavor-name> \
82+ | kubectl apply -f -
83+ ```
84+
85+ | Flavor | Network | CP Endpoint | Node Connectivity | Extra Env Vars | Notes |
86+ | ---------------------------| ---------------------------| -----------------------| -------------------| ---------------------------| ----------------------|
87+ | * (default)* | Managed (` 10.100.0.0/24 ` ) | Public LB (DualStack) | Public + cluster | — | |
88+ | ` fip ` | BYO | Floating IP (IPv4) | Public + cluster | ` CLOUDSCALE_NETWORK_UUID ` | |
89+ | ` public-lb-private-nodes ` | BYO + NAT | Public LB | Private only | ` CLOUDSCALE_NETWORK_UUID ` | Requires NAT gateway |
90+ | ` byo-network ` | BYO | Public LB (DualStack) | Public + cluster | ` CLOUDSCALE_NETWORK_UUID ` | |
6291
6392## Development
6493
@@ -92,14 +121,16 @@ filtering and are split into suites of increasing cost, scheduled accordingly:
92121| Cluster upgrade | ` upgrade ` | Rolling K8s version upgrade (v1.34 → v1.35) | < 10 min | Weekly | ` test-e2e-upgrade ` |
93122| Self-hosted | ` self-hosted ` | clusterctl move (pivot) to workload cluster. Requires container image in public registry | < 15 min | Weekly | ` test-e2e-self-hosted ` |
94123| MD remediation | ` md-remediation ` | MachineHealthCheck auto-replacement of unhealthy workers | < 10 min | Weekly | ` test-e2e-md-remediation ` |
124+ | BYO networking | ` byo-networking ` | BYO network: public-LB + private-nodes and floating-IP variants | < 10 min | Weekly | ` test-e2e-byo-networking ` |
95125| Conformance (fast) | ` conformance ` | K8s conformance, skip Serial tests | < 60 min | Weekly | ` test-e2e-conformance-fast ` |
96126| Conformance (full) | ` conformance ` | Full K8s conformance including Serial tests | < 120 min | Biweekly | ` test-e2e-conformance ` |
97127
98128Durations are approximate from a real CI run; conformance varies with cluster size.
99129
100130** Why this split?** The single-CP lifecycle test is the cheapest smoke test and runs
101131nightly to catch regressions early. HA, upgrade, self-hosted, and remediation tests are more
102- resource-intensive and run weekly. Full K8s conformance is the most expensive and runs biweekly
132+ resource-intensive and run weekly. Private networking tests require ` CLOUDSCALE_NETWORK_UUID ` to be set and are
133+ skipped otherwise. Full K8s conformance is the most expensive and runs biweekly
103134(1st + 15th of month). All suites can be triggered manually via the ` test-e2e.yml ` workflow
104135dispatch. E2E tests share a concurrency group so only one suite runs at a time.
105136
@@ -143,6 +174,8 @@ kustomize_substitutions:
143174 CLOUDSCALE_WORKER_MACHINE_FLAVOR : " flex-4-2"
144175 CLOUDSCALE_MACHINE_IMAGE : " IMAGE_NAME"
145176 CLOUDSCALE_ROOT_VOLUME_SIZE : " 50"
177+ # Required for BYO network flavors (fip, public-lb-private-nodes, byo-network):
178+ # CLOUDSCALE_NETWORK_UUID: "UUID_HERE"
146179extra_args :
147180 cloudscale :
148181 - " --zap-log-level=5"
0 commit comments