tilt-dev / ctlptl

Making local Kubernetes clusters fun and easy to set up
Apache License 2.0
530 stars 38 forks source link

ctlptl

Build Status GoDoc

Want to mess around with Kubernetes, but don't want to spend an ocean on hardware?

Maybe you need a ctlptl.

What is ctlptl?

ctlptl (pronounced "cattle patrol") is a CLI for declaratively setting up local Kubernetes clusters.

Inspired by kubectl and ClusterAPI's clusterctl, you declare your local cluster with YAML and use ctlptl to set it up.

How do I install it?

Install your cluster of choice: Docker for Desktop, Kind, k3d or Minikube. Then run:

Homebrew (Mac/Linux)

brew install tilt-dev/tap/ctlptl

Scoop (Windows)

scoop bucket add tilt-dev https://github.com/tilt-dev/scoop-bucket
scoop install ctlptl

Go install

go install github.com/tilt-dev/ctlptl/cmd/ctlptl@latest

Alternative Options

If automatic installers aren't your cup of tea, check out the installation appendix for more options.

How do I use it?

ctlptl supports 4 major commands:

Examples

Docker for Mac: Enable Kubernetes and set 4 CPU

Create:

ctlptl docker-desktop open
ctlptl create cluster docker-desktop --min-cpus=4

or ensure exists:

cat <<EOF | ctlptl apply -f -
apiVersion: ctlptl.dev/v1alpha1
kind: Cluster
product: docker-desktop
minCPUs: 4
EOF

Docker for Mac: Reset and shutdown Kubernetes

ctlptl delete cluster docker-desktop
ctlptl docker-desktop quit

KIND: with a built-in registry at a random port

Create:

ctlptl create cluster kind --registry=ctlptl-registry

or ensure exists:

cat <<EOF | ctlptl apply -f -
apiVersion: ctlptl.dev/v1alpha1
kind: Cluster
product: kind
registry: ctlptl-registry
EOF

Then fetch the URL to push images to with:

ctlptl get cluster kind-kind -o template --template '{{.status.localRegistryHosting.host}}'

KIND: with a built-in registry at a pre-determined port

Create:

ctlptl create registry ctlptl-registry --port=5005
ctlptl create cluster kind --registry=ctlptl-registry

or ensure exists:

cat <<EOF | ctlptl apply -f -
apiVersion: ctlptl.dev/v1alpha1
kind: Registry
name: ctlptl-registry
port: 5005
---
apiVersion: ctlptl.dev/v1alpha1
kind: Cluster
product: kind
registry: ctlptl-registry
EOF

K3D: with a built-in registry at a pre-determined port

Create:

ctlptl create registry ctlptl-registry --port=5005
ctlptl create cluster k3d --registry=ctlptl-registry

or ensure exists:

cat <<EOF | ctlptl apply -f -
apiVersion: ctlptl.dev/v1alpha1
kind: Registry
name: ctlptl-registry
port: 5005
---
apiVersion: ctlptl.dev/v1alpha1
kind: Cluster
product: k3d
registry: ctlptl-registry
EOF

Minikube: with a built-in registry at Kubernetes v1.18.8

Create:

ctlptl create cluster minikube --registry=ctlptl-registry --kubernetes-version=v1.18.8

or ensure exists:

cat <<EOF | ctlptl apply -f -
apiVersion: ctlptl.dev/v1alpha1
kind: Cluster
product: minikube
registry: ctlptl-registry
kubernetesVersion: v1.18.8
EOF

Docker for Mac: Limit to 1 CPU and Disable Kubernetes

ctlptl docker-desktop set vm.resources.cpus 1
ctlptl docker-desktop set kubernetes.enabled false

More

For more details, see:

Why did you make this?

At Tilt, we want to make Kubernetes a nice environment for local dev.

We found ourselves spending too much time helping teams debug misconfigurations in their dev environment.

We wrote docs like Choosing a local dev cluster and example repos like kind-local, minikube-local, and k3d-local to help people get set up.

ctlptl is a culmination of what we've learned.

Features

Current

Future Work

Community

ctlptl is a work in progress!

We welcome contributions from the Kubernetes community to help make this better.

We expect everyone -- users, contributors, followers, and employees alike -- to abide by our Code of Conduct.

Goals

Non-Goals

Privacy

ctlptl sends anonymized usage statistics, so we can improve it on every platform. Opt out with ctlptl analytics opt out.

License

Copyright 2022 Docker, Inc.

Licensed under the Apache License, Version 2.0