If you use a Kubernetes cluster, chances are very high that you use kubectl
a lot. These are fine tools and allow you to do everything you need to do, but there are use cases where you end up with a very long kubectl
command in your terminal. This is why we created havener
to introduce a convenience wrapper around kubectl
. Think of it as a swiss army knife for Kubernetes tasks. Possible use cases are for example executing a command on multiple pods at the same time, or retrieving usage details.
To see a detail list of all havener commands, please refer to the command documentation.
Like kubectl
, havener
relies on the Kubernetes configuration that can be set via the KUBECONFIG
environment variable. It can also be provided with the --kubeconfig
flag, which takes the path to the YAML file (for example $HOME/.kube/config
).
Quickly get a live overview of the current cluster usage details, for example Load, CPU, and Memory of the cluster nodes.
Watch pods in multiple namespaces with added colors to help identify the respective state.
- havener events - Show Kubernetes cluster events
- havener logs - Retrieve log files from all pods
- havener node-exec - Execute command on Kubernetes node
- havener pod-exec - Execute command on Kubernetes pod
- havener top - Shows CPU and Memory usage
- havener watch - Watch status of all pods in all namespaces
There are different ways to get havener
. You are free to pick the one that makes the most sense for your use case.
-
On macOS systems, a Homebrew tap is available to install
havener
:brew install homeport/tap/havener
-
Use a convenience script to download the latest release to install it in a suitable location on your local machine:
curl -sL https://raw.githubusercontent.com/homeport/havener/main/scripts/download-latest.sh | bash
-
Of course, you can also build it from source code (only for development):
go install github.com/homeport/havener/cmd/havener
We are happy to have other people contributing to the project. If you decide to do that, here's how to:
- get Go (
havener
requires Go version 1.20 or greater) - fork the project
- create a new branch
- make your changes
- open a PR.
Git commit messages should be meaningful and follow the rules nicely written down by Chris Beams:
The seven rules of a great Git commit message
- Separate subject from body with a blank line
- Limit the subject line to 50 characters
- Capitalize the subject line
- Do not end the subject line with a period
- Use the imperative mood in the subject line
- Wrap the body at 72 characters
- Use the body to explain what and why vs. how
There are multiple make targets, but running all
does everything you want in one call.
make all
The best way to test is to use Docker to spin up a container:
docker run \
--interactive \
--tty \
--rm \
--volume $GOPATH/src/github.com/homeport/havener:/go/src/github.com/homeport/havener \
--workdir /go/src/github.com/homeport/havener \
golang:latest /bin/bash
The Go module setup can be frustrating, if you have to update Kubernetes API libraries. In general, using go get
with a specific version based on a tag is known to work, for example go get k8s.io/client-go@kubernetes-1.16.4
. In case you run into difficulties, please do not hesitate to reach out to us.
Licensed under MIT License