はじめに
この実験では、Kubernetes クラスター内で実行されているポッドのログを表示するために、Kubernetes のlogsコマンドをどのように使用するかを学びます。簡単な例から始め、徐々により複雑なシナリオに進みます。
Minikube クラスタを起動する
リソースを作成する前に、動作中の Kubernetes クラスターが必要です。Minikube は、ローカルマシン上で動作する軽量の Kubernetes 環境です。
作業ディレクトリに移動する:
ターミナルを開き、デフォルトのプロジェクトフォルダに移動します。
cd /home/labex/projectMinikube を起動する:
Minikube を起動して Kubernetes クラスターを初期化します。
minikube start- このコマンドは、ローカルマシン上に単一ノードの Kubernetes クラスターをセットアップします。
- Minikube の起動には、システムの性能に応じて数分かかる場合があります。
Minikube が動作していることを確認する:
Minikube クラスターの状態を確認します。
minikube statuskubeletや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=nginxkubectl 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-busyboxkubectl 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-fluentdkubectl logsコマンドを使用して両方のコンテナからのログを表示します。kubectl logs nginx-fluentd -c nginx kubectl logs nginx-fluentd -c fluentd
まとめ
おめでとうございます。あなたは無事に Kubernetes ログコマンドの実験を完了しました!この実験では、kubectl logs コマンドを使用して、ポッド内で実行されているコンテナからのログを表示する方法を学びました。また、特定のコンテナや複数のコンテナからのログを表示する方法、リアルタイムでログを追跡する方法、およびコンテナ内からログを生成する方法を学びました。これらのスキルは、Kubernetes クラスタでのトラブルシューティングに欠かせないものです。


