概要
K8SでRailsアプリケーションを運用していて、デバッグ時に頻繁に使用するコマンドをまとめました。
毎回調べ直すのが面倒なので、チートシートとして執筆しました 
基本設定
コンテキスト操作
| コマンド |
説明 |
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の起動方法やログ確認は頻繁に使うので、覚えておくと作業効率が上がりますね