はじめに
この実験では、Kubernetesクラスター内で実行されているポッドのログを表示するために、Kubernetesのlogs
コマンドをどのように使用するかを学びます。簡単な例から始め、徐々により複雑なシナリオに進みます。
この実験では、Kubernetesクラスター内で実行されているポッドのログを表示するために、Kubernetesのlogs
コマンドをどのように使用するかを学びます。簡単な例から始め、徐々により複雑なシナリオに進みます。
リソースを作成する前に、動作中のKubernetesクラスターが必要です。Minikubeは、ローカルマシン上で動作する軽量のKubernetes環境です。
作業ディレクトリに移動する:
ターミナルを開き、デフォルトのプロジェクトフォルダに移動します。
cd /home/labex/project
Minikubeを起動する:
Minikubeを起動してKubernetesクラスターを初期化します。
minikube start
Minikubeが動作していることを確認する:
Minikubeクラスターの状態を確認します。
minikube status
kubelet
やapiserver
などのコンポーネントが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つのレプリカとNginxコンテナを持つデプロイメントを作成します。
kubectl create deployment nginx --image=nginx --replicas=1
ポッドが準備完了するまで待ちます。
kubectl wait --for=condition=Ready pod -l app=nginx
kubectl logs
コマンドを使用してNginxコンテナのログを表示します。
kubectl logs POD_NAME
POD_NAME
をステップ1で作成したポッドの名前に置き換えることができ、kubectl get pod -l app=nginx
コマンドで POD_NAME
を取得できます。
このステップでは、ポッド内で実行されている特定のコンテナのログを表示する方法を学びます。
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
ポッドが準備完了するまで待ちます。
kubectl wait --for=condition=Ready pod nginx-busybox
kubectl logs
コマンドを使用してBusyBoxコンテナのログを表示します。
kubectl logs nginx-busybox -c busybox
このステップでは、ログが生成されるときにリアルタイムで追跡する方法を学びます。
-f
オプションを使用して kubectl logs
コマンドを使って、リアルタイムでログを追跡します。
kubectl logs -f nginx-busybox
新しいターミナルを開き、Nginxコンテナ内でシェルを作成します。
kubectl exec -it nginx-busybox -c nginx -- /bin/sh
コンテナ内でコマンドを実行していくつかのログを生成します。
curl 127.0.0.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
ポッドが準備完了するまで待ちます。
kubectl wait --for=condition=Ready pod nginx-fluentd
kubectl logs
コマンドを使用して両方のコンテナからのログを表示します。
kubectl logs nginx-fluentd -c nginx
kubectl logs nginx-fluentd -c fluentd
おめでとうございます。あなたは無事にKubernetesログコマンドの実験を完了しました!この実験では、kubectl logs
コマンドを使用して、ポッド内で実行されているコンテナからのログを表示する方法を学びました。また、特定のコンテナや複数のコンテナからのログを表示する方法、リアルタイムでログを追跡する方法、およびコンテナ内からログを生成する方法を学びました。これらのスキルは、Kubernetesクラスタでのトラブルシューティングに欠かせないものです。