はじめに
この実験では、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 -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 クラスタでのトラブルシューティングに欠かせないものです。