README.md 6.67 KB
Newer Older
1
2
kube-ps1: Kubernetes prompt for bash and zsh
============================================
Jon Mosco's avatar
Jon Mosco committed
3

4
5
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`).
Jon Mosco's avatar
Jon Mosco committed
6

7
Inspired by several tools used to simplify usage of `kubectl`.
Jon Mosco's avatar
Jon Mosco committed
8

9
## Installing
Jon Mosco's avatar
Jon Mosco committed
10

11
### MacOS
Jon Mosco's avatar
Jon Mosco committed
12

13
Homebrew package manager:
Jon Mosco's avatar
Jon Mosco committed
14

15
16
17
18
19
```
$ brew update
$ brew install kube-ps1
```
### From Source
Jon Mosco's avatar
Jon Mosco committed
20

21
22
1. Clone this repository
2. Source the kube-ps1.sh in your `~/.zshrc` or your `~/.bashrc`
Jon Mosco's avatar
Jon Mosco committed
23

24
25
### Arch Linux
AUR Package available at [https://aur.archlinux.org/packages/kube-ps1/](https://aur.archlinux.org/packages/kube-ps1/).
Jon Mosco's avatar
Jon Mosco committed
26

27
28
29
30
#### Zsh
```sh
source /path/to/kube-ps1.sh
PROMPT='$(kube_ps1)'$PROMPT
Jon Mosco's avatar
Jon Mosco committed
31
```
32
33
34
35
#### Bash
```sh
source /path/to/kube-ps1.sh
PS1='[\u@\h \W $(kube_ps1)]\$ '
Jon Mosco's avatar
Jon Mosco committed
36
37
```

38
### Zsh Plugin Managers
Jon Mosco's avatar
Jon Mosco committed
39

40
#### Using [zplugin](https://github.com/zdharma/zplugin)
Jon Mosco's avatar
Jon Mosco committed
41

42
43
44
45
Update `.zshrc` with:
```sh
zplugin light jonmosco/kube-ps1
PROMPT='$(kube_ps1)'$PROMPT
Jon Mosco's avatar
Jon Mosco committed
46
```
47

48
## Requirements
49

50
51
The default prompt assumes you have the `kubectl` command line utility installed.
Official installation instructions and binaries are available:
52

53
54
55
56
57
58
59
[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:

```
brew install openshift-cli
60
```
61
62
63
or the source can be downloaded:

[OC Client Tools](https://www.openshift.org/download.html)
64

65
Set the binary to `oc` with the following environment variable:
66

67
68
69
```
KUBE_PS1_BINARY=oc
```
70

71
If neither binary is available, the prompt will print the following:
72
73

```
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
(<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:
93

94
95
```
(<symbol>|<context>:<namespace>)
Jon Mosco's avatar
Jon Mosco committed
96
97
```

98
If the current-context is not set, kube-ps1 will return the following:
Jon Mosco's avatar
Jon Mosco committed
99

100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
```
(<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`.

```
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
```
Jon Mosco's avatar
Jon Mosco committed
119
120
121

## Customization

122
123
The default settings can be overridden in `~/.bashrc` or `~/.zshrc` by setting
the following environment variables:
Jon Mosco's avatar
Jon Mosco committed
124
125
126

| Variable | Default | Meaning |
| :------- | :-----: | ------- |
127
| `KUBE_PS1_BINARY` | `kubectl` | Default Kubernetes binary |
128
| `KUBE_PS1_NS_ENABLE` | `true` | Display the namespace. If set to `false`, this will also disable `KUBE_PS1_DIVIDER` |
Jon Mosco's avatar
Jon Mosco committed
129
| `KUBE_PS1_PREFIX` | `(` | Prompt opening character  |
130
131
132
| `KUBE_PS1_SYMBOL_ENABLE` | `true ` | Display the prompt Symbol. If set to `false`, this will also disable `KUBE_PS1_SEPARATOR` |
| `KUBE_PS1_SYMBOL_DEFAULT` | `⎈ ` | Default prompt symbol. Unicode `\u2388` |
| `KUBE_PS1_SYMBOL_USE_IMG` | `false` | ☸️  ,  Unicode `\u2638` as the prompt symbol |
133
134
| `KUBE_PS1_SEPARATOR` | &#124; | Separator between symbol and context name |
| `KUBE_PS1_DIVIDER` | `:` | Separator between context and namespace |
Jon Mosco's avatar
Jon Mosco committed
135
| `KUBE_PS1_SUFFIX` | `)` | Prompt closing character |
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
| `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 |

For terminals that do not support UTF-8, the symbol will be replaced with the
string `k8s`.

To disable a feature, set it to an empty string:

```
KUBE_PS1_SEPARATOR=''
```

## Colors

The default colors are set with the following environment variables:

| Variable | Default | Meaning |
| :------- | :-----: | ------- |
| `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_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:

```
KUBE_PS1_CTX_COLOR=''
```

Names are usable for the following colors:

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

### 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:
```bash
bash --norc
```

Zsh:
```bash
zsh -f
or
zsh --no-rcs
```
Jon Mosco's avatar
Jon Mosco committed
234
235
236

## Contributors

237
238
* [Ahmet Alp Balkan](https://github.com/ahmetb)
* Jared Yanovich