介绍
在本实验中,你将学习如何使用 Kubernetes 的 logs
命令查看运行在 Kubernetes 集群中的 Pod 日志。你将从简单的示例开始,逐步深入到更复杂的场景。
在本实验中,你将学习如何使用 Kubernetes 的 logs
命令查看运行在 Kubernetes 集群中的 Pod 日志。你将从简单的示例开始,逐步深入到更复杂的场景。
在创建资源之前,你需要一个正在运行的 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
命令用于打印 Pod 中容器或指定资源的日志。它支持快照日志、流式传输、过滤以及各种其他选项,以实现高效的日志管理。
运行以下命令以查看 kubectl logs
的可用选项:
kubectl logs -h
你将看到以下输出:
打印 Pod 中容器或指定资源的日志。如果 Pod 只有一个容器,则容器名称是可选的。
示例:
## 从只有一个容器的 Pod nginx 返回快照日志
kubectl logs nginx
## 从有多个容器的 Pod nginx 返回快照日志
kubectl logs nginx --all-containers=true
## 从标签为 app=nginx 的 Pod 中的所有容器返回快照日志
kubectl logs -l app=nginx --all-containers=true
## 从 Pod web-1 中返回之前终止的 ruby 容器的快照日志
kubectl logs -p -c ruby web-1
## 开始流式传输 Pod web-1 中 ruby 容器的日志
kubectl logs -f -c ruby web-1
## 开始流式传输标签为 app=nginx 的 Pod 中所有容器的日志
kubectl logs -f -l app=nginx --all-containers=true
## 仅显示 Pod nginx 中最近的 20 行日志输出
kubectl logs --tail=20 nginx
## 显示 Pod nginx 在过去一小时内写入的所有日志
kubectl logs --since=1h nginx
## 显示来自具有过期服务证书的 kubelet 的日志
kubectl logs --insecure-skip-tls-verify-backend nginx
## 从名为 hello 的 Job 的第一个容器返回快照日志
kubectl logs job/hello
## 从名为 nginx 的 Deployment 的容器 nginx-1 返回快照日志
kubectl logs deployment/nginx -c nginx-1
在本步骤中,你将学习如何查看运行在 Pod 中的容器的日志。
首先创建一个包含一个副本和 Nginx 容器的 Deployment:
kubectl create deployment nginx --image=nginx --replicas=1
等待 Pod 变为就绪状态:
kubectl wait --for=condition=Ready pod -l app=nginx
使用 kubectl logs
命令查看 Nginx 容器的日志:
kubectl logs POD_NAME
将 POD_NAME
替换为步骤 1 中创建的 Pod 的名称,你可以通过 kubectl get pod -l app=nginx
命令获取 POD_NAME
。
在本步骤中,你将学习如何查看运行在 Pod 中的特定容器的日志。
创建一个包含两个容器(Nginx 和 BusyBox)的 Pod:
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
等待 Pod 变为就绪状态:
kubectl wait --for=condition=Ready pod nginx-busybox
使用 kubectl logs
命令查看 BusyBox 容器的日志:
kubectl logs nginx-busybox -c busybox
在本步骤中,你将学习如何实时跟踪日志的生成。
使用 kubectl logs
命令并添加 -f
选项以实时跟踪日志:
kubectl logs -f nginx-busybox
打开一个新的终端并在 Nginx 容器中创建一个 shell:
kubectl exec -it nginx-busybox -c nginx -- /bin/sh
在容器内运行命令以生成一些日志:
curl 127.0.0.1
切换回第一个终端,你正在跟踪日志的地方,观察新日志条目的显示。
在本步骤中,你将学习如何查看运行在 Pod 中的多个容器的日志。
创建一个包含两个容器(Nginx 和 Fluentd)的 Pod:
cat << EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: nginx-fluentd
spec:
containers:
- name: nginx
image: nginx
- name: fluentd
image: fluentd
EOF
等待 Pod 变为就绪状态:
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
命令查看运行在 Pod 中的容器的日志。你还学习了如何查看特定容器和多个容器的日志、实时跟踪日志以及从容器内部生成日志。这些技能对于排查 Kubernetes 集群中的问题至关重要。