kubectlコマンドの使い方|ポッド・デプロイメント管理とLinuxサーバーでの実践例

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips > kubectlコマンドの使い方|ポッド・デプロイメント管理とLinuxサーバーでの実践例
「kubectlのコマンドが多すぎてどれを覚えればいいか分からない」「ポッドが起動しない時に何を確認すればいいか分からない」
Kubernetesを触り始めた頃、よくそういう声を聞きます。

この記事では、Linuxサーバー管理者が実務で使う kubectl の基本操作を解説します。
ポッドの確認・ログ調査・デプロイメント管理・設定ファイルの適用まで、現場で毎日使うコマンドに絞って説明します。

この記事のポイント

・kubectl get pods でポッドの状態を素早く確認できる
・kubectl logs / kubectl describe でトラブルの原因を特定する
・kubectl apply -f でYAMLからリソースを宣言的に管理できる
・CrashLoopBackOff などの典型エラーの対処法もカバー


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

kubectlとは — Kubernetesを操作するコマンドラインツール

kubectl(「キューブシーティーエル」または「キューブコントロール」と読む)は、Kubernetesクラスターを操作するための公式CLIツールです。

Linuxサーバー管理者の視点で言うと、systemctl がsystemdのサービスを管理するように、kubectl はKubernetesのワークロード(ポッド・デプロイメント・サービス等)を管理するコマンドです。

コマンドの基本構造は以下の通りです。

# kubectl の基本構文 kubectl [サブコマンド] [リソース種別] [リソース名] [オプション] # 例: default 名前空間のポッド一覧を表示 kubectl get pods

インストールと接続確認

1. kubectl のインストール(RHEL9 / Rocky Linux 9)

# yumリポジトリを追加 cat <

実行例(出力):

Client Version: v1.30.2 Kustomize Version: v5.0.4-0.20230601165947-6ce0bf512192

2. クラスターへの接続確認

kubeconfigファイル(~/.kube/config)にクラスターの接続情報が格納されています。以下で接続できているか確認します。

# クラスター情報の確認 kubectl cluster-info # 現在のコンテキスト確認 kubectl config current-context # ノード一覧を表示(接続が確立しているかの最終確認) kubectl get nodes

実行例(出力):

NAME STATUS ROLES AGE VERSION k8s-master01 Ready control-plane 30d v1.30.1 k8s-worker01 Ready 30d v1.30.1 k8s-worker02 Ready 30d v1.30.1

ポッドの確認 — kubectl get / describe

1. ポッド一覧を表示する(kubectl get pods)

最もよく使うコマンドです。

# default 名前空間のポッド一覧 kubectl get pods # 全名前空間のポッドを表示 kubectl get pods -A または kubectl get pods --all-namespaces # ポッドのIPアドレスと稼働ノードも表示 kubectl get pods -o wide # リアルタイムで状態変化を監視(watch相当) kubectl get pods -w

実行例(出力):

NAME READY STATUS RESTARTS AGE nginx-deployment-6d4b8f9-xp2l 1/1 Running 0 2d nginx-deployment-6d4b8f9-mn7k 1/1 Running 0 2d mysql-0 1/1 Running 0 5d

STATUS の主な値:
Running: 正常稼働中
Pending: スケジューリング待ち(ノードリソース不足等)
CrashLoopBackOff: 起動後すぐにクラッシュを繰り返している
ImagePullBackOff: コンテナイメージの取得に失敗
Terminating: 削除処理中

2. ポッドの詳細情報を確認する(kubectl describe pod)

ポッドが起動しない原因を調べる時に使います。Events セクションに障害の原因が記録されています。

# ポッド名を指定して詳細表示 kubectl describe pod nginx-deployment-6d4b8f9-xp2l # 名前空間を指定する場合 kubectl describe pod mysql-0 -n production

実行例(Eventsセクション抜粋):

Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 5m default-scheduler Successfully assigned default/nginx-pod to k8s-worker01 Normal Pulling 5m kubelet Pulling image "nginx:1.27" Normal Pulled 4m kubelet Successfully pulled image "nginx:1.27" Normal Created 4m kubelet Created container nginx Normal Started 4m kubelet Started container nginx

ログの確認 — kubectl logs

1. ポッドのログを表示する

アプリケーションのエラーを調べる際の基本操作です。Linuxの tail -f に相当するリアルタイム表示も使えます。

# ポッドのログを表示 kubectl logs nginx-deployment-6d4b8f9-xp2l # リアルタイムでログを追う(-f はフォロー) kubectl logs -f nginx-deployment-6d4b8f9-xp2l # 直近100行だけ表示 kubectl logs --tail=100 nginx-deployment-6d4b8f9-xp2l # 複数コンテナが同居するポッドではコンテナ名を指定 kubectl logs nginx-deployment-6d4b8f9-xp2l -c nginx # 直前に終了したコンテナのログ(CrashLoopBackOff 調査に必須) kubectl logs --previous nginx-deployment-6d4b8f9-xp2l

2. CrashLoopBackOff のログ調査

コンテナが起動→即クラッシュを繰り返す CrashLoopBackOff は、--previous オプションで直前のクラッシュログを見るのが鉄則です。

# まず状態確認 kubectl get pods # CrashLoopBackOff のポッドを発見したら kubectl logs --previous [ポッド名] # それでもわからなければ describe で Events を確認 kubectl describe pod [ポッド名]

デプロイメントの管理 — kubectl create / apply / scale

1. YAMLファイルからリソースを作成・更新する(kubectl apply)

Kubernetesでは、設定をYAMLファイルで管理する「宣言的な操作」が基本です。

# YAMLファイルからリソースを作成または更新 kubectl apply -f deployment.yaml # ディレクトリ内の全YAMLを一括適用 kubectl apply -f ./manifests/ # 適用前に変更内容を確認(ドライラン) kubectl apply -f deployment.yaml --dry-run=client

nginx を3台起動するシンプルな deployment.yaml の例:

apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.27 ports: - containerPort: 80

2. レプリカ数を変更する(kubectl scale)

# レプリカ数を5に変更 kubectl scale deployment nginx-deployment --replicas=5 # 変更後の状態を確認 kubectl get deployment nginx-deployment

実行例(出力):

NAME READY UP-TO-DATE AVAILABLE AGE nginx-deployment 5/5 5 5 3d

3. デプロイメントのローリングアップデートとロールバック

# コンテナイメージを更新(ローリングアップデート開始) kubectl set image deployment/nginx-deployment nginx=nginx:1.28 # アップデートの進行状況を確認 kubectl rollout status deployment/nginx-deployment # アップデート履歴を確認 kubectl rollout history deployment/nginx-deployment # 直前のバージョンに戻す(ロールバック) kubectl rollout undo deployment/nginx-deployment

ポッドへの接続と操作 — kubectl exec / cp

1. 動作中のポッドにシェルで入る(kubectl exec)

Linuxの ssh に相当する操作です。コンテナ内のファイルや環境変数を直接確認できます。

# /bin/bash でポッドに入る(対話モード: -it) kubectl exec -it nginx-deployment-6d4b8f9-xp2l -- /bin/bash # コンテナ内でコマンドを直接実行 kubectl exec nginx-deployment-6d4b8f9-xp2l -- cat /etc/nginx/nginx.conf # 複数コンテナのポッドでは -c でコンテナ名を指定 kubectl exec -it multi-container-pod -c app -- /bin/sh

2. ファイルのコピー(kubectl cp)

# ポッドからローカルにファイルをコピー kubectl cp nginx-deployment-6d4b8f9-xp2l:/var/log/nginx/error.log ./error.log # ローカルからポッドにファイルをコピー kubectl cp ./nginx.conf nginx-deployment-6d4b8f9-xp2l:/etc/nginx/nginx.conf

名前空間の操作 — kubectl namespace

Kubernetesでは名前空間(Namespace)でリソースを論理分離します。本番環境 / 開発環境 / テスト環境などを分けて管理する際に重要です。

# 名前空間一覧を表示 kubectl get namespaces # 特定の名前空間のポッドを表示 kubectl get pods -n production # 名前空間を作成 kubectl create namespace staging # コマンドのデフォルト名前空間を変更(毎回 -n を付けなくて済む) kubectl config set-context --current --namespace=production

トラブルシュート・よくあるエラー対処

「CrashLoopBackOff」が出た時

コンテナが起動直後にクラッシュしている状態です。
原因の多くは: アプリの設定ミス / 依存サービス(DBなど)に接続できない / メモリ不足
まず確認: kubectl logs --previous [ポッド名] でクラッシュ直前のログを見る
次に確認: kubectl describe pod [ポッド名] の Events セクション

「ImagePullBackOff」が出た時

コンテナイメージの取得に失敗しています。
確認ポイント: イメージ名のタイポ / プライベートレジストリの認証情報(ImagePullSecret)/ ネットワーク疎通

# イメージ名を確認 kubectl describe pod [ポッド名] | grep Image # イメージが存在するか手動で確認 docker pull [イメージ名] または crictl pull [イメージ名]

「Pending」が続いて起動しない時

スケジューラーがポッドをノードに割り当てられない状態です。
ノードのリソース不足: kubectl describe node [ノード名] で CPU/メモリの使用状況を確認
Taint の設定: ノードに taint が設定されていて、ポッドが弾かれている可能性

# ノード一覧でリソース使用状況を確認 kubectl top nodes # ノードの詳細(TaintsやConditionsを確認) kubectl describe nodes

本記事のまとめ

kubectl の基本操作をまとめます。
やりたいこと コマンド
ポッド一覧を確認 kubectl get pods -o wide
ポッドの詳細・イベント確認 kubectl describe pod [ポッド名]
ポッドのログを表示 kubectl logs -f [ポッド名]
クラッシュ直前のログを確認 kubectl logs --previous [ポッド名]
YAMLからリソースを作成・更新 kubectl apply -f deployment.yaml
レプリカ数を変更 kubectl scale deployment [名前] --replicas=N
ポッドにシェルで入る kubectl exec -it [ポッド名] -- /bin/bash
ローリングアップデートのロールバック kubectl rollout undo deployment/[名前]
名前空間を切り替え kubectl config set-context --current --namespace=[名前空間]
Kubernetesを使い始めると、まず「ポッドの状態確認」「ログ調査」「apply/scale」の3つを繰り返すことになります。
これらを体に馴染ませることが、クラスター管理の第一歩です。

Linuxサーバーのポート確認方法については、Linux ポート確認の全コマンドも参考にしてください。
また、コンテナ関連ではpodmanコマンドの使い方|DockerからPodmanへの移行方法とRHEL9対応の実践例もあわせてご覧ください。

コマンド操作で、余計な時間を使っていませんか?

便利なオプションを知らないままサーバーを運用していると、本来1分で終わるはずの確認作業に何時間もかかってしまいます。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。