インフラ作業支援ラボInfra Support Lab ← ガイド一覧← 戻る

Kubernetes(K8s)の基本操作・kubectlコマンド|Pod・ログ・障害調査

Kubernetesのクラスタを管理するときに、対象クラスター・Namespaceを確認し、安全にPodの状況を調べるためのkubectl実務ガイド。Docker単体と異なる仕組みと変更操作の影響も整理します。

この記事の目的

Pod・Deployment・Serviceの関係、kubectlの基本的な読み取り操作、トラブル時の確認先。

最初にやること

kubectl config current-contextとkubectl get pods -n appで接続先・Namespace・Podを特定します。

注意:kubectl delete・apply・rollout restartは状態変更です。原因調査の初手で実行しないでください。app・APP・POD_NAME・CONTAINER_NAMEは例です。context・namespace・権限を実環境で確認してください。
クラスター自体のバージョンアップ:kubeadmの更新順序・互換性・Node drain・障害復旧はこちら。Deploymentのアプリ更新とは別です。

kubectlの基本操作を入口に、作業ガイド3件・障害対処3件に分けています。

運用系・個別テーマ

トラブルシューティング

Docker基本操作との違いはこちら。コンテナランタイムとKubernetes APIの管理対象を混同しないでください。

1. Kubernetesで扱う基本のオブジェクト

対象役割
Pod1つ以上のコンテナを含む実行単位
Deploymentレプリカ数・更新を管理するコントローラー
ServicePodへの安定した到達先
Namespace名前・権限・対象範囲の分割
NodePodを実行する計算ノード

Docker単体の操作とは異なり、kubectlはAPIサーバーを経由してKubernetesのオブジェクトを調べます。コンテナランタイムにDocker Engineが使われているとは限りません。

2. context・Namespaceの確認

kubectl version --client kubectl version kubectl config current-context kubectl config get-contexts kubectl config view --minify kubectl get namespaces kubectl auth can-i get pods -n app

contextとNamespaceは誤操作を避ける基本です。kubeconfigやconfig viewの出力には接続情報・認証情報が含まれる可能性があるため、共有前に確認します。

バージョン差:kubectlのclientとAPIサーバーは原則としてマイナーバージョン±1以内での利用がサポートされます。kubectl versionで接続先のバージョンを確認し、クラウド提供KubernetesやOpenShift等のサポート要件も併せて確認してください。Kubernetes公式のバージョンスキューポリシー。

3. PodとDeployment・Serviceの参照

kubectl get pods -n app -o wide kubectl get deployments -n app kubectl get services -n app kubectl describe pod POD_NAME -n app kubectl get events -n app --sort-by=.metadata.creationTimestamp

get podsに表示されるSTATUS列はPod phaseそのものではなく、コンテナ待機理由などの要約表示を含む場合があります。ConditionsとEventsで詳細を確認します。

4. 現在ログ・直前ログを確認

kubectl logs POD_NAME -n app -c CONTAINER_NAME --tail=100 kubectl logs POD_NAME -n app -c CONTAINER_NAME --previous --tail=100 kubectl exec POD_NAME -n app -c CONTAINER_NAME -- ls /

--previousは直前のコンテナログがある場合に取得できます。execはコンテナ内部で新規プロセスを実行するので、read-onlyの確認コマンドでも権限と負荷に注意します。

5. 目的・状態から専門記事へ

目的・状態確認先
Deploymentの更新・切り戻しrolloutの操作と安全な更新
ConfigMap・Secretの更新設定値の反映方法と秘密情報の確認
Serviceの接続確認selector・EndpointSlice・portの確認
CrashLoopBackOff直前ログ・終了理由・probeの切り分け
ImagePullBackOff / ErrImagePullイメージ・認証・通信の切り分け
Pod PendingFailedScheduling・Node・PVCを切り分ける

6. 本番操作における区分

区分例注意
参照get・describe・logsRBACと機密情報を確認
プロセス実行execコンテナ内にプロセスが起動する
状態変更apply・scale・rollout restart実サービスへ影響
削除deleteオブジェクト・Pod・永続データの影響確認
危険:原因が不明なPodを削除して再作成させても、根本原因が解消するとは限りません。Deployment等による再作成の有無もケースごとに異なります。

7. 障害時に記録する内容

クラスター、Namespace、対象オブジェクト、時刻、直近の変更、Events、コンテナログ、RBAC権限を同じ作業記録にまとめます。

Deploymentの設定変更が必要なら更新・切り戻しの個別ガイドで影響評価から進めます。

8. 調査結果から次の行動を決める

以下は想定例であり、実機で取得した結果ではありません。kubectl get podsのSTATUS表示だけで原因を決めず、describeのEvents・Conditionsと組み合わせて判断します。

見えた状態(想定例)次の安全な行動
CrashLoopBackOff対象コンテナを指定してlogs --previous、終了理由、probeと直前の変更を調べ、再起動原因の調査へ進む
ImagePullBackOffEventsの認証・タグ・名前解決のエラーを読み、イメージ取得の調査へ進む
Pending / FailedSchedulingPodScheduled、Node制約、requests、PVCを順に確認し、スケジューリング調査へ進む
PodはRunningでもService通信が失敗Ready・EndpointSlice・selector・targetPortを調べ、Service疎通の調査へ進む
変更後のDeploymentが完了しないロールアウトの進捗と履歴を収集し、安全な更新・切り戻し判断へ進む。最初からundoやPod削除を実行しない

完了判定:対象context・Namespaceが正しく、問題に対応した根拠が揃い、修正後のReady・ログ・業務通信を確認できた場合にのみ完了とします。判断材料が不足する場合はEvents・変更履歴・担当者の管理情報を追加取得します。

公式・一次資料

関連手順を確認する

参照操作・変更操作・削除操作を区別し、作業前後に対象と正常性を記録します。

関連ガイドへ