kubernetes 日志管理分析

本贴最后更新于 1625 天前,其中的信息可能已经时移世易

我们了解到 k8s 主要分为两种部署方式,一种是 kubeadm,另外一种是二进制,而 kubeadm 方式部署的 k8s 集群,除了 kubelet 之是使用 systemd 之外,其他组件都是以 容器化 的方式部署的,而二进制部署的集群,都是用 systemd 方式管理组件服务的,因此这两种部署方法查看日志的方式也不一样。

一、使用 systemd 管理(适用于 kubeadm)

指定 kubelet 日志:

journalctl -u kubelet

提示:日志过多建议重定向到文件中方便查看。

journal 这个命令实际查看的日志来源于:/va/log/messages

补充:主配置文件地址:/var/lib/kubelet/config.yaml

注意:二进制部署方式一般会指定日志的路径,故上述方法不适用二进制部署方式

二、使用容器管理(输出控制台)

kubectl logs <pod名称> -n <命名空间>

可搭配 --tail-f 使用

该日志被 docker 容器接管,实际目录为:/var/lib/docker/containers/<container-id>/<container-id>-json.log
查看方式:查询该 pod 所在的节点-》查询对应的 docker 容器 id-》进入对应目录查看

三、查看容器标准输出日志(日志在本地文件中)

查看日志方式:进入 pod 中-》查看对应目录下的日志

改进办法:将日志文件持续化到宿主机上

扩展:
docker 中涉及的两个卷 volumebind mount,其中 volume 是卷目录由 docker 管理,bind mount 是挂载宿主机上文件或者目录到容器中,而 k8s 与 docker 相对应的,也有两种卷,分别为 emptydirhostpath,emptydir 由 k8s 管理,文件存放在 k8s 自己设定的目录中,hostpath 可以由用户控制,可以放到宿主机上任意目录中。

1.hostPath

示例:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: web
    image: lizhenliang/nginx-php
    volumeMounts:
    - name: logs
      mountPath: /usr/local/nginx/logs
  volumes:
  - name: logs
    hostPath:
      path: /tmp/logs
      type: Directory

apply 之前先在每个节点上创建 、tmp/logs 目录,否则 pod 会创建失败

参数解释:

  • volumes:设置数据卷来源
  • type:挂载的类型,文件还是目录
  • path:挂载的文件或者目录的路径
  • volumeMounts.namevolumes.name:卷名称需要对应
  • mountPath:容器中目录挂载的路径

pod 创建成功后,会在对应节点的 /tmp/logs 下发现有两个 nginx 的日志文件

image.png

image.png

curl 10.244.36.92 后会在 access.log 下实时刷出日志:

image.png

image.png

将日志文件挂载到宿主机目录,这样一来,就可以进容器查看或者在宿主机查看日志了。

2.emptyDir

示例:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod2
spec:
  containers:
  - name: web
    image: lizhenliang/nginx-php
    volumeMounts:
    - name: logs
      mountPath: /usr/local/nginx/logs
  volumes:
  - name: logs
    emptyDir: {}

image.png

emptyDir 日志目录查看方法:

  • 1.在分配的节点上使用 docker ps 命令查找 my-pod2 分配的 pod-id

image.png

  • 2.进入目录 /var/lib/kubelet/pods/<pod-id>/volumes/kubernetes.io~empty-dir/

image.png

curl 同样达到上述效果。

  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    110 引用 • 54 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...