Kubernetesを使う上で知っておきたいツールやプラグイン
本記事では、普段Kubernetesを触っている中で便利に感じたツールやコマンドをざっくばらんに紹介します。
Kubernetes初心者からベテランまで幅広く楽しんでいただければ幸いです。
krew
krewでは、kubectlのプラグイン管理を行います。
これ以降、本記事で紹介するプラグインは全てkrew経由でインストールが可能です。
インストール
brew install krew
インストール可能なプラグイン一覧
kubectl krew search
プラグインのインストール・アンインストール
kubectl krew install <plugin name>
kubectl krew uninstall <plugin name>
インストール済みのプラグイン一覧
kubectl krew list
では、早速kubectlプラグインを紹介していきます!
stern
sternとは、Kubernetes上の複数のPodと、Pod内の複数のコンテナをtailすることができます。
また、各Podは色分けされているのでデバッグがとても捗ります。
sternを使わない場合、Pod名を検索して、kubectl logs ~と実行する必要がありますが、sternを使うことでそれらを省略することができとても便利です。
インストール
kubectl krew install stern
特に、自分がよく使うコマンドを紹介します。
基本
stern nginx-deployment
ラベルでフィルタリング
stern -l run=nginx-deployment
jqを使って整形
stern nginx-deployment --output json | jq .
ログの行数を指定
stern nginx-deployment --tail 1
kube-iexec
kubectl-iexec は、実行中のPodにexecするためのインタラクティブなセレクタを提供するプラグインです。
Pod名やPod内のコンテナ名を把握することなくkubectl exec
することができます。
インストール
kubectl krew install iexec
基本
kubectl iexec nginx
Namespace内のPodにexecする
kubectl iexec -n default
kubectl-view-allocations
kubectl-view-allocationsは、Nodeや実行中のPodのマニフェストに定義されているリソースの割り当てを一覧表示します
インストールkubectl krew install view-allocations
基本
❯ kubectl-view-allocations
Resource Requested Limit Allocatable Free
cpu (16%) 950.0m (2%) 100.0m 6.0 5.0
└─ kind-control-plane (16%) 950.0m (2%) 100.0m 6.0 5.0
├─ coredns-558bd4d5db-8sk5w 100.0m __ __ __
├─ coredns-558bd4d5db-l4c4f 100.0m __ __ __
├─ etcd-kind-control-plane 100.0m __ __ __
├─ kindnet-nrmss 100.0m 100.0m __ __
├─ kube-apiserver-kind-control-plane 250.0m __ __ __
├─ kube-controller-manager-kind-control-plane 200.0m __ __ __
└─ kube-scheduler-kind-control-plane 100.0m __ __ __
ephemeral-storage (0%) 100.0Mi __ 58.4Gi 58.3Gi
└─ kind-control-plane (0%) 100.0Mi __ 58.4Gi 58.3Gi
└─ etcd-kind-control-plane 100.0Mi __ __ __
memory (4%) 290.0Mi (5%) 390.0Mi 7.8Gi 7.4Gi
└─ kind-control-plane (4%) 290.0Mi (5%) 390.0Mi 7.8Gi 7.4Gi
├─ coredns-558bd4d5db-8sk5w 70.0Mi 170.0Mi __ __
├─ coredns-558bd4d5db-l4c4f 70.0Mi 170.0Mi __ __
├─ etcd-kind-control-plane 100.0Mi __ __ __
└─ kindnet-nrmss 50.0Mi 50.0Mi __ __
pods (14%) 15.0 (14%) 15.0 110.0 95.0
└─ kind-control-plane (14%) 15.0 (14%) 15.0 110.0 9
Memory割り当て表示
❯ kubectl-view-allocations -r memory
Resource Requested Limit Allocatable Free
memory (4%) 290.0Mi (5%) 390.0Mi 7.8Gi 7.4Gi
└─ kind-control-plane (4%) 290.0Mi (5%) 390.0Mi 7.8Gi 7.4Gi
├─ coredns-558bd4d5db-8sk5w 70.0Mi 170.0Mi __ __
├─ coredns-558bd4d5db-l4c4f 70.0Mi 170.0Mi __ __
├─ etcd-kind-control-plane 100.0Mi __ __ __
└─ kindnet-nrmss 50.0Mi 50.0Mi __ __
CPU割り当て表示
❯ kubectl-view-allocations -r cpu
Resource Requested Limit Allocatable Free
cpu (16%) 950.0m (2%) 100.0m 6.0 5.0
└─ kind-control-plane (16%) 950.0m (2%) 100.0m 6.0 5.0
├─ coredns-558bd4d5db-8sk5w 100.0m __ __ __
├─ coredns-558bd4d5db-l4c4f 100.0m __ __ __
├─ etcd-kind-control-plane 100.0m __ __ __
├─ kindnet-nrmss 100.0m 100.0m __ __
├─ kube-apiserver-kind-control-plane 250.0m __ __ __
├─ kube-controller-manager-kind-control-plane 200.0m __ __ __
└─ kube-scheduler-kind-control-plane 100.0m __ __ __
NodeごとにCPU/Memory表示
❯ kubectl-view-allocations -g node -r cpu
Resource Requested Limit Allocatable Free
cpu (16%) 950.0m (2%) 100.0m 6.0 5.0
└─ kind-control-plane (16%) 950.0m (2%) 100.0m 6.0 5.0
❯ kubectl-view-allocations -g node -r memory
Resource Requested Limit Allocatable Free
memory (4%) 290.0Mi (5%) 390.0Mi 7.8Gi 7.4Gi
└─ kind-control-plane (4%) 290.0Mi (5%) 390.0Mi 7.8Gi 7.4Gi
似たようなプラグインとして、kube-capacityもあります。
こちらは、CPU/Memory使用量でのSortなどが可能になっています。
その他のおすすめkubectlプラグイン
プラグイン | 内容 |
---|---|
kubectl-images | Podが使用しているImageを一覧表示 |
ksniff | tcpdump と Wireshark を利用して、任意のPodのリモートキャプチャを開始する |
kubie | 複数のシェルで異なるコンテキストを扱える。多くのクラスタの操作が必要な場合に重宝する |
kubectl-tree | ownerReferencesを通して、オブジェクト間の所有関係を調べる。Custom Operatorの開発に役立つかも |
kube-capacity | Kubernetesクラスタのリソース要求、制限、および利用の概要を提供する |
ここでは全ては書ききれませんが、GitHubにてkubectl
トピックを眺めてみると自分に合ったプラグインがきっと見つかります!
k9s
k9sとは、kubernetesクラスタとやりとりするためのターミナルUIです。
インストール
brew install k9s
特に、自分がよく使うコマンドを紹介します。
リソース一覧
コマンド | 内容 |
---|---|
:ns |
Namespace一覧を表示 |
:no |
Node一覧を表示 |
:deploy |
Deployment一覧を表示 |
:po |
Pod一覧を表示 |
:hpa |
HPA一覧を表示 |
:poddisruptionbudget |
PodDisruptionBudget一覧を表示 |
リソース選択
コマンド | 内容 |
---|---|
ctrl-f |
1ページ下に移動 |
ctrl-b |
1ページ上に移動 |
g |
先頭に移動 |
G |
末尾に移動 |
ESC |
1つ前のリソースに戻る |
/ |
検索 |
リソースのソート
コマンド | 内容 |
---|---|
shift-c |
CPU使用量でソート |
shift-m |
Memory使用量でソート |
shift-s |
Statusでソート |
ctrl-z |
異常なStatusでソート |
ログ
コマンド | 内容 |
---|---|
f |
フルスクリーンで表示 |
w |
ログを画面内に収める |
s |
Auto Scroll |
c |
Copy |
shift-c |
Clear |
その他
Node関連
コマンド | 内容 |
---|---|
r |
drain |
u |
uncordon |
Deployment関連
コマンド | 内容 |
---|---|
ctrl-t |
rollout restart |
s |
replica数変更 |
i |
image変更 |
c |
Deployment名をcopy |
Pod関連
コマンド | 内容 |
---|---|
ctrl-d |
delete |
i |
image変更 |
c |
Pod名をcopy |
その他
コマンド | 内容 |
---|---|
:pop |
popeyeの実行結果を確認 |
リソース全般の設定の問題点などを検出してScoreを出してくれます。
コマンド | 内容 |
---|---|
:xray [RESOURCE] |
クラスタリソースの依存関係を確認 |
Lens
Kubernetesクラスタのリソースのモニタリング・デプロイを行うことのできるデスクトップアプリケーションです。
kind
kindは、Dockerコンテナのノードを使ってローカルのKubernetesクラスタを実行することが可能です。
Kubernetesを使った検証を行う場合にとても便利です。
本記事での動作確認もkindを使用しています。
EKS関連
EKSクラスターのkubeconfigを作成する
aws eks --region <region-code> update-kubeconfig --name <cluster_name>
インスタンスタイプ一覧を参照
kubectl get node -L node.kubernetes.io/instance-type
NAME STATUS ROLES AGE VERSION INSTANCE-TYPE
test-node Ready <none> 6d10h v1.21.1 m5.xlarge
Region/Zone一覧を参照
❯ kubectl get node -L topology.kubernetes.io/region
NAME STATUS ROLES AGE VERSION REGION
test-node Ready <none> 6d10h v1.21.1 ap-northeast-1
❯ kubectl get node -L topology.kubernetes.io/zone
NAME STATUS ROLES AGE VERSION ZONE
test-node Ready <none> 6d11h v1.21.1 ap-northeast-1a
Nodegroup一覧を参照
kubectl get node -L nodegroup-name
NAME STATUS ROLES AGE VERSION NODEGROUP-NAME
test-node Ready <none> 6d10h v1.21.1 test-nodegroup-name
kubectl-topologyを使ってTopology一覧を参照
kubectl-topologyは、KubernetesクラスタのTopologyを出力します。
TopologySpreadConstraintsの検証時によく使用します。
インストール
kubectl krew install topology
基本
❯ k topology node
NAME REGION ZONE
sample-node-1 ap-northeast-1 ap-northeast-1a
sample-node-2 ap-northeast-1 ap-northeast-1a
sample-node-3 ap-northeast-1 ap-northeast-1c
sample-node-4 ap-northeast-1 ap-northeast-1c
sample-node-5 ap-northeast-1 ap-northeast-1c
sample-node-6 ap-northeast-1 ap-northeast-1c
sample-node-7 ap-northeast-1 ap-northeast-1c
sample-node-8 ap-northeast-1 ap-northeast-1d
sample-node-9 ap-northeast-1 ap-northeast-1d
Zoneでフィルタリング
❯ k topology node --zone ap-northeast-1a
NAME REGION ZONE
sample-node-1 ap-northeast-1 ap-northeast-1a
sample-node-2 ap-northeast-1 ap-northeast-1a
Alias設定
自分が設定しているエイリアスを紹介します。
もっとカスタマイズしたい気もしますが、とりあえず参考までに。
alias k='kubectl'
alias kc='kubectx | peco | xargs kubectx'
alias kn='kubens | peco | xargs kubens'
kubectl
はk
にエイリアスを貼っています。
コンテキストの切り替えにはkubectxを使っています。
現在のコンテキストの確認は、starshipを使って設定しています。
[kubernetes]
format = 'on [⛵ $context \($namespace\)]($style) '
style = "bold green"
disabled = false
tmuxを使っている方は、kube-tmuxを使ってtmuxのステータスラインにコンテキストを表示させることも可能です。
まとめ
いかがだったでしょうか?
振り返ってみると結構な数のプラグイン・ツールを使っていることに気づきました。
Kubernetesの運用方法次第で必要になってくるプラグインやツールも大きく変わってくると思うので是非自分に合ったプラグインを見つけて下さい!
そして、おすすめのプラグインあれば是非教えて下さい!
皆さんの快適なKubernetesライフの助けになれば幸いです。
Discussion
view-secret・modify-secretも便利かもしれません
secret関連のプラグインはあまり使ったことがなかったので勉強になります!
ありがとうございます!
https://github.com/wercker/stern はメンテされておらず代わりに https://github.com/stern/stern で継続していますので、よければリンク先を変更いただけるとうれしいです🙏 Homebrew, krew でインストールされるのも stern/stern に向いています。
ありがとうございます!
変更させていただきました🙏