/havener

/ˈheɪvənə/ - Think of it as a swiss army knife for Kubernetes tasks

Primary LanguageGoMIT LicenseMIT

Havener /ˈheɪvənə/

License Go Report Card Tests Codecov Go Reference Release

havener

Table of Contents

Introducing Havener

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.

Ok, tell me more

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).

Notable Use Cases

Usage overview

havener Quickly get a live overview of the current cluster usage details, for example Load, CPU, and Memory of the cluster nodes.

Pods in namespace overview

havener Watch pods in multiple namespaces with added colors to help identify the respective state.

Havener Commands

How do I get started

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

Contributing

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

  1. Separate subject from body with a blank line
  2. Limit the subject line to 50 characters
  3. Capitalize the subject line
  4. Do not end the subject line with a period
  5. Use the imperative mood in the subject line
  6. Wrap the body at 72 characters
  7. Use the body to explain what and why vs. how

Running test cases and binaries generation

There are multiple make targets, but running all does everything you want in one call.

make all

Test it with Linux on your macOS system

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

Package dependencies (Go modules)

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.

License

Licensed under MIT License