Kubernetes ログコマンド

KubernetesKubernetesBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Kubernetesクラスター内で実行されているポッドのログを表示するために、Kubernetesのlogsコマンドをどのように使用するかを学びます。簡単な例から始め、徐々により複雑なシナリオに進みます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/delete("Delete") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("Exec") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/logs("Logs") subgraph Lab Skills kubernetes/get -.-> lab-8099{{"Kubernetes ログコマンド"}} kubernetes/delete -.-> lab-8099{{"Kubernetes ログコマンド"}} kubernetes/describe -.-> lab-8099{{"Kubernetes ログコマンド"}} kubernetes/exec -.-> lab-8099{{"Kubernetes ログコマンド"}} kubernetes/logs -.-> lab-8099{{"Kubernetes ログコマンド"}} end

Minikubeクラスターを起動する

リソースを作成する前に、動作中のKubernetesクラスターが必要です。Minikubeは、ローカルマシン上で動作する軽量のKubernetes環境です。

  1. 作業ディレクトリに移動する:

    ターミナルを開き、デフォルトのプロジェクトフォルダに移動します。

    cd /home/labex/project
  2. Minikubeを起動する:

    Minikubeを起動してKubernetesクラスターを初期化します。

    minikube start
    • このコマンドは、ローカルマシン上に単一ノードのKubernetesクラスターをセットアップします。
    • Minikubeの起動には、システムの性能に応じて数分かかる場合があります。
  3. Minikubeが動作していることを確認する:

    Minikubeクラスターの状態を確認します。

    minikube status
    • kubeletapiserverなどのコンポーネントがRunningと表示されていることを確認します。
    • クラスターが動作していない場合は、minikube startを再度実行します。

Minikubeの起動に問題がある場合は、必要に応じてminikube deleteを使用して環境をリセットします。

kubectl logs コマンドを調べる

kubectl logs コマンドは、ポッド内のコンテナまたは指定されたリソースのログを表示するために使用されます。効率的なログ管理のために、スナップショットログ、ストリーミング、フィルタリング、およびさまざまなその他のオプションをサポートしています。

kubectl logs の利用可能なオプションを表示するには、次のコマンドを実行します。

kubectl logs -h

次の出力が表示されます。

ポッド内のコンテナまたは指定されたリソースのログを表示します。ポッドに1つのコンテナのみがある場合、コンテナ名は省略可能です。

例:
  ## 1つのコンテナのみを持つポッドnginxからスナップショットログを返す
  kubectl logs nginx

  ## 複数のコンテナを持つポッドnginxからスナップショットログを返す
  kubectl logs nginx --all-containers=true

  ## ラベル app=nginx で定義されたポッド内のすべてのコンテナからスナップショットログを返す
  kubectl logs -l app=nginx --all-containers=true

  ## ポッドweb-1から前の終了したrubyコンテナのログのスナップショットを返す
  kubectl logs -p -c ruby web-1

  ## ポッドweb-1内のrubyコンテナのログをストリーミング開始
  kubectl logs -f -c ruby web-1

  ## ラベル app=nginx で定義されたポッド内のすべてのコンテナからのログをストリーミング開始
  kubectl logs -f -l app=nginx --all-containers=true

  ## ポッドnginxの出力の最新20行のみを表示する
  kubectl logs --tail=20 nginx

  ## 過去1時間以内に書かれたポッドnginxのすべてのログを表示する
  kubectl logs --since=1h nginx

  ## 期限切れのサービング証明書を持つkubeletからのログを表示する
  kubectl logs --insecure-skip-tls-verify-backend nginx

  ## 名前がhelloのジョブの最初のコンテナからスナップショットログを返す
  kubectl logs job/hello

  ## 名前がnginxのデプロイメントのコンテナnginx-1からスナップショットログを返す
  kubectl logs deployment/nginx -c nginx-1

コンテナのログを表示する

このステップでは、ポッド内で実行されているコンテナのログを表示する方法を学びます。

  1. 1つのレプリカとNginxコンテナを持つデプロイメントを作成します。

    kubectl create deployment nginx --image=nginx --replicas=1
  2. ポッドが準備完了するまで待ちます。

    kubectl wait --for=condition=Ready pod -l app=nginx
  3. kubectl logs コマンドを使用してNginxコンテナのログを表示します。

    kubectl logs POD_NAME

POD_NAME をステップ1で作成したポッドの名前に置き換えることができ、kubectl get pod -l app=nginx コマンドで POD_NAME を取得できます。

ポッド内の特定のコンテナのログを表示する

このステップでは、ポッド内で実行されている特定のコンテナのログを表示する方法を学びます。

  1. NginxとBusyBoxの2つのコンテナを持つポッドを作成します。

    cat << EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-busybox
    spec:
      containers:
      - name: nginx
        image: nginx
      - name: busybox
        image: busybox
        command:
          - sleep
          - "3600"
    EOF
  2. ポッドが準備完了するまで待ちます。

    kubectl wait --for=condition=Ready pod nginx-busybox
  3. kubectl logs コマンドを使用してBusyBoxコンテナのログを表示します。

    kubectl logs nginx-busybox -c busybox

リアルタイムでのログの追跡

このステップでは、ログが生成されるときにリアルタイムで追跡する方法を学びます。

  1. -f オプションを使用して kubectl logs コマンドを使って、リアルタイムでログを追跡します。

    kubectl logs -f nginx-busybox
  2. 新しいターミナルを開き、Nginxコンテナ内でシェルを作成します。

    kubectl exec -it nginx-busybox -c nginx -- /bin/sh
  3. コンテナ内でコマンドを実行していくつかのログを生成します。

    curl 127.0.0.1
  4. ログを追跡している最初のターミナルに戻り、新しいログエントリが表示されることを確認します。

複数のコンテナからのログを表示する

このステップでは、ポッド内で実行されている複数のコンテナからのログを表示する方法を学びます。

  1. NginxとFluentdの2つのコンテナを持つポッドを作成します。

    cat << EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-fluentd
    spec:
      containers:
      - name: nginx
        image: nginx
      - name: fluentd
        image: fluentd
    EOF
  2. ポッドが準備完了するまで待ちます。

    kubectl wait --for=condition=Ready pod nginx-fluentd
  3. kubectl logs コマンドを使用して両方のコンテナからのログを表示します。

    kubectl logs nginx-fluentd -c nginx
    kubectl logs nginx-fluentd -c fluentd

まとめ

おめでとうございます。あなたは無事にKubernetesログコマンドの実験を完了しました!この実験では、kubectl logs コマンドを使用して、ポッド内で実行されているコンテナからのログを表示する方法を学びました。また、特定のコンテナや複数のコンテナからのログを表示する方法、リアルタイムでログを追跡する方法、およびコンテナ内からログを生成する方法を学びました。これらのスキルは、Kubernetesクラスタでのトラブルシューティングに欠かせないものです。