Kubernetes那点事儿——日志管理


前言

程序运行中输出的日志默认暂存在Pod中,当Pod销毁重建时,日志也会丢失。所以需要一些持久化的方法保存程序日志。

一、日志

  1. K8s系统日志

    • kubelet组件,systemd方式部署,journalctl -u kubelet 查看
    • 其他组件,pod方式部署,kubectl logs 查看
    • 系统日志,/var/log/message

    二进制方式部署,所有组件均为systemd方式部署。

  2. K8s应用日志

    • 标准输出
    • 日志文件

二、K8s应用日志

标准输出

kubectl logs <Pod名称>
kubectl logs -f <Pod名称>
kubectl logs -f <Pod名称> -c <容器名>

在这里插入图片描述

标准输出在宿主机的路径:(此功能为docker自身功能,docker会将容器中标准输入持久化到宿主机本地文件)
/var/log/docker/containers/<container-id>/<container-id>-json.log
/var/log/containers/<container-id>.log

在这里插入图片描述

应用日志收集

1、emptyDir挂载收集

这里涉及到pod的挂载方式(存储)emptyDir,大家可以先熟悉一下,后续我们在存储部分会专门研究挂在卷。

emptydir实际是将容器中应用日志使用emptyDir数据卷将日志文件持久化到宿主机上,目录:/var/lib/kubelet/pods/<pod-id>/volumes/kubernetes.io~empty-dir/

创建一个deploymen 并 挂载 emptydir

[root@k8s-master ~]# cat emptyDir.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: log-collect
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
        volumeMounts:
        - name: logs
          mountPath: /var/log/nginx # 挂载nginx日志目录
      volumes:
      - name: logs
        emptyDir: {}

分别从宿主机日志及pod里观察日志,看日志是否一致

在这里插入图片描述
在这里插入图片描述
结果是一致的,说明使用emptyDir挂载是挂载到了宿主机的/var/lib/kubelet/pods/<pod-id>/volumes/kubernetes.io~empty-dir/logs/access.log

此方式只是将pod的应用日志文件持久化到宿主机的相应目录下,没有标准输出,所以kubectl logs无法获取到日志

在这里插入图片描述

2、边车容器收集

边车容器也就是常说的sidecar,可以理解是为是在emptyDir挂载方式上的改进,pod里再创建一个docker用于收集日志,如filebeat,fluentd等。当然,也可以作为标准输出

sidecar示例

[root@k8s-master yaml]# cat sidecar.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: log-collect
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
        volumeMounts:
        - name: logs
          mountPath: /var/log/nginx
      - name: log-coll
        image: busybox
        args: [/bin/sh,-c,'tail -f /opt/access.log']
        volumeMounts:
        - name: logs
          mountPath: /opt
      volumes:
      - name: logs
        emptyDir: {}

我们访问这个nginx,然后kubectl logs查看日志

在这里插入图片描述
当然我们可以将其他日志收集组件作为sidecar,如flunetd、filebeat等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偷学技术的梁胖胖yo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值