Instant Kubernetes clusters for prototypes, experimentation, development and testing.
We will make this easier, do not fear.
-
Go to releases and find the latest release.
-
Download the latest ".js" release
-
Install to
/usr/local/bin
:$ sudo mv ~/Download/qkube-v0.32.1.js /usr/local/bin/qkube $ sudo chmod +x /usr/local/bin/qkube $ qkube ls
Have fun!
Not relevant right now
$ qkube login
<opens browser, GitHub/Google login/signup>
$ qkube new
Created cluster "fimble-shimble" of size medium (5000mcpu, 128GiB).
Using cluster "fimble-shimble" as your default kubectl context.
Now you can play with it:
$ kubectl get all
...
You can also request a different size:
$ qkube new --size small
Creating new cluster "dinker-pinker" of size small (1000mcpu, 64GiB)...
Using cluster "dinker-pinker" as your default kubectl context.
You can request a cluster with a specific name:
$ qkube new --name my-bangbang-cluster
$ qkube ls
fimble-shimble medium
* dinker-pinker small
bangly-pangly small
$ qkube use bangly-pangly
Cluster "bangly-pangly" is now your default kubectl context.
$ qkube rm bangly-pangly
Cluster "bangly-pangly" is gone forever.
# Dockerfile
FROM hashicorp/http-echo
ENV ECHO_TEXT "Hello, quickube!"
$ docker build -t dinker-pinker.quickube.sh/echo .
$ k8s registry password | docker login dinker-pinker.quickube.sh -u admin --password-stdin
$ docker push dinker-pinker.quickube.sh/echo
# manifest.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: echo
spec:
replicas: 1
selector:
matchLabels:
app: echo
template:
metadata:
labels:
app: echo
spec:
containers:
- name: echo
image: dinker-pinker.quickube.sh/echo:latest
ports:
- containerPort: 5678
---
apiVersion: v1
kind: Service
metadata:
name: echo
spec:
ports:
- port: 5678
selector:
app: echo
type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: echo
spec:
rules:
- https:
paths:
- backend:
service:
name: echo
port:
number: 5678
path: /echo
pathType: Prefix
And apply:
$ kubectl apply -f manifest.yaml
And now it can be accessed from the internets via HTTPS :-):
$ curl https://dinker-pinker.quickube.sh/echo
Hello, quickube!
Create an invite URL for a cluster:
$ qkube invite bangly-pangly
https://quickube.sh/join/bangly-pangly?key=xosdfkjsdf39dfjhsdf9l
Invitee clicks the link, logs in, and the cluster is added to their account.
Now, it's just there:
$ qkube use bangly-pangly
Using cluster "bangly-pangly" as your default kubectl context.
POST /clusters
Request body:
{
"size": "small" | "medium" | "large" | "xlarge",
"region": "<provider-dependent>",
"provider": "aws" | "azure" | "gcp"
}
Response:
{
"name": "bangly-pangly",
"size": "small" | "medium" | "large" | "xlarge",
"region": "<provider-dependent>",
"provider": "aws" | "azure" | "gcp"
}
GET /clusters/:name/creds
Response:
{
"publicIp": "1.2.3.4",
"size": "medium",
"region": "us-east-1",
"provider": "aws",
"kubeconfig": "<kubeconfig...>",
"registryPassword": "x2923847usdcbjs8kjsdfsdf"
}
GET /clusters
Response:
{
"clusters": [
{
"name": "bangly-pangly",
"size": "small" | "medium" | "large" | "xlarge",
"region": "<provider-dependent>",
"provider": "aws" | "azure" | "gcp"
}
]
}
DELETE /clusters/:name
POST /clusters/:name/invites
Response:
{
"invite": "https://quickube.sh/join/bangly-pangly?key=xosdfkjsdf39dfjhsdf9l"
}
cd scripts/launch-instance
./launch.sh
(you'll need AWS creds in your environment)
- IP allow list, in customer VPC
- Custom domain names (e.g. bangly-pangly.acme.com)
- Cluster templates (e.g. preloaded secrets, services, argo, etc)
- Self-hosted in customer account and managed by us
- Remote debugging with hot reloading
- Auto-create for pull requests (preview environments)
- RBAC