mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2026-01-09 17:09:51 +00:00
355 lines
10 KiB
Markdown
355 lines
10 KiB
Markdown
# kube-ps1: Kubernetes prompt for bash and zsh
|
|
|
|

|
|
[](https://github.com/jonmosco/kube-ps1/actions/workflows/ci.yml)
|
|
|
|
A script that lets you add the current Kubernetes context and namespace
|
|
configured on `kubectl` to your Bash/Zsh prompt strings (i.e. the `$PS1`).
|
|
|
|
Inspired by several tools used to simplify usage of `kubectl`.
|
|
|
|

|
|
|
|
## Installing
|
|
|
|
### Packages
|
|
|
|
### MacOS Brew Ports
|
|
|
|
Homebrew package manager:
|
|
|
|
```sh
|
|
brew update
|
|
brew install kube-ps1
|
|
```
|
|
|
|
### Arch Linux
|
|
|
|
AUR Package available at [https://aur.archlinux.org/packages/kube-ps1/](https://aur.archlinux.org/packages/kube-ps1/).
|
|
|
|
### Oh My Zsh
|
|
|
|
https://github.com/ohmyzsh/ohmyzsh
|
|
|
|
kube-ps1 is included as a plugin in the oh-my-zsh project. To enable it, edit your `~/.zshrc` and
|
|
add the plugin:
|
|
|
|
```bash
|
|
plugins=(
|
|
kube-ps1
|
|
)
|
|
PROMPT='$(kube_ps1)'$PROMPT # or RPROMPT='$(kube_ps1)'
|
|
```
|
|
|
|
## Zsh zinit plugin
|
|
|
|
### Using [zinit](https://github.com/zdharma-continuum/zinit)
|
|
|
|
Update `.zshrc` with:
|
|
|
|
```sh
|
|
zinit light jonmosco/kube-ps1
|
|
PROMPT='$(kube_ps1)'$PROMPT # or RPROMPT='$(kube_ps1)'
|
|
```
|
|
|
|
### Fig
|
|
|
|
Install `kube-ps1` in zsh, bash, or fish with one click.
|
|
|
|
<a href="https://fig.io/plugins/other/kube-ps1" target="_blank"><img src="https://fig.io/badges/install-with-fig.svg" width="120" /></a>
|
|
|
|
### From Source (git clone)
|
|
|
|
1. Clone this repository
|
|
2. Source the kube-ps1.sh in your `~/.zshrc` or your `~/.bashrc`
|
|
|
|
#### Zsh
|
|
|
|
```sh
|
|
source /path/to/kube-ps1.sh
|
|
PROMPT='$(kube_ps1)'$PROMPT # or RPROMPT='$(kube_ps1)'
|
|
```
|
|
|
|
#### Bash
|
|
|
|
```sh
|
|
source /path/to/kube-ps1.sh
|
|
PS1='[\u@\h \W $(kube_ps1)]\$ '
|
|
```
|
|
|
|
## Requirements
|
|
|
|
The default prompt assumes you have the `kubectl` command line utility installed.
|
|
Official installation instructions and binaries are available:
|
|
|
|
[Install and Set up kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/)
|
|
|
|
If using this with OpenShift, the `oc` tool needs installed. It can be obtained
|
|
from brew ports:
|
|
|
|
```sh
|
|
brew install openshift-cli
|
|
```
|
|
|
|
or the source can be downloaded:
|
|
|
|
[OC Client Tools](https://github.com/okd-project/okd/releases)
|
|
|
|
Set the binary to `oc` with the following variable:
|
|
|
|
```sh
|
|
KUBE_PS1_BINARY=oc
|
|
```
|
|
|
|
If neither binary is available, the prompt will print the following:
|
|
|
|
```sh
|
|
(<symbol>|BINARY-N/A:N/A)
|
|
```
|
|
|
|
## Helper utilities
|
|
|
|
There are several great tools that make using kubectl very enjoyable:
|
|
|
|
- [`kubectx` and `kubens`](https://github.com/ahmetb/kubectx) are great for
|
|
fast switching between clusters and namespaces.
|
|
|
|
## Tmux port
|
|
|
|
I have begun porting kube-ps1 to tmux as a status line plugin. If you prefer
|
|
tmux, and like the functionality provided by kube-ps1, checkout the
|
|
[kube-tmux](https://github.com/jonmosco/kube-tmux) project
|
|
|
|
## Prompt Structure
|
|
|
|
The default prompt layout is:
|
|
|
|
```sh
|
|
(<symbol>|<context>:<namespace>)
|
|
```
|
|
|
|
If the current-context is not set, kube-ps1 will return the following:
|
|
|
|
```sh
|
|
(<symbol>|N/A:N/A)
|
|
```
|
|
|
|
## Enabling/Disabling
|
|
|
|
If you want to stop showing Kubernetes status on your prompt string temporarily
|
|
run `kubeoff`. To disable the prompt for all shell sessions, run `kubeoff -g`.
|
|
You can enable it again in the current shell by running `kubeon`, and globally
|
|
with `kubeon -g`.
|
|
|
|
```sh
|
|
kubeon : turn on kube-ps1 status for this shell. Takes precedence over
|
|
global setting for current session
|
|
kubeon -g : turn on kube-ps1 status globally
|
|
kubeoff : turn off kube-ps1 status for this shell. Takes precedence over
|
|
global setting for current session
|
|
kubeoff -g : turn off kube-ps1 status globally
|
|
```
|
|
|
|
## Symbol
|
|
|
|
The default symbols are UTF8 and should work with most fonts. If you want to use the Kubernetes and OpenShift
|
|
glyphs, you need to install a patched font that contains the glyph. [Nerd Fonts](https://www.nerdfonts.com/) provides both glyphs. Follow their installation instructions to install the patched font.
|
|
|
|
`KUBE_PS1_SYMBOL_CUSTOM` options
|
|
|
|
| Options | Symbol | Description |
|
|
| ------------- | ------ | ----------- |
|
|
| default (empty string) | ⎈ | Default symbol (Unicode `\u2388`) |
|
|
| img | ☸️ | Symbol often used to represent Kubernetes (Unicode `\u2638`) |
|
|
| oc |  | Symbol representing OpenShift (Unicode `\ue7b7`) |
|
|
| k8s |  | Symbol representing Kubernetes (Unicode `\ue7b7`) |
|
|
|
|
To set the symbol to one of the custom glyphs, add the following to your `~/.bashrc` or `~/.zshrc`:
|
|
|
|
```sh
|
|
KUBE_PS1_SYMBOL_CUSTOM=img
|
|
```
|
|
|
|
To set the symbol to the default, set the `KUBE_PS1_SYMBOL` to an empty string.
|
|
|
|
Heres a demo of the symbols in action:
|
|

|
|
|
|
If the font is not properly installed, and the glyph is not available, it will display an empty set of brackets or similar:
|
|
|
|
```sh
|
|
echo -n "\ue7b7"
|
|
|
|
```
|
|
|
|
## Customization
|
|
|
|
The default settings can be overridden in `~/.bashrc` or `~/.zshrc` by setting
|
|
the following variables:
|
|
|
|
| Variable | Default | Meaning |
|
|
| :------- | :-----: | ------- |
|
|
| `KUBE_PS1_BINARY` | `kubectl` | Default Kubernetes binary |
|
|
| `KUBE_PS1_NS_ENABLE` | `true` | Display the namespace. If set to `false`, this will also disable `KUBE_PS1_DIVIDER` |
|
|
| `KUBE_PS1_PREFIX` | `(` | Prompt opening character |
|
|
| `KUBE_PS1_SYMBOL_ENABLE` | `true` | Display the prompt Symbol. If set to `false`, this will also disable `KUBE_PS1_SEPARATOR` |
|
|
| `KUBE_PS1_SYMBOL_PADDING` | `false` | Adds a space (padding) after the symbol to prevent clobbering prompt characters |
|
|
| `KUBE_PS1_SYMBOL_CUSTOM` | `⎈` | Change the Default prompt symbol. Unicode `\u2388`. Options are `k8s`, `img`, `oc` |
|
|
| `KUBE_PS1_SYMBOL_COLOR` | `blue` | Change the Default symbol color. |
|
|
| `KUBE_PS1_SEPARATOR` | | | Separator between symbol and context name |
|
|
| `KUBE_PS1_DIVIDER` | `:` | Separator between context and namespace |
|
|
| `KUBE_PS1_SUFFIX` | `)` | Prompt closing character |
|
|
| `KUBE_PS1_CLUSTER_FUNCTION` | No default, must be user supplied | Function to customize how cluster is displayed |
|
|
| `KUBE_PS1_NAMESPACE_FUNCTION` | No default, must be user supplied | Function to customize how namespace is displayed |
|
|
| `KUBE_PS1_CTX_COLOR_FUNCTION` | No default, must be user supplied | Function to customize context color based on context name |
|
|
| `KUBE_PS1_HIDE_IF_NOCONTEXT` | `false` | Hide the kube-ps1 prompt if no context is set |
|
|
|
|
To disable a feature, set it to an empty string:
|
|
|
|
```sh
|
|
KUBE_PS1_SEPARATOR=''
|
|
```
|
|
|
|
## Colors
|
|
|
|
The default colors are set with the following variables:
|
|
|
|
| Variable | Default | Meaning |
|
|
| :------- | :-----: | ------- |
|
|
| `KUBE_PS1_PREFIX_COLOR` | `null` | Set default color of the prompt prefix |
|
|
| `KUBE_PS1_SYMBOL_COLOR` | `blue` | Set default color of the Kubernetes symbol |
|
|
| `KUBE_PS1_CTX_COLOR` | `red` | Set default color of the context |
|
|
| `KUBE_PS1_SUFFIX_COLOR` | `null` | Set default color of the prompt suffix |
|
|
| `KUBE_PS1_NS_COLOR` | `cyan` | Set default color of the namespace |
|
|
| `KUBE_PS1_BG_COLOR` | `null` | Set default color of the prompt background |
|
|
|
|
Blue was used for the default symbol to match the Kubernetes color as closely
|
|
as possible. Red was chosen as the context name to stand out, and cyan for the
|
|
namespace.
|
|
|
|
Set the variable to an empty string if you do not want color for each
|
|
prompt section:
|
|
|
|
```sh
|
|
KUBE_PS1_CTX_COLOR=''
|
|
```
|
|
|
|
Names are usable for the following colors:
|
|
|
|
```text
|
|
black, red, green, yellow, blue, magenta, cyan
|
|
```
|
|
|
|
256 colors are available by specifying the numerical value as the variable
|
|
argument.
|
|
|
|
## Customize display of cluster name and namespace
|
|
|
|
You can change how the cluster name and namespace are displayed using the
|
|
`KUBE_PS1_CLUSTER_FUNCTION` and `KUBE_PS1_NAMESPACE_FUNCTION` variables
|
|
respectively.
|
|
|
|
For the following examples let's assume the following:
|
|
|
|
cluster name: `sandbox.k8s.example.com`
|
|
namespace: `alpha`
|
|
|
|
If you're using domain style cluster names, your prompt will get quite long
|
|
very quickly. Let's say you only want to display the first portion of the
|
|
cluster name (`sandbox`), you could do that by adding the following:
|
|
|
|
```sh
|
|
function get_cluster_short() {
|
|
echo "$1" | cut -d . -f1
|
|
}
|
|
|
|
KUBE_PS1_CLUSTER_FUNCTION=get_cluster_short
|
|
```
|
|
|
|
The same pattern can be followed to customize the display of the namespace.
|
|
Let's say you would prefer the namespace to be displayed in all uppercase
|
|
(`ALPHA`), here's one way you could do that:
|
|
|
|
```sh
|
|
function get_namespace_upper() {
|
|
echo "$1" | tr '[:lower:]' '[:upper:]'
|
|
}
|
|
|
|
export KUBE_PS1_NAMESPACE_FUNCTION=get_namespace_upper
|
|
```
|
|
|
|
In both cases, the variable is set to the name of the function, and you must have defined the function in your shell configuration before kube_ps1 is called. The function must accept a single parameter and echo out the final value.
|
|
|
|
## Dynamic Context Colors
|
|
|
|
You can set different colors for different contexts using the
|
|
`KUBE_PS1_CTX_COLOR_FUNCTION` variable. This is useful for color-coding
|
|
contexts to make production environments stand out visually.
|
|
|
|
For example, to make production contexts red and development contexts green:
|
|
|
|
```sh
|
|
function kube_ps1_ctx_color() {
|
|
local context="$1"
|
|
|
|
case "$context" in
|
|
*prod*)
|
|
echo "red"
|
|
;;
|
|
*dev*)
|
|
echo "green"
|
|
;;
|
|
*staging*|*stg*)
|
|
echo "yellow"
|
|
;;
|
|
*)
|
|
echo "cyan" # default color for other contexts
|
|
;;
|
|
esac
|
|
}
|
|
|
|
export KUBE_PS1_CTX_COLOR_FUNCTION=kube_ps1_ctx_color
|
|
```
|
|
|
|
The function receives the context name as the first parameter and should echo
|
|
the desired color name. All color options supported by `KUBE_PS1_CTX_COLOR` are
|
|
available, including named colors (black, red, green, yellow, blue, magenta,
|
|
cyan, white) and 256-color codes (0-256).
|
|
|
|
If `KUBE_PS1_CTX_COLOR_FUNCTION` is not set, kube-ps1 will use the value of
|
|
`KUBE_PS1_CTX_COLOR` (default: red).
|
|
|
|
### Bug Reports and shell configuration
|
|
|
|
Due to the vast ways of customizing the shell, please try the prompt with a
|
|
minimal configuration before submitting a bug report.
|
|
|
|
This can be done as follows for each shell before loading kube-ps1:
|
|
|
|
Bash:
|
|
|
|
```sh
|
|
bash --norc
|
|
```
|
|
|
|
Zsh:
|
|
|
|
```sh
|
|
zsh -f
|
|
or
|
|
zsh --no-rcs
|
|
```
|
|
|
|
For the prompt symbol, a patched font that contains the glyphs must be installed.
|
|
[Nerd Fonts Downloads](https://www.nerdfonts.com/font-downloads) provides patched
|
|
fonts containing the glyphs. Please consult their documentation for this, support
|
|
is out of scope for this project.
|
|
|
|
### Contributors
|
|
|
|
Thank you to everyone in the community for their contributions to kube-ps1!
|
|
|
|
<a href="https://github.com/jonmosco/kube-ps1/graphs/contributors">
|
|
<img src="https://contrib.rocks/image?repo=jonmosco/kube-ps1" />
|
|
</a>
|