From Zero to kubectl in 5 Minutes — Managed Kubernetes on Your Own Metal

Every platform team has faced this: a new project needs a Kubernetes cluster. With cloud providers, that means a new billing account, region selection, networking decisions, and a baseline cost of $70–300/month before a single pod runs. Self-hosting with kubeadm? Days of setup, certificates, etcd management, and upgrade anxiety. Rancher helps, but you’re still managing the lifecycle yourself.

What if creating a production-grade Kubernetes cluster was as simple as filling out a form?

Deploy a Managed Kubernetes Cluster

Cozystack uses Kamaji for control planes (running as pods — no dedicated VMs for masters), Cluster API for lifecycle management, and KubeVirt for worker node VMs. You pick the version, the instance type, and how many nodes you want.

Via Dashboard

  1. Open the Cozystack dashboard at https://dashboard.<your-domain>.
  2. Navigate to the Marketplace and find Kubernetes.
Cozystack dashboard Marketplace showing the Kubernetes application tile
  1. Click Deploy and configure:
    • Name: e.g., dev-cluster
    • Version: pick from v1.30 to v1.35
    • Node group: set minReplicas: 2, maxReplicas: 5
    • Instance type: e.g., u1.large (2 vCPU, 8 Gi RAM)
    • Addons: check ingress, cert-manager, monitoring
Kubernetes deployment form with version, node group, and addons configured
  1. Click Deploy.

Worker nodes boot as VMs, join the cluster, and become Ready — typically within 3–5 minutes.

Kubernetes cluster worker nodes reporting Ready status after deployment

What’s included: Every cluster comes pre-configured with Cilium CNI (eBPF-based networking), KubeVirt CSI driver (for persistent volumes), and Cluster Autoscaler (automatic node scaling based on demand).

Via kubectl

apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: kubernetes-dev
  namespace: tenant-team1
spec:
  chart:
    spec:
      chart: kubernetes
      reconcileStrategy: Revision
      sourceRef:
        kind: HelmRepository
        name: cozystack-apps
        namespace: cozy-public
  interval: 0s
  values:
    host: dev.team1.example.org
    version: v1.33
    nodeGroups:
      md0:
        minReplicas: 2
        maxReplicas: 5
        instanceType: u1.large
        ephemeralStorage: 20Gi
    controlPlane:
      replicas: 2
    addons:
      ingressNginx:
        enabled: true
      certManager:
        enabled: true
      monitoringAgents:
        enabled: true
kubectl apply -f kubernetes-dev.yaml

Get your kubeconfig

In the dashboard, open the cluster application → Secrets tab → download admin.conf.

Cluster application Secrets tab with admin.conf kubeconfig available for download

Or via CLI:

kubectl get secret -n tenant-team1 kubernetes-dev-admin-kubeconfig \
  -o jsonpath='{.data.admin\.conf}' | base64 -d > kubeconfig-dev.yaml

export KUBECONFIG=kubeconfig-dev.yaml
kubectl get nodes
NAME                              STATUS   ROLES           AGE   VERSION
kubernetes-dev-md0-vn8dh-jjbm9   Ready    ingress-nginx   4m    v1.33.2
kubernetes-dev-md0-vn8dh-xhsvl   Ready    ingress-nginx   3m    v1.33.2

Deploy your apps with standard kubectl or helm — no vendor-specific tooling needed.

Learn more

Join the community