0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Kubernetes デバッグ時関連のコマンド集

Posted at

概要

K8SでRailsアプリケーションを運用していて、デバッグ時に頻繁に使用するコマンドをまとめました。
毎回調べ直すのが面倒なので、チートシートとして執筆しました :pencil:

基本設定

コンテキスト操作

コマンド 説明
kubectl config current-context 現在のコンテキスト確認
kubectl config get-contexts コンテキスト一覧表示
kubectl config use-context <context-name> コンテキスト切り替え

namespace確認

コマンド 説明
kubectl config view --minify | grep namespace デフォルトnamespace確認
kubectl get pods -n staging stagingのPod一覧表示
kubectl get pods -n production productionのPod一覧表示

Pod操作

Pod情報確認

コマンド 説明
kubectl get pods Pod一覧表示
kubectl get pods -n <namespace> 指定namespace内のPod一覧
kubectl get pods -o wide Pod詳細情報(IP、Node等含む)
kubectl describe pod <pod-name> Pod詳細情報とイベント確認
kubectl get pod <pod-name> -o yaml PodのYAML設定表示

Pod状態確認

コマンド 説明
kubectl get pods --show-labels Podの状態とリスタート回数確認
kubectl get pods --field-selector=status.phase!=Running 異常なPodをフィルタリング
kubectl top pods Podのリソース使用状況確認
kubectl top pods -n <namespace> 指定namespaceのPodリソース使用状況確認

ログ確認

基本ログ確認

コマンド 説明
kubectl logs <pod-name> Podのログ表示
kubectl logs <pod-name> -n <namespace> 指定namespace内のPodログ
kubectl logs <pod-name> -f リアルタイムでログ監視
kubectl logs <pod-name> --tail=100 最新100行のみ表示
kubectl logs <pod-name> --since=1h 1時間以内のログのみ表示

複数コンテナ・前回起動分のログ

コマンド 説明
kubectl logs <pod-name> -c <container-name> 複数コンテナがある場合のコンテナ指定
kubectl logs <pod-name> --previous Pod再起動前のログ確認(クラッシュ原因調査等)
kubectl logs -l app=<app-name> -f 複数Podのログを同時確認

Railsアプリケーション操作

Rails Console実行

コマンド 説明
kubectl exec -it <pod-name> -- rails console Railsコンソール起動
kubectl exec -it <pod-name> -n <namespace> -- rails console 指定namespace内でRailsコンソール起動
kubectl exec -it <pod-name> -- rails console -e production 本番環境でのRailsコンソール起動

Rails関連コマンド実行

コマンド 説明
kubectl exec -it <pod-name> -- rails db:migrate データベースマイグレーション実行
kubectl exec -it <pod-name> -- rails <task-name> Railsタスク実行
kubectl exec -it <pod-name> -- rails db:seed シードデータ投入
kubectl exec -it <pod-name> -- rails routes ルート確認

データベース操作

コマンド 説明
kubectl exec -it <pod-name> -- rails dbconsole データベースコンソール起動
kubectl exec -it <pod-name> -- rails runner "puts ActiveRecord::Base.connection.execute('SELECT 1').first" データベース接続確認

Pod内部操作

Pod内でシェル実行

コマンド 説明
kubectl exec -it <pod-name> -- /bin/bash bashシェル起動
kubectl exec -it <pod-name> -- /bin/sh shシェル起動(bashが使えない場合)
kubectl exec -it <pod-name> -n <namespace> -- /bin/bash 指定namespace内でシェル実行
kubectl exec -it <pod-name> -c <container-name> -- /bin/bash 複数コンテナがある場合のコンテナ指定

ファイル操作

コマンド 説明
kubectl cp <pod-name>:/path/to/file /local/path Pod内のファイルをローカルにコピー
kubectl cp /local/path <pod-name>:/path/to/file ローカルファイルをPod内にコピー
kubectl cp <namespace>/<pod-name>:/path/to/file /local/path 指定namespace内でファイルコピー

デバッグ・トラブルシューティング

リソース使用状況確認

コマンド 説明
kubectl top nodes Node使用状況確認
kubectl top pods --sort-by=cpu Pod使用状況確認(CPU順)
kubectl top pods --sort-by=memory Pod使用状況確認(メモリ順)
kubectl top pods -n <namespace> 指定namespaceのリソース確認

イベント確認

コマンド 説明
kubectl get events namespace内の全イベント確認
kubectl get events -n <namespace> 指定namespaceのイベント確認
kubectl get events --sort-by=.metadata.creationTimestamp 時系列順でイベント表示
kubectl describe pod <pod-name> 特定Podのイベント確認

Pod再起動・削除

コマンド 説明
kubectl delete pod <pod-name> Podの再起動(実際は削除後に自動再作成)
kubectl delete pod <pod-name> --grace-period=0 --force 強制削除
kubectl delete pod <pod-name> -n <namespace> 指定namespaceでPod削除

Service・Ingress確認

Service操作

コマンド 説明
kubectl get services Service一覧確認
kubectl get svc Service一覧確認(短縮形)
kubectl describe service <service-name> Service詳細確認
kubectl get endpoints <service-name> Serviceへの接続確認

ポートフォワード

コマンド 説明
kubectl port-forward <pod-name> 3000:3000 ローカルポートからPodへのフォワード
kubectl port-forward service/<service-name> 3000:80 ローカルポートからServiceへのフォワード
kubectl port-forward <pod-name> 3000:3000 & バックグラウンドで実行

デプロイメント操作

デプロイメント確認

コマンド 説明
kubectl get deployments デプロイメント一覧
kubectl get deploy デプロイメント一覧(短縮形)
kubectl describe deployment <deployment-name> デプロイメント詳細確認
kubectl get replicasets レプリカセット確認
kubectl get rs レプリカセット確認(短縮形)

デプロイメント更新

コマンド 説明
kubectl set image deployment/<deployment-name> <container-name>=<new-image> イメージ更新
kubectl rollout restart deployment/<deployment-name> デプロイメント再起動
kubectl rollout status deployment/<deployment-name> ロールアウト状況確認
kubectl rollout undo deployment/<deployment-name> ロールバック

設定情報確認

ConfigMap・Secret確認

コマンド 説明
kubectl get configmaps ConfigMap一覧
kubectl get cm ConfigMap一覧(短縮形)
kubectl describe configmap <configmap-name> ConfigMap内容確認
kubectl get configmap <configmap-name> -o yaml ConfigMapのYAML表示
kubectl get secrets Secret一覧
kubectl get secret <secret-name> -o yaml Secret内容確認(Base64デコードされて表示)

よく使う組み合わせコマンド

Railsアプリのヘルスチェック

コマンド 説明
kubectl get pods -l app=<app-name> && kubectl logs -l app=<app-name> --tail=50 Podの状態とログを同時確認
kubectl exec -it <pod-name> -- rails runner "puts Rails.env" Rails環境確認
kubectl exec -it <pod-name> -- curl localhost:3000/health アプリケーションの動作確認

デバッグセッション開始

順序 コマンド 説明
1 kubectl get pods -o wide Pod状態確認
2 kubectl describe pod <pod-name> 異常Pod特定
3 kubectl logs <pod-name> --tail=100 -f ログ確認
4 kubectl exec -it <pod-name> -- /bin/bash Pod内でデバッグ

まとめ

K8S環境でRailsアプリをデバッグする際によく使うコマンドをまとめました!
覚えることが多いなぁ...

特にrails consoleの起動方法やログ確認は頻繁に使うので、覚えておくと作業効率が上がりますね

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?