Kubernetes 컨텍스트를 일정 시간 동안 유지하고 사용하는 fish 함수

소개



Kubernetes의 여러 개발 환경을 다루는 경우 kubectl config set-context 또는 kubectx와 같은 플러그인을 사용하여 컨텍스트를 전환하지만이 방법으로 의도하지 않은 환경을 조작하는 경우가 종종 있습니다.

그래서 Kubernetes의 컨텍스트를 일정 시간만큼 유지해 이용하는 fish 함수를 써 보았습니다.

설명



사전 준비



다음을 사용할 수 있는 환경을 전제로 하고 있습니다.
- kubectl
- fish
- peco

fish function 만들기



function 이름은 kubettl입니다.$HOME/.config/fish/functions/kubettl.fish라는 파일을 작성하고 다음 소스를 작성합니다.
function kubettl
    # 利用する変数の初期化
    set ctx_dir $HOME/.context
    set cxt_file $ctx_dir/kubectx
    set ctx

    # コンテキストが保持されていても無視する `--ignore` オプションの指定を確認
    set cmd_argv $argv
    if [ $argv[1] = '--ignore' ]
        set cmd_argv $argv[2..-1]
    end

    # コンテキストの決定
    if [ $argv[1] != '--ignore' ]; and test (find $cxt_file -mmin -10 ^ /dev/null | wc -l) -eq 1
        # 利用可能なコンテキストがあれば使う
        set ctx (cat $cxt_file)
    else
        # 無ければ peco を利用して選択する
        set ctx (string split ' ' (kubectl config view -o jsonpath='{.users[*].name}') | peco)
    end

    # コンテキストをファイルへ出力
    test -d $ctx_dir; or mkdir $ctx_dir
    echo $ctx >$cxt_file

    # コンテキストを指定してコマンド実行
    kubectl --context=$ctx $cmd_argv
end

컨텍스트를 일정 시간 동안 사용하는 방법에 대해



문맥을 파일에 출력해, 그 파일의 갱신 일시가 10 min 이내이면 그 내용을 이용하도록 하고 있습니다.
find hoge -mmin -10

이렇게 하면 hoge 파일이 10분 이내에 업데이트된 경우에만 결과가 출력됩니다.
* find 명령의 mtime 옵션 요약 라는 기사가 참고가 됩니다.

해당 파일이 없으면 오류가 발생하기 때문에 소스에서 ^ /dev/null를 붙인 다음 행 수를 계산합니다.
test (find hoge -mmin -10 ^ /dev/null | wc -l) -eq 1

사용법


kubectl 대신 kubettl를 사용하면됩니다.
kubettl get pods



마지막으로



단순히 컨텍스트를 파일에 내보내고 일정 시간 내에만 이용하는 기법이므로 물론 Kubernetes 컨텍스트에 한하지 않고 이용할 수 있습니다.

좋은 웹페이지 즐겨찾기