Giter VIP home page Giter VIP logo

kn's Introduction

A Kubernetes native shell experience: kn

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.

Install

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.

Use

Config

The following environment variables are used (set global or per invocation):

  • KN_BASE_IMAGE … set the base image to use; defaults to centos:7.
  • KN_SYNC … if set to true, the content of the current directory will be copied into the pod at /tmp/work; defaults to true.
  • KN_POLICY … if set to public, services will be made available on the public Web using ngrok; defaults to local.
  • KN_MODE … if set to daemon, the environment is detached and we assume there's some kind of networked service running; defaults to interactive.

Commands

The following commands are available:

  • up [NAME] [PORT] … creates environment, copies files of current directory unless disabled by KN_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 environment NAME by using port-forwarding of PORT in the environment (assuming something serves on this port in the container) to port 9898 locally, and, if enabled by KN_POLICY, makes it also publicly available using ngrok.
  • ls … lists all resources manged by kn.

Examples

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

kn's People

Contributors

mhausenblas avatar

Watchers

Saurabh Gupta avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.