×

为了解决一些节点问题,请根据要跟踪的问题确定 kubelet 的日志级别详细程度。

修改 kubelet 作为一次性方案

为了在不重新启动节点的情况下修改 kubelet(由于更改了 `machine-config(spec":{"paused":false}})`),允许您修改 kubelet 而不影响服务,请按照此步骤操作。

步骤
  1. 以调试模式连接到节点

    $ oc debug node/<node>
    $ chroot /host

    或者,可以 SSH 到节点并成为 root 用户。

  2. 建立访问权限后,检查默认日志级别

    $ systemctl cat kubelet
    示例输出
    # /etc/systemd/system/kubelet.service.d/20-logging.conf
    [Service]
    Environment="KUBELET_LOG_LEVEL=2"
  3. 在新的 `/etc/systemd/system/kubelet.service.d/30-logging.conf` 文件中定义所需的新详细程度,该文件将覆盖 `/etc/systemd/system/kubelet.service.d/20-logging.conf`。在此示例中,详细程度从 `2` 更改为 `8`

    $ echo -e "[Service]\nEnvironment=\"KUBELET_LOG_LEVEL=8\"" > /etc/systemd/system/kubelet.service.d/30-logging.conf
  4. 重新加载 systemd 并重新启动服务

    $ systemctl daemon-reload
    $ systemctl restart kubelet
  5. 收集日志,然后恢复日志级别

    $ rm -f /etc/systemd/system/kubelet.service.d/30-logging.conf
    $ systemctl daemon-reload
    $ systemctl restart kubelet

持久化 kubelet 日志级别配置

步骤
  • 使用以下 `MachineConfig` 对象进行持久化 kubelet 日志级别配置

     apiVersion: machineconfiguration.openshift.io/v1
     kind: MachineConfig
     metadata:
       labels:
         machineconfiguration.openshift.io/role: master
       name: 99-master-kubelet-loglevel
     spec:
       config:
         ignition:
           version: 3.2.0
         systemd:
           units:
             - name: kubelet.service
               enabled: true
               dropins:
                 - name: 30-logging.conf
                   contents: |
                     [Service]
                     Environment="KUBELET_LOG_LEVEL=2"

    通常,建议将 `0-4` 应用为调试级别日志,将 `5-8` 应用为跟踪级别日志。

日志详细程度描述

日志详细程度 描述

--v=0

始终对操作员可见。

--v=1

如果您不希望有详细程度,则这是一个合理的默认日志级别。

--v=2

关于服务的有用稳定状态信息和可能与系统重大更改相关的重要的日志消息。这是推荐的默认日志级别。

--v=3

有关更改的扩展信息。

--v=4

调试级别详细程度。

--v=6

显示请求的资源。

--v=7

显示 HTTP 请求头。

--v=8

显示 HTTP 请求内容。

收集 kubelet 日志

步骤
  • 正确配置 kubelet 日志级别详细程度后,您可以运行以下命令收集日志

    $ oc adm node-logs --role master -u kubelet
    $ oc adm node-logs --role worker -u kubelet

    或者,在节点内部,运行以下命令

    $ journalctl -b -f -u kubelet.service
  • 要收集主容器日志,请运行以下命令

    $ sudo tail -f /var/log/containers/*
  • 要直接收集所有节点的日志,请运行以下命令

    - for n in $(oc get node --no-headers | awk '{print $1}'); do oc adm node-logs $n | gzip > $n.log.gz; done