k9sは便利だけどkubectlも忘れないで
はじめに
この記事はGMOメディア株式会社 Advent Calender 2024の4日目の記事です。
初めまして、GMOメディア株式会社のwaka9841です。
k8s初心者がリソースを操作するのにk9sを使ってみてどれだけ便利なのか、そしてその落とし穴についての体験を記事にしてみました。
※k9sの設定に関しては調べればたくさん出てくるのでこの記事では触れません。
結論
kubectlだとこうだけど、k9sだとこんな感じだよと言う内容になっているので、先に結論を述べちゃいます。
一言で言うと
k9sはとても便利だがkubectlでの操作ができなくなってしまう!!
どう言うことかと言うと、
k9sが便利すぎてkubectlを叩かなくなってしまい、k9sがない環境での作業を強いられた際などに困ってしまうということです。
そのためkubectlをある程度は叩けるようになっておくべきだなと感じたのです。
(無ければk9sを入れればいいと言うわけにもいかない環境も中には存在すると思うので)
k9sがどれだけ便利か
k9sはコンソールでインタラクティブにk8sのリソースを見ることができるのと、Vimと同じ感覚で操作が行えるので、Vimなどに触り慣れている人には特に操作しやすいと思います。
Vimを普段触らない人でもkubectlを直接叩くよりも、コマンドの入力ミスを激減させられると思うのでお勧めしたいです。
Rancherも少し触って見ましたが、個人的にはk9sの方が扱いやすく感じました。
この辺りは、GUI派なのかCLI派なのかと言った違いかなと思います。
podの状態を見る
k9sを使うとどれだけ便利なのか、
例を作りやすかったpodの状態を見る時を例にしますが、他のリソースに対してもインタラクティブな画面で同じようにリソースを操作することができます。
podの一覧表示
podの一覧を見る場合kubectl
だとこんな感じに見ることができます。
$ kubectl get pods -n default
NAME READY STATUS RESTARTS AGE
hello-server-6fc4b54d88-fddcf 1/1 Running 0 18s
hello-server-6fc4b54d88-phqzc 1/1 Running 0 18s
hello-server-6fc4b54d88-rz5cp 1/1 Running 0 18s
deploymentをインポートした時なんかに各podのステータスなどをチェックし続けたい時は-w
のオプションでこんな感じに見ることができます。
$ kubectl get pods -n default -w
NAME READY STATUS RESTARTS AGE
hello-server-6fc4b54d88-mcc5k 0/1 Pending 0 0s
hello-server-6fc4b54d88-mcc5k 0/1 Pending 0 0s
hello-server-6fc4b54d88-8jvl7 0/1 Pending 0 0s
hello-server-6fc4b54d88-9gthb 0/1 Pending 0 0s
hello-server-6fc4b54d88-8jvl7 0/1 Pending 0 0s
hello-server-6fc4b54d88-9gthb 0/1 Pending 0 0s
hello-server-6fc4b54d88-mcc5k 0/1 ContainerCreating 0 0s
hello-server-6fc4b54d88-8jvl7 0/1 ContainerCreating 0 0s
hello-server-6fc4b54d88-9gthb 0/1 ContainerCreating 0 0s
hello-server-6fc4b54d88-mcc5k 1/1 Running 0 1s
hello-server-6fc4b54d88-9gthb 1/1 Running 0 1s
hello-server-6fc4b54d88-8jvl7 1/1 Running 0 1s
がしかし、k9sだとこんな感じで表示され、podの変化がリアルタイムに反映されるのでとても見やすいのです!!
画面上部によく使いそうなコマンドが常に表示されているのもすごく嬉しい!!!
特定のpod一覧表示
1つのnamespaceに複数種類のpodがいて、特定のreplicasetに紐づいているpodだけを表示したい場合は、取得方法はいろいろあるがこんな感じに取得できます。
これは、replicasetのdescribeからLabel(app=hello-server
)を確認し、kubectlの-l
オプションでLabelを指定しています。
$ kubectl get pods -l app=hello-server
NAME READY STATUS RESTARTS AGE
hello-server-6fc4b54d88-8jvl7 1/1 Running 0 23m
hello-server-6fc4b54d88-9gthb 1/1 Running 0 23m
hello-server-6fc4b54d88-mcc5k 1/1 Running 0 23m
k9sの場合はVimのように:
でコマンドモードに入りreplicaset
と入力し、
そしてエンターを押すとreplicasetが表示されます。
任意のreplicasetにカーソルを合わせてエンターを押せばこんな感じに表示されます。
もちろんpodの変化もリアルタイムに反映されます。
コンテナのログ
直接コンテナのログを見たい時もたまにあるかもしれません。
そんな時kubectlだとこんな感じに、pod名とコンテナ名を指定する必要があります。
(サンプルとして立ち上げただけのpodなのでログが全くなくてすみません)
$ kubectl logs hello-server-6fc4b54d88-8jvl7 -c hello-server
2024/12/02 12:27:02 Starting server on port 8080
pod名の後ろの部分はランダムな文字列だからpodが作り替えられるたびに確認しないといけないのはちょっと面倒に感じました。
(kubectl completionなんてのがあるのでものすごく面倒ってわけでもないです)
だがk9sだとpod一覧から任意のpodにカーソルを合わせたらエンターを押すだけでコンテナ一覧が表示され、
そこでl
を押すだけでコンテナのログを見ることができます。
podのdescribeを見る
kubectlだとdescribeを表示するだけで、検索などをしたい場合は|
でlessなどに渡すなどの一手間が必要ですが、
$ kubectl describe pod hello-server-6fc4b54d88-8jvl7
Name: hello-server-6fc4b54d88-8jvl7
Namespace: default
Priority: 0
Service Account: default
Node: kind-multlnode-worker2/172.18.0.3
Start Time: Mon, 02 Dec 2024 21:27:02 +0900
Labels: app=hello-server
pod-template-hash=6fc4b54d88
Annotations: <none>
Status: Running
IP: 10.244.1.10
IPs:
IP: 10.244.1.10
Controlled By: ReplicaSet/hello-server-6fc4b54d88
Containers:
hello-server:
Container ID: containerd://914458d6deba2b2a4a8412755df0330678aa2a79ec2c7acec2925434d129e7da
~~~ 以下略 ~~~
k9sではpodの一覧で任意のpodにカーソルを合わせてd
を押すだけでdescribeを確認できて、Vimのように検索とかできるのがすごく便利です!
最後に
k9sを使ってすごく便利だなと思うところは他にもたくさんあるのですが、私が普段の業務で使用頻度の高めなものを中心に書いて見ました。
数ヶ月前に業務でk8sを扱うようになるまで実際に触ったことが1度もなかった状態で、k9sを最初から使ってしまった私は、現在kubectlで同じことをやろうとするとものすごく時間がかかるよになってしまいました。😅
すごく便利だけど、kubectlでの操作を知った上でk9sを扱うことでどんな環境でもk8sのリソースを操作することができるようになるのではないかと感じています。
この記事はGMOメディア株式会社 Advent Calender 2024の4日目の記事ですので、他の日の記事もぜひお読みください。
Discussion
k9sは、使ってみると本当に便利!
kubectlで3年以上やってきたわたしも、いまやk9s信者になりました
必要なのはk9s本体だけで、クラスタ内にエージェントなどのインストールを必要としないのもいいですね!