kubectlコマンド入門|Pod操作とログ確認を実践

KubernetesクラスタでPodをデプロイし、リアルタイムでログを確認するまでの一連の流れを、kubectlコマンドで完全マスターしましょう。本記事では、初心者でも実践できる具体的な手順と、現場で即戦力となるテクニックを余すところなく解説します。これからKubernetesを学ぶ方は、まずこの記事の手順を1度実行すれば、基本的なPod操作とログ確認ができるようになります。


目次


はじめに:kubectlがKubernetes操作の要である理由

Kubernetesを操作する上で、kubectlは欠かせないツールです。kubectlは、Kubernetesクラスタに対してコマンドラインから指示を出すための公式CLI(Command Line Interface)であり、Podの作成・確認・削除、ログの取得、リソースの管理など、あらゆる操作を実行できます。kubectlが使えなければ、Kubernetesの運用はほぼ不可能といっても過言ではありません。

例えば、以下のようなシーンでkubectlは活躍します。

  • 新しいPodをデプロイする
  • 既存のPodの状態を確認する
  • アプリケーションのログをリアルタイムで監視する
  • リソースの負荷状況を把握する
  • 不要なリソースを削除する

本記事では、これらの基本的な操作を網羅的に解説します。kubectlを使いこなすことで、Kubernetesクラスタの管理が飛躍的に効率化されるでしょう。


環境準備:kubectlをインストールし、クラスタ接続を確認する

kubectlを使う前に、まずは環境を整えましょう。ここでは、kubectlのインストール方法と、Kubernetesクラスタへの接続確認手順を解説します。

kubectlのインストール

kubectlは、公式のインストール手順に従って簡単に導入できます。以下に、主要なOSごとのインストール方法を示します。

OSインストール方法コマンド例
Linux (Debian/Ubuntu)公式リポジトリからインストールsudo apt-get update && sudo apt-get install -y kubectl
Linux (RHEL/CentOS)公式リポジトリからインストールsudo yum install -y kubectl
macOSHomebrewを使用brew install kubectl
WindowsChocolateyを使用choco install kubernetes-cli

注意点:kubectlのバージョンは、接続先のKubernetesクラスタのバージョンと互換性があることを確認してください。互換性については、公式ドキュメントを参照してください。

クラスタ接続の確認

kubectlをインストールしたら、次はKubernetesクラスタに接続します。接続には、kubeconfigファイルが必要です。kubeconfigファイルは、通常、クラスタ管理者から提供されます。

接続確認には、以下のコマンドを実行します。

kubectl cluster-info

このコマンドを実行すると、接続先のKubernetesクラスタの情報が表示されます。例えば、以下のような出力が得られます。

Kubernetes control plane is running at https://192.168.1.100:6443
CoreDNS is running at https://192.168.1.100:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

もし、接続に失敗した場合は、以下の点を確認してください。

  • kubeconfigファイルが正しい場所に配置されているか(通常は~/.kube/config
  • クラスタのエンドポイントが正しいか
  • ネットワーク接続が正常か

接続が確認できたら、次は実際にPodを操作してみましょう。


Podの基本操作:作成・確認・削除の完全ガイド

PodはKubernetesにおける最小の実行単位であり、コンテナを1つ以上含むグループです。本セクションでは、Podの作成、確認、削除の基本的な操作を解説します。

PodをYAMLファイルで作成する方法

Podを作成する最も一般的な方法は、YAMLファイルを使用することです。以下に、シンプルなNginx Podを作成するYAMLファイルの例を示します。

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx-container
    image: nginx:latest
    ports:
    - containerPort: 80

このYAMLファイルをnginx-pod.yamlとして保存し、以下のコマンドでPodを作成します。

kubectl apply -f nginx-pod.yaml

補足:YAMLファイルの構造について簡単に説明します。

  • apiVersion: Kubernetes APIのバージョン(v1は最も基本的なリソース)
  • kind: 作成するリソースの種類(Pod
  • metadata: Podの名前やラベルなどのメタデータ
  • spec: Podの仕様(containersにコンテナの詳細を記述)

YAMLファイルを使用する利点は、再利用性とバージョン管理が容易な点です。また、複数のPodを一度に作成する場合にも役立ちます。

Podの状態と詳細情報を取得するコマンド

Podを作成したら、その状態を確認しましょう。以下のコマンドで、クラスタ内のPod一覧を表示できます。

kubectl get pods

実行例:

NAME        READY   STATUS    RESTARTS   AGE
nginx-pod   1/1     Running   0          5m

この出力から、以下の情報を読み取ることができます。

  • NAME: Podの名前
  • READY: 正常に動作しているコンテナの数(例:1/1は1つのコンテナが正常に動作中)
  • STATUS: Podの状態(Runningは正常稼働中)
  • RESTARTS: 再起動回数
  • AGE: Podの起動から経過した時間

Podの詳細情報を取得するには、以下のコマンドを使用します。

kubectl describe pod nginx-pod

このコマンドでは、Podのイベント履歴やリソース使用状況、ネットワーク設定など、詳細な情報が表示されます。トラブルシューティングの際に非常に役立ちます。

不要なPodを安全に削除する手順

不要になったPodは、以下のコマンドで削除できます。

kubectl delete pod nginx-pod

また、YAMLファイルを使用して作成したPodを削除する場合は、以下のように実行します。

kubectl delete -f nginx-pod.yaml

注意点:Podを削除すると、そのPod内で実行されていたコンテナも停止します。重要なアプリケーションを削除する際は、事前にバックアップを取得するか、代替のPodが存在することを確認してください。


ログ確認:リアルタイム・過去ログ・複数コンテナの取得方法

アプリケーションの動作を把握するためには、ログの確認が欠かせません。kubectlを使用すると、Podのログをリアルタイムで取得したり、過去のログを確認したりすることができます。本セクションでは、ログ確認の具体的な方法を解説します。

リアルタイムでPodログをストリーミングする

Podのログをリアルタイムで確認するには、以下のコマンドを使用します。

kubectl logs -f nginx-pod

-fオプションを付けることで、ログがリアルタイムでストリーミングされます。これは、アプリケーションの動作を監視する際に非常に便利です。

例えば、Nginx Podのログを確認すると、以下のような出力が得られます。

192.168.1.1 - - [10/Oct/2023:12:34:56 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"

このログから、リクエストの内容やステータスコード、レスポンスサイズなどを確認できます。

過去のログを取得し、トラブルシューティングに活用する

過去のログを取得するには、--previousオプションを使用します。これは、Podが再起動された際に、前回のコンテナのログを確認する際に役立ちます。

kubectl logs --previous nginx-pod

また、ログの出力期間を指定することもできます。例えば、過去1時間のログを取得するには、以下のように実行します。

kubectl logs --since=1h nginx-pod

この他にも、ログの行数を制限したり、特定の文字列を含むログのみを表示したりすることができます。詳細は、kubectl logs --helpを参照してください。

複数コンテナPodのログを個別に確認する

Pod内に複数のコンテナが存在する場合、ログを個別に確認する必要があります。この場合は、-cオプションを使用して、特定のコンテナのログを取得します。

kubectl logs nginx-pod -c nginx-container

例えば、Pod内にNginxとRedisのコンテナが存在する場合、それぞれのログを個別に確認できます。

kubectl logs multi-container-pod -c nginx
kubectl logs multi-container-pod -c redis

このように、-cオプションを使用することで、複数コンテナPodのログを効率的に管理できます。


トラブルシューティング:Podが正常に起動しない場合の対処法

Podが正常に起動しない場合、その原因を特定することが重要です。本セクションでは、Podが正常に起動しない際のトラブルシューティング手順を解説します。

Podの状態を確認する

まず、Podの状態を確認します。以下のコマンドを実行し、STATUS列の値を確認してください。

kubectl get pods

一般的なPodの状態とその意味は以下の通りです。

状態意味
PendingPodがスケジュールされていない(リソース不足やノードの制約など)
ContainerCreatingコンテナが作成中
RunningPodが正常に稼働中
CrashLoopBackOffコンテナがクラッシュし、再起動を繰り返している
Errorコンテナがエラーで停止している

イベントログを確認する

Podの状態がPendingCrashLoopBackOffの場合、詳細なイベントログを確認しましょう。以下のコマンドで、Podのイベント履歴を表示できます。

kubectl describe pod nginx-pod

このコマンドの出力には、以下のような情報が含まれます。

  • Podのイベント履歴(スケジュール、コンテナ作成、エラーなど)
  • リソース使用状況
  • ネットワーク設定

例えば、以下のようなエラーメッセージが表示される場合があります。

Failed to pull image "nginx:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied for nginx, repository does not exist or may require 'docker login'

このエラーは、イメージの取得に失敗したことを示しています。この場合、イメージ名が正しいか、プライベートレジストリにアクセスするための認証情報が正しく設定されているかを確認してください。

ログを確認する

PodがCrashLoopBackOffErrorの状態にある場合、ログを確認してエラーの原因を特定します。以下のコマンドで、Podのログを表示します。

kubectl logs nginx-pod

ログからエラーメッセージや例外を特定し、その原因を調査します。例えば、以下のようなエラーメッセージが表示される場合があります。

standard_init_linux.go:228: exec user process caused: exec format error

このエラーは、実行しようとしたバイナリが、実行環境と互換性がないことを示しています。この場合、イメージのアーキテクチャが正しいか、または適切なイメージを使用しているかを確認してください。

一般的なトラブルと対処法

以下に、一般的なPodのトラブルとその対処法をまとめます。

トラブル原因対処法
ImagePullBackOffイメージの取得に失敗イメージ名が正しいか、認証情報が正しく設定されているか確認
CrashLoopBackOffコンテナがクラッシュし、再起動を繰り返すログを確認し、アプリケーションのエラーを特定
Pendingリソース不足やノードの制約ノードのリソース状況を確認し、必要に応じてリソースを追加
Errorコンテナがエラーで停止ログを確認し、アプリケーションのエラーを特定

これらの手順を実行しても問題が解決しない場合は、Kubernetesの公式ドキュメントやコミュニティフォーラムを参照してください。


ベストプラクティス:kubectlコマンドを効率化する10のテクニック

kubectlコマンドを効率的に使用することで、Kubernetesの操作を大幅にスピードアップできます。本セクションでは、実務で役立つ10のテクニックを紹介します。

1. エイリアスを設定する

頻繁に使用するkubectlコマンドには、エイリアスを設定すると便利です。例えば、以下のように設定します。

alias k='kubectl'
alias kgp='kubectl get pods'
alias kd='kubectl describe'

これにより、kubectl get podskgpと入力するだけで実行できます。

2. 出力フォーマットをカスタマイズする

kubectlの出力フォーマットをカスタマイズすることで、情報を効率的に取得できます。例えば、以下のコマンドでPodの情報をJSON形式で表示します。

kubectl get pods -o json

また、YAML形式で表示することもできます。

kubectl get pods -o yaml

この他にも、カスタムの出力フォーマットを使用することができます。詳細は、kubectl get --helpを参照してください。

3. ラベルセレクタを活用する

ラベルセレクタを使用すると、特定のラベルを持つリソースのみを取得できます。例えば、以下のコマンドでapp=nginxというラベルを持つPodを取得します。

kubectl get pods -l app=nginx

これにより、大規模なクラスタでも、特定のアプリケーションに関連するリソースのみを効率的に管理できます。

4. リソース名の自動補完を活用する

kubectlには、リソース名の自動補完機能が備わっています。例えば、以下のように入力すると、自動的に補完されます。

kubectl get po <Tab>

これにより、リソース名を正確に入力する手間を省くことができます。

5. 複数のコマンドを組み合わせる

kubectlコマンドと他のコマンドを組み合わせることで、さらに効率的な操作が可能になります。例えば、以下のコマンドで、特定のPodのログをリアルタイムで確認しながら、別のターミナルでPodの状態を監視します。

kubectl logs -f nginx-pod &
kubectl get pods -w

このように、複数のコマンドを組み合わせることで、作業効率を向上させることができます。

6. リソースの編集を直接行う

kubectlを使用すると、リソースを直接編集することができます。例えば、以下のコマンドでPodを編集します。

kubectl edit pod nginx-pod

このコマンドを実行すると、デフォルトのエディタでPodのYAMLファイルが開きます。編集後、保存すると、変更が即座に反映されます。

注意点:編集内容によっては、Podが再起動される場合があります。重要なリソースを編集する際は、事前にバックアップを取得してください。

7. リソースの履歴を管理する

kubectlを使用すると、リソースの履歴を管理することができます。例えば、以下のコマンドで、Podの履歴を表示します。

kubectl rollout history pod/nginx-pod

また、履歴をロールバックすることもできます。

kubectl rollout undo pod/nginx-pod

これにより、誤って変更したリソースを元に戻すことができます。

8. カスタム列を表示する

kubectlでは、カスタム列を表示することができます。例えば、以下のコマンドで、Podの名前とステータス、起動時間を表示します。

kubectl get pods -o custom-columns=NAME:.metadata.name,STATUS:.status.phase,AGE:.metadata.creationTimestamp

このように、必要な情報のみを表示することで、出力を効率化できます。

9. リソースの削除を確認する

リソースを削除する際は、--dry-run=clientオプションを使用して、削除されるリソースを事前に確認することができます。

kubectl delete pod nginx-pod --dry-run=client

このコマンドを実行すると、実際には削除されませんが、削除されるリソースの一覧が表示されます。これにより、誤って重要なリソースを削除するリスクを軽減できます。

10. 公式ドキュメントを参照する

kubectlの全ての機能を覚えることは困難です。そのため、公式ドキュメントを参照する習慣をつけましょう。例えば、以下のコマンドでkubectlのヘルプを表示します。

kubectl --help

また、特定のコマンドの詳細な使い方は、kubectl <command> --helpで確認できます。例えば、kubectl get --helpと入力すると、getコマンドの詳細な使い方が表示されます。


まとめ:kubectlでPod操作とログ確認を自在に操ろう

本記事では、kubectlを使用したPod操作とログ確認の基本から応用までを網羅的に解説しました。以下に、本記事の重要なポイントをまとめます。

  • kubectlのインストールと環境設定: kubectlをインストールし、Kubernetesクラスタに接続する方法を解説しました。
  • Podの基本操作: Podの作成、確認、削除の手順を具体的に説明しました。YAMLファイルを使用したPodのデプロイ方法も紹介しました。
  • ログ確認のテクニック: リアルタイムログの取得、過去ログの確認、複数コンテナPodのログ管理方法を解説しました。
  • トラブルシューティング: Podが正常に起動しない際の対処法や、一般的なトラブルとその解決策を紹介しました。
  • ベストプラクティス: kubectlコマンドを効率化する10のテクニックを紹介し、実務で役立つ知識を提供しました。

kubectlをマスターすることで、Kubernetesクラスタの操作が飛躍的に効率化されます。本記事で紹介した手順を実践し、ぜひkubectlのスキルを向上させてください。また、Kubernetesの公式ドキュメントやコミュニティフォーラムを活用し、常に最新の知識を取り入れることをおすすめします。

これからKubernetesを学ぶ方は、まずは本記事の手順を1度実行してみてください。実践を通じて、kubectlの操作に慣れ親しむことができるでしょう。Kubernetesの世界へようこそ!


よくある質問(FAQ)

以下に、kubectlに関するよくある質問とその回答をまとめました。

Q1: kubectlとd…

A1: kubectlはKubernetesクラスタを操作するためのコマンドラインツールであり、Podやサービス、デプロイメントなどのKubernetesリソースを管理します。一方、dockerコマンドはローカルのDockerエンジンを操作するためのツールであり、コンテナの作成・実行・管理を行います。kubectlはKubernetesクラスタ全体を管理するのに対し、dockerコマンドはローカルのコンテナを管理するのが主な違いです。

Q2: kubectlコマ…

A2: kubectlコマンドが遅い場合は、以下の点を確認してください。

  • ネットワーク接続が安定しているか
  • クラスタのAPIサーバーに負荷がかかっていないか
  • kubectlのバージョンが古くないか

また、--request-timeoutオプションを使用して、タイムアウト時間を延長することもできます。例えば、以下のように実行します。

kubectl get pods --request-timeout=30s

Q3: Podのログをファ…

A3: Podのログをファイルに保存するには、以下のコマンドを使用します。

kubectl logs nginx-pod > nginx-logs.txt

これにより、ログがnginx-logs.txtファイルに保存されます。リアルタイムでログをストリーミングしながらファイルに保存する場合は、以下のように実行します。

kubectl logs -f nginx-pod > nginx-logs.txt

Q4: kubectlコマ…

A4: kubectlコマンドの出力をJSON形式で取得するには、-o jsonオプションを使用します。例えば、以下のように実行します。

kubectl get pods -o json

これにより、Podの情報がJSON形式で表示されます。JSON形式の出力は、プログラムで処理する際に便利です。

Q5: kubectlコマ…

A5: 特定のリソースのみを取得するには、--field-selectorオプションを使用します。

【編集・制作ポリシー】
本記事はRoute Bloom編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。
ABOUT ME
たから
サラリーマンをしながら開業して経営やってます。 今年、本業で独立・別事業を起業予定です。 ◆経験:IT講師/インフラエンジニア/PM/マネジメント/採用/運用・保守・構築・設計 ◆取得資格:CCNA/CCNP/LPIC-1/AZ-900/FE/サーティファイC言語 ◆サイドビジネス:アパレル事業/複数のWEBメディアを運営