Kubernetes sidecar 边车-运行的容器增加日志功能

日志架构

应用日志可以让你了解应用内部的运行状况。日志对调试问题和监控集群活动非常有用。 大部分现代化应用都有某种日志记录机制。同样地,容器引擎也被设计成支持日志记录。 针对容器化应用,最简单且最广泛采用的日志记录方式就是写入标准输出和标准错误流。

但是,由容器引擎或运行时提供的原生功能通常不足以构成完整的日志记录方案。 在集群中,日志应该具有独立的存储和生命周期,与节点、Pod 或容器的生命周期相独立。 这个概念叫 集群级的日志

1: Kubernetes 中的基本日志记录

apiVersion: v1
kind: Pod
metadata:
  name: legacy-app
spec:
  containers:
  - name: count
    image: busybox
    args:
    - /bin/sh
    - -c
    - >
      i=0;
      while true;
      do
        echo "$i: $(date)" >> /var/log/busybox.log;
        sleep 1;
      done
    volumeMounts:
    - name: log
      mountPath: /var/log
  volumes:
  - name: log
    emptyDir: {}

pod 每隔1秒向 /var/log/busybox.log 输出运行日志
创建一个卷,让容器Mount挂载上创建的卷 logs

2: 集群级日志架构

在不修改原来容器的条件下,添加一个sidecar 边车容器。K8S没有提供原生的方法。

  • 边车容器将应用程序日志传送到自己的标准输出。
  • 利用边车容器向自己的 stdoutstderr 传输流的方式
  • 可以使用内置的工具 kubectl logs查看日志

sidecar

3:案例

kubectl edit legacy-app # 修改po

sidecar

卷

查看日志信息

kubectl logs legacy-app count-log-1

logs

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×