Skip to content

KinD Cluster POC Setup#

⚠️ NOT PRODUCTION READY — This setup uses KinD (Kubernetes in Docker) on a single host and is intended for proof-of-concept, lab, and evaluation purposes only. It does not provide high availability, failover, or rolling maintenance capabilities. For production deployments, use the RKE2 multi-node cluster.

This guide walks through deploying Ametnes Platform services using a KinD cluster on an Ubuntu host (local workstation, cloud VM, or on-premises server). It is designed for DevOps engineers, system architects, and technical teams evaluating the platform in a lightweight, disposable environment.

Prerequisites#

  • OS: Ubuntu 20.04 LTS or later
  • Root or sudo access on the host
  • A static IP address reachable from the Ametnes control plane
  • Open ports for HTTPS (443) and Kubernetes API (6443)

KinD minimum requirements#

CPU RAM Storage
2 vCPUs 4 GB 10 GB

Total system resources depend on the services you deploy. Each service publishes its own resource requirements — plan your host capacity accordingly.

Step 1: Sign Up#

Create a free Ametnes Platform account at https://cloud.ametnes.com. No credit card required.

Step 2: Provision the Host#

Provision an Ubuntu 20.04 LTS (or later) VM or use an existing Linux host meeting the specifications above. Ensure firewall rules allow HTTPS (443) and Kubernetes API (6443) traffic.

Step 3: Create the KinD Cluster and Install the Ametnes Cloud Agent#

3.1 Get your Location UUID#

  1. Log in to your Ametnes Platform account at https://cloud.ametnes.com
  2. Navigate to Service Locations in the left menu
  3. Generate a UUID with uuidgen on your command line, or copy your default location's UUID

3.2 Run the setup script#

Run the setup script as a single command, replacing <your.vm.ip.address> and <location-uuid> with your values:

curl -fsSL https://ametnes-assets.lon1.digitaloceanspaces.com/packages/setup-kind.sh | sudo bash -s -- <your.vm.ip.address> ametnes-kind --location <location-uuid>

To install a specific agent version, pass --version <tag> (e.g. --version 3.1.0). Otherwise the latest version is installed.

This script installs Docker, kubectl, KinD, Helm, configures system limits, creates a 1+3 node cluster, writes the kubeconfig to ~/.kube/config, and installs the Ametnes Cloud Agent connected to your location.

Verify the cluster is ready:

kubectl get nodes

Expected output: one control-plane and three worker nodes, all Ready.

3.3 Register the location in the Ametnes console#

  1. In your Ametnes Cloud console, navigate to Service Locations
  2. Click New Location
  3. Enter:
  4. User Supplied Id: Your UUID from step 3.1
  5. Name: e.g., KinD-Lab
  6. Code: e.g., KIND
  7. Click Create

After a short while, the location will appear online in your console.

3.4 Verify the agent#

kubectl -n ametnes-system get pods

Expected output: ametnes-cloud-agent pod Running.

Step 4: Deploy a Service#

  1. Navigate to the Services dashboard using the left menu
  2. Click New Service
  3. Filter for a service (e.g., PostgreSQL, Open WebUI) and select Create
  4. Fill in the form:
  5. Name: e.g., Postgres-KinD-POC
  6. Description: Optional description
  7. Version: Select a version from the list
  8. Location: Select KinD-Lab (or your location name)
  9. Configure any service-specific settings
  10. Click Create

Step 5: Test Connectivity#

  1. Navigate to the Services dashboard
  2. Wait for the service status to change to ready
  3. Click the Admin button to view service details
  4. Copy the endpoint, username, and password
  5. Open the service URL in your browser and log in

Clean Up#

When done testing, delete services from the platform console to free up resources. Then tear down the cluster:

kind delete cluster --name ametnes-kind
docker system prune -f   # Optional: reclaim disk space

Troubleshooting#

Symptom Cause Fix
kubectl connection refused Not in docker group or limits not applied Log out and back in, or run newgrp docker
Agent pod stuck in Init:0/1 DNS resolution failure for short service names Verify CoreDNS is running: kubectl -n kube-system get pods -l k8s-app=kube-dns
too many open files in pod logs fsnotify watcher limit too low Run sudo sysctl --system to apply 90-kind.conf limits
Service stays in provisioning Agent disconnected or location offline Check agent pod status: kubectl -n ametnes-system get pods