導入: なぜkubectlを使いこなす必要があるのか
Kubernetes(K8s)環境でアプリケーションを運用していると、必ず「コンテナが起動しない」「エラーログが見たい」「DBの中身を確認したい」といったトラブルに直面します。これらを解決するために必須となるのが、管理ツールである「kubectl」です。GUIツールも便利ですが、障害発生時の迅速な対応にはコマンドラインでの操作が不可欠です。本記事では、現場のエンジニアが毎日使っている「トラブルシューティングの三種の神器」をご紹介します。
基礎知識: コンテナとクラスターのつながり
Kubernetesは複数のコンテナを束ねて管理する仕組みです。通常、コンテナはネットワーク的に隔離されているため、外部から直接覗くことはできません。しかし、デバッグ目的であれば、kubectlを通すことで、まるで自分のPC内で動いているかのようにコンテナを操作したり、ログを確認したりすることができます。これが「kubectlによる通信のトンネリング」や「シェル実行」の仕組みです。
実装/解決策: 現場で使うべき3つのコマンド
現場で頻出するシーンに合わせて、以下のコマンドを使い分けます。
1. kubectl logs: アプリケーションの出力内容を確認する。
2. kubectl exec: コンテナの中に直接入り、環境変数や設定ファイルを確認する。
3. kubectl port-forward: クラスタ内部のサービス(DBやキャッシュなど)を一時的にローカルPCへ転送し、使い慣れたツールから直接接続する。
サンプルプログラム: そのまま使える実行例
以下は、トラブルシューティングの際によく使われるコマンドの例です。
kubectl logs -f [Pod名]
kubectl exec -it [Pod名] — /bin/bash
kubectl port-forward svc/[サービス名] 8080:5432
応用・注意点: 現場で陥りやすい罠
現場で運用する際に、以下の点に注意してください。
1. 複数のコンテナがある場合
Podの中に「メインのアプリ」と「サイドカー(ログ転送用など)」の複数のコンテナが含まれている場合、コマンドに-c [コンテナ名]を付ける必要があります。これを忘れると「どのコンテナかわからない」というエラーになります。
2. port-forwardは一時的なもの
kubectl port-forwardは非常に便利ですが、接続を切ると疎通も切れます。本番環境の長期的なアクセスには不向きです。あくまで「緊急時のデータ確認」や「動作チェック」に留めましょう。
3. セキュリティの意識
コンテナへのシェル侵入(exec)は強力な権限です。本番環境でむやみに操作を行うと設定を破壊する恐れがあるため、まずは読み取り専用(logsなど)から調査を開始する癖をつけましょう。
まずは自分の手元の環境で、これらのコマンドを試してみてください。これらを使いこなすだけで、障害対応のスピードは大きく変わります!

コメント