Leif160519的blog Leif160519的blog

——————

目录
kubernetes日志管理分析
/    

kubernetes日志管理分析

我们了解到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 同样达到上述效果。


“The first 90% of the code accounts for the first 90% of the development time. The remaining 10% of the code accounts for the other 90% of the development time.” – Tom Cargill

标  题kubernetes日志管理分析
作  者Leif160519
出  处https://github.icu/articles/2020/06/10/1591763840061.html
关于博主:坐标南京,运维工程师,如有问题探讨可以直接下方留言。
声援博主:如果您觉得文章对您有帮助,可以评论、订阅、收藏。您的鼓励是博主的最大动力!