$ oc debug node/<node>
为了解决一些节点问题,请根据要跟踪的问题确定 kubelet 的日志级别详细程度。
为了在不重新启动节点的情况下修改 kubelet(由于更改了 `machine-config(spec":{"paused":false}})`),允许您修改 kubelet 而不影响服务,请按照此步骤操作。
以调试模式连接到节点
$ oc debug node/<node>
$ chroot /host
或者,可以 SSH 到节点并成为 root 用户。
建立访问权限后,检查默认日志级别
$ systemctl cat kubelet
# /etc/systemd/system/kubelet.service.d/20-logging.conf
[Service]
Environment="KUBELET_LOG_LEVEL=2"
在新的 `/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
重新加载 systemd 并重新启动服务
$ systemctl daemon-reload
$ systemctl restart kubelet
收集日志,然后恢复日志级别
$ rm -f /etc/systemd/system/kubelet.service.d/30-logging.conf
$ systemctl daemon-reload
$ systemctl restart 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` 应用为跟踪级别日志。
日志详细程度 | 描述 |
---|---|
|
始终对操作员可见。 |
|
如果您不希望有详细程度,则这是一个合理的默认日志级别。 |
|
关于服务的有用稳定状态信息和可能与系统重大更改相关的重要的日志消息。这是推荐的默认日志级别。 |
|
有关更改的扩展信息。 |
|
调试级别详细程度。 |
|
显示请求的资源。 |
|
显示 HTTP 请求头。 |
|
显示 HTTP 请求内容。 |
正确配置 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