The basic idea behind kn
is to use the fact that pods in Kubernetes are modelled after machines. That is, the apps running in containers in the pod can communicate with each other via localhost
and transfer data via volumes they can mount into their own filesystem hierarchy as they see fit.
So, imagine you want to try something out real quick? Do a short iteration using a scripting language such as Python, Ruby, or Node.js? Might want to jump on a container to debug something in-cluster? Run a quick load test? Then, kn
is for you: it offers a collection of shell functions allowing you to quickly launch a pod, jump into it and have the code and data available you need to carry out your task.
Note that this tool is meant to be used in dev and test environments. Use at your own risk.
Simply Git clone or download this repo from the release page, and copy kn*.sh
somewhere on your path. If you're super fancy, you can set an alias like so: (since I moved the script to /Users/mhausenblas/bin/
):
alias kn='/Users/mhausenblas/bin/kn.sh'
I've tested kn
in the Bash shell v3.2 on macOS and Linux. Note that in order to work kn
requires you to have kubectl
installed and configured. If you also want to use the (optional) feature to expose an environment to the public, you need to have ngrok installed and configured.
The following environment variables are used (set global or per invocation):
KN_BASE_IMAGE
… set the base image to use; defaults tocentos:7
.KN_SYNC
… if set totrue
, the content of the current directory will be copied into the pod at/tmp/work
; defaults totrue
.KN_POLICY
… if set topublic
, services will be made available on the public Web usingngrok
; defaults tolocal
.KN_MODE
… if set todaemon
, the environment is detached and we assume there's some kind of networked service running; defaults tointeractive
.
The following commands are available:
up [NAME] [PORT]
… creates environment, copies files of current directory unless disabled byKN_SYNC=false
.connect NAME
… puts you into the running environment.down NAME
… deletes environment, removes all resources associated with it.publish NAME PORT
… publishes the daemonized environmentNAME
by using port-forwarding ofPORT
in the environment (assuming something serves on this port in the container) to port9898
locally, and, if enabled byKN_POLICY
, makes it also publicly available usingngrok
.ls
… lists all resources manged bykn
.
Launching an interactive environment with kn
:
## launch interactive environment:
$ kn up
.......
Copied content of /Users/mhausenblas/tmp to /tmp/work in the environment
The environment [sandbox] is now ready!
## list all environments:
$ kn ls
NAME SINCE
sandbox 2018-10-22T10:16:13Z
## jump into the environment:
$ kn connect
connecting to sandbox-64dc6d6bf9-s6gzjsh-4.2#
sh-4.2#
sh-4.2# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10:16 ? 00:00:00 sleep 86400
root 27 0 0 10:17 pts/0 00:00:00 sh
root 36 27 0 10:17 pts/0 00:00:00 ps -ef
sh-4.2# exit
exit
## destroy the environment:
$ kn down
The environment [sandbox] has been destroyed, all data is gone the way of the dodo
Publishing a daemonized environment using the container image quay.io/mhausenblas/pingsvc:2
that serves on port 8888
:
## launch as daemonized env:
$ KN_BASE_IMAGE=quay.io/mhausenblas/pingsvc:2 KN_MODE=daemon kn up psvc 8888
The daemonized environment [psvc] is now ready!
To publish your environment, do: kn publish psvc 8888
## now make it publicly available using ngrok:
$ KN_POLICY=public kn publish psvc 8888
ngrok by @inconshreveable
Session Status online
Account Michael Hausenblas (Plan: Pro)
Version 2.2.8
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://0cf727cf.ngrok.io -> localhost:9898
Forwarding https://0cf727cf.ngrok.io -> localhost:9898
Connections ttl opn rt1 rt5 p50 p90
1 0 0.01 0.00 0.30 0.30
HTTP Requests
-------------
GET /ping 200 OK
## in a second terminal session, check if we can get to the service:
$ curl localhost:9898/ping
pong
$ curl http://0cf727cf.ngrok.io/ping
pong
## now we can get rid of the environment:
$ kn down psvc
The environment [psvc] has been destroyed, all data is gone the way of the dodo