kube-ps1をstartship上で設定する
kube-ps1をstar ship上で表示できるように設定する
ubuntuでzshを利用しており、starshipを導入した時にkube-ps1
がうまくコンテキストを読み込めなかったので
starshipの設定を見てみたところ色々記載されていた。
結論kubectl set-context
でコンテキストの設定を行う必要がある
kube-ps1
kubectlで設定した現在のKubernetesコンテキストと名前空間を
Bash/Zsh
のプロンプト文字列(つまり$PS1)に追加できるスクリプトです。
今回は直接sourceをcloneして起動させています。
starship
無限にカスタマイズ可能なシェル用のプロンプト
configuration for kubernetes on starship
設定方法はstarshipのドキュメントに書いてあった。
Displays the current Kubernetes context name and, if set, the namespace, user and cluster from the kubeconfig file. The namespace needs to be set in the kubeconfig file, this can be done via kubectl config set-context starship-context --namespace astronaut.
現在のKubernetesコンテキスト名を表示し、kubeconfig ファイルに設定されている場合は、名前空間、ユーザー、クラスターも表示する。
名前空間はkubeconfigファイルに設定される必要があり、これは kubectl config set-context starship-context --namespace astronaut
のようなコマンドを使用して設定可能。
つまりkubectl config set-context starship-context --namespace astronaut
を実行すれば設定できる
kubectl config
Modify kubeconfig files using subcommands like "kubectl config set
current-context my-context".
新しいコンテキストを作成したり、既存のコンテキストを更新するサブコマンド
kubectl config set-context
set-context: Set a context entry in kubeconfig
追加、もしくは更新したいコンテキストを選択する
--namespace astronaut
--namespace='':
namespace for the context entry in kubeconfig
対象のコンテキストのデフォルトの名前空間を astronaut に設定します。
kube-ps1.sh コンテキストの設定
kube-ps1.sh
の中身を見てみると、KUBE_PS1_CONTEXT_ENABLE=true
の場合
kubectl
コマンドで現在のコンテキストを設定している
KUBE_PS1_BINARY="${KUBE_PS1_BINARY:-kubectl}"
...省略
_kube_ps1_get_context() {
if [[ "${KUBE_PS1_CONTEXT_ENABLE}" == true ]]; then
KUBE_PS1_CONTEXT="$(${KUBE_PS1_BINARY} config current-context 2>/dev/null)"
# Set namespace to 'N/A' if it is not defined
KUBE_PS1_CONTEXT="${KUBE_PS1_CONTEXT:-N/A}"
if [[ -n "${KUBE_PS1_CLUSTER_FUNCTION}" ]]; then
KUBE_PS1_CONTEXT="$("${KUBE_PS1_CLUSTER_FUNCTION}" "${KUBE_PS1_CONTEXT}")"
fi
fi
}
zshかbashによって対応を変えており、
zshの場合は、zshのフック関数でプロンプトの表示するタイミングで
上記コンテキストの反映に関するスクリプトを実行するように登録している
case "$(_kube_ps1_shell_type)" in
"zsh")
_KUBE_PS1_OPEN_ESC="%{"
_KUBE_PS1_CLOSE_ESC="%}"
_KUBE_PS1_DEFAULT_BG="%k"
_KUBE_PS1_DEFAULT_FG="%f"
setopt PROMPT_SUBST
autoload -U add-zsh-hook
add-zsh-hook precmd _kube_ps1_prompt_update
zmodload -F zsh/stat b:zstat
zmodload zsh/datetime
;;
"bash")
_KUBE_PS1_OPEN_ESC=$'\001'
_KUBE_PS1_CLOSE_ESC=$'\002'
_KUBE_PS1_DEFAULT_BG=$'\033[49m'
_KUBE_PS1_DEFAULT_FG=$'\033[39m'
[[ $PROMPT_COMMAND =~ _kube_ps1_prompt_update ]] || PROMPT_COMMAND="_kube_ps1_prompt_update;${PROMPT_COMMAND:-:}"
;;
esac
カスタマイズする方法
Customization
The default settings can be overridden in ~/.bashrc or ~/.zshrc by setting the following variables:
KUBE_PS1_SYMBOL_COLORを変更する場合は.zshrc
に下記設定を加えることで上書きすることができる
KUBE_PS1_SYMBOL_COLOR='green'
他にもカスタマイズできる項目はいくつかある
Discussion