Kubernetes 日志命令

KubernetesKubernetesBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,你将学习如何使用 Kubernetes 的 logs 命令查看运行在 Kubernetes 集群中的 Pod 日志。你将从简单的示例开始,逐步深入到更复杂的场景。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging 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 命令用于打印 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 中的容器的日志。

  1. 首先创建一个包含一个副本和 Nginx 容器的 Deployment:

    kubectl create deployment nginx --image=nginx --replicas=1
  2. 等待 Pod 变为就绪状态:

    kubectl wait --for=condition=Ready pod -l app=nginx
  3. 使用 kubectl logs 命令查看 Nginx 容器的日志:

    kubectl logs POD_NAME

POD_NAME 替换为步骤 1 中创建的 Pod 的名称,你可以通过 kubectl get pod -l app=nginx 命令获取 POD_NAME

查看 Pod 中特定容器的日志

在本步骤中,你将学习如何查看运行在 Pod 中的特定容器的日志。

  1. 创建一个包含两个容器(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
  2. 等待 Pod 变为就绪状态:

    kubectl wait --for=condition=Ready pod nginx-busybox
  3. 使用 kubectl logs 命令查看 BusyBox 容器的日志:

    kubectl logs nginx-busybox -c busybox

实时跟踪日志

在本步骤中,你将学习如何实时跟踪日志的生成。

  1. 使用 kubectl logs 命令并添加 -f 选项以实时跟踪日志:

    kubectl logs -f nginx-busybox
  2. 打开一个新的终端并在 Nginx 容器中创建一个 shell:

    kubectl exec -it nginx-busybox -c nginx -- /bin/sh
  3. 在容器内运行命令以生成一些日志:

    curl 127.0.0.1
  4. 切换回第一个终端,你正在跟踪日志的地方,观察新日志条目的显示。

查看多个容器的日志

在本步骤中,你将学习如何查看运行在 Pod 中的多个容器的日志。

  1. 创建一个包含两个容器(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
  2. 等待 Pod 变为就绪状态:

    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 命令查看运行在 Pod 中的容器的日志。你还学习了如何查看特定容器和多个容器的日志、实时跟踪日志以及从容器内部生成日志。这些技能对于排查 Kubernetes 集群中的问题至关重要。