k9sで快適なk8sライフを送ろう!

はじめに

みなさん、こんにちは。 主にBUYMAの検索周り、時々機械学習なエンジニアの伊藤です。

今年もあっという間の1年でしたね。
振り返ってみると多くのことを学ばせてもらい、また成長させてもらった1年でした。
その中でもk8sがやはり自分の中では中心だった気がします。
なので今回はk8sネタで今年を締めくくりたいと思います。

k9sとは?

k9sとはk8s上のリソースを監視、管理するためのCLIツールです。
k8sCLIといえばkubectlデファクトですが、そのI/Fをよりリッチに使いやすくしたのがこのツールです。

f:id:pma1013:20191210142021p:plain
公式のページはこちら

読み方はけぃないんずだと思います(たぶん)
個人的になぜ犬のロゴなんだろうというのがまず引っかかったので軽く調べたところ、 canine=犬のヌメロニム表記であるk9と、kubernetesk8sが表記的に近いから犬なんだなと勝手に納得することにしました。

使ってみる

では実際にk9sをインストールして使ってみましょう。
LinuxOSXWindows上で動作するようですが、今回はMac上でインストールして動かしてみたいと思います。

  • インストール

    brew install derailed/k9s/k9s

  • 起動

    k9s

f:id:pma1013:20191210150446p:plain

表示される情報については大きく2つの領域に分かれており、上部に現在使用しているkubectlのcontext、クラスタ名や、コマンドヘルプ等が固定表示され、
枠内にpodの一覧など、指定した情報が表示されるようになっています。
デフォルトではkubectl get podで取得できる項目相当の一覧が見れますが、CPU、メモリ使用率なども表示されます。

  • 基本操作について
    基本的なところさえ抑えておけば、あとは直感的に操作が可能です。
    • コマンドモード
      :でコマンドモードになります。
      続けて、k8sのリソース名(alias名でも可)を指定することでその一覧が表示されます。
      指定するリソース名を忘れた場合はCtrl-aで確認できます。
      例えば、deploymentの一覧を確認したい場合は:dpと入力してEnterでdeploymentの一覧が表示できます。
      Escでコマンドモードを抜けます。
      f:id:pma1013:20191213105637g:plain

    • フィルター
      /のあとにフィルターを指定することで絞り込みが可能です。
      kubectlと同じうように-l app=XXXXで任意のラベルで絞りこみが可能ですし、
      任意の文字列だけ入力してもその文字列がpod名やnode名に含まれれば絞り込みが可能です。
      Escでフィルターを解除します。
      f:id:pma1013:20191213121414g:plain

    • ソート
      Shiftと特定のキーで項目毎のソートが可能です
      各項目とキーのマッピング?で確認できます。
      昇順/降順の切り替えはShift-iで行います。

実践的な使いどころ

基本操作が分かったところで、よりk9sの便利さが伝わるように下記のような場面を想定した操作をしてみます。

  • あるdeploymentリソースに異常があり、該当のdeployment及びその配下のpodのdescribeを確認して、ログを確認する
    f:id:pma1013:20191213121938g:plain

  • podへのport-forward f:id:pma1013:20191213122419g:plain

所感

kubectlに慣れている人や、aliasやpeco等でコマンド操作自体をゴリゴリにチューニングしている場合は、 k9sの使い始めは慣れない分、「そこまで便利か?」っていう感じを受けるかもしれません。 自分は最終的にどちらかに移行するというよりは、下記のような使い分けをすることで落ちついています。

  • 単発の確認はkubectl
    例えば今のpod一覧を知りたい時など、特定の情報だけ知りたい場合はわざわざk9sを起動する方が手間なので、kubectlだけで済ませています。

  • 解析作業や複数のコンテキストを跨る作業
    こういう場合は圧倒的にk9sが便利です。
    上でも記載していますが、クラスタ側に何か異常があった場合には、様々なリソースの情報を見ていくことになると思います。 そういった場合にはk9s上であれば、 わざわざコマンドを打つことなく少ないキー操作で確認が可能です。
    また、複数のkubectlコンテキスト内のリソースを同時にみるのはkubectlではできませんが、
    k9sでは別ターミナルで起動してコンテキストを切り替えることで、
    ターミナルの切り替えだけで複数コンテキストの操作や参照が可能になります。

最後に

k8sとその周辺エコシステムは進化が激しく、日々新しい機能やツールが出てきている印象です。 キャッチアップが大変ですが、今後も日々の運用やシステムの安定性に繋がるようなものは時間を見つけて試していきたいと思います。

株式会社エニグモ 正社員の求人一覧

hrmos.co