Cluster Management
Create, inspect, and manage Kubernetes clusters on OpenStack (CAPO) and AWS (EKS) from the Frontier CLI.
Overview
The Frontier CLI supports creating Kubernetes clusters on two providers:
| Provider | Distribution | CAPI Provider | Command |
|---|---|---|---|
| OpenStack (VitroAI) | RKE2 | CAPO (Cluster API Provider OpenStack) | frontier create cluster capo |
| AWS | EKS | CAPA (Cluster API Provider AWS) | frontier create cluster eks |
All cluster operations flow through the GitOps pipeline: CLI → Trailboss API → Gitea (manifests) → ArgoCD → CAPI on FMC → infrastructure provisioning.
Create an OpenStack Cluster (CAPO)
frontier create cluster capo \
--name my-cluster \
--workers 3 \
--control-planes 1 \
--flavor-cp m8.20 \
--flavor-worker m2.4 \
--image rke2-node-v1.28-20260324
CAPO Flags
| Flag | Default | Description |
|---|---|---|
--name |
(required) | Cluster name |
--namespace |
cluster-{name} |
Kubernetes namespace (auto-derived) |
--k8s-version |
v1.32.2+rke2r1 |
RKE2 Kubernetes version |
--control-planes |
1 |
Control plane node count (must be odd) |
--workers |
3 |
Worker node count |
--flavor-cp |
m8.20 |
OpenStack flavor for control plane VMs |
--flavor-worker |
m2.4 |
OpenStack flavor for worker VMs |
--image |
rke2-node-v1.28-20260324 |
Pre-baked Packer VM image in Glance |
--network |
(auto-created) | OpenStack network name |
--ssh-key |
(none) | SSH keypair name |
--external-net |
45799c9a-... |
External network ID for floating IPs |
--fips |
false |
Enable FIPS 140-2 mode |
How It Works
- CLI sends cluster spec to
POST /api/v1/cluster-templates/2/render(template 2 = capo-rke2-default) - Trailboss renders CAPI manifests from the template + user values
- Rendered manifests are pushed to Gitea (
admin/federal-frontier-platform) - ArgoCD syncs the manifests to the FMC
- CAPO provisions VMs in OpenStack, installs RKE2, bootstraps the cluster
$ frontier create cluster capo --name edge-01 --workers 2 --fips
Cluster creation initiated!
Name: edge-01
Provider: OpenStack (CAPO)
K8s: v1.32.2+rke2r1
CP: 1 x m8.20
Workers: 2 x m2.4
Image: rke2-node-v1.28-20260324
FIPS: Enabled
Manifests pushed to Gitea. ArgoCD will sync to FMC.
Track progress: frontier get cluster edge-01
Create an EKS Cluster (AWS)
frontier create cluster eks \
--name satellite-prod \
--region us-east-1 \
--workers 3 \
--instance-type m5.xlarge
EKS Flags
| Flag | Default | Description |
|---|---|---|
--name |
(required) | Cluster name |
--namespace |
(auto-derived) | Kubernetes namespace |
--k8s-version |
v1.28.0 |
EKS Kubernetes version |
--region |
(required) | AWS region |
--workers |
3 |
Worker node count |
--instance-type |
m5.xlarge |
EC2 instance type for workers |
--vpc-id |
(creates new) | Existing VPC ID |
--subnet-ids |
(auto-selected) | Comma-separated subnet IDs |
Get Cluster Information
List All Clusters
frontier get cluster all
Returns: name, namespace, provider, machine count, Kubernetes version, UUID, status.
Get a Specific Cluster
frontier get cluster my-cluster
Get Cluster Status
frontier get status my-cluster --project-name my-project
Get Kubeconfig
# Print to stdout
frontier get kubeconfig my-cluster --project-name my-project
# Save to file
frontier get kubeconfig my-cluster --project-name my-project --file-name kubeconfig.yaml
Get Machines
# All machines
frontier get machine all
# Specific machine
frontier get machine my-machine-0
Returns: name, cluster, namespace, role, CPU, memory, OS, IP, MAC address, status.
Get Cluster Add-ons
frontier get addons satellite-test2
Returns: installed add-ons with name, namespace, Helm chart, and description.
Get Cluster Costs
frontier get costs my-cluster
Returns: cumulative cost breakdown (CPU, memory, GPU, network, disk).
Delete a Cluster
frontier delete cluster my-cluster --project-name my-project
Batch Cluster Creation
Create multiple clusters in parallel from a YAML manifest:
frontier batch --file clusters.yaml --concurrency 5
Example clusters.yaml
project: fedstryke
awsRegion: us-east-1
defaults:
kubeVersion: "1.32"
replicas: 2
cpu: 2
memory: 4096
capacityType: spot
amiType: AL2_x86_64
cni: vpccni
csi: gp2
vpcId: vpc-xxxxxx
privateSubnetIds:
- subnet-aaaa
- subnet-bbbb
clusters:
- name: cluster-001
- name: cluster-002
- name: cluster-003
| Flag | Default | Description |
|---|---|---|
--file |
clusters.yaml |
Path to manifest |
--concurrency |
5 |
Parallel creation limit |
--log-dir |
logs/ |
Per-cluster log directory |
Each cluster inherits defaults and can override any value individually. Tokens are silently refreshed during long-running batch operations.