管理k8s应用日志

  • k8s系统的组件日志

  • k8s cluster里面部署的应用程序日志

    -标准输出

    -日志文件

    systemd守护进程管理的组件:

    ​ journalctl -u kubelet

    Pod部署的组件:

    ​ kubectl logs {pod_id} -n {namespace}

    系统日志:

    ​ /var/log/messages

查看容器标准输出日志:

1
2
3
kubectl logs {pod_id}
kubectl logs -f {pod_id}
kubectl logs -f {pod_id} -c {container_id}

容器中应用日志可以使用emptyDir数据卷将日志文件持久化到宿主机上

创建映射pod日志yaml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
apiVersion: v1
kind: Namespace
metadata:
name: cka
labels:
app: cka
---
apiVersion: v1
kind: Pod
metadata:
name: pod01
namespace: cka
spec:
containers:
- name: webpod01
image: lizhenliang/nginx-php
volumeMounts:
- name: logs
mountPath: /usr/local/nginx/logs
- name: xflog
image: busybox
command: [/bin/sh,-c,'tail -f /opt/logs/access.log']
volumeMounts:
- name: logs
mountPath: /opt/logs/
volumes:
- name: logs
emptyDir: {} # 映射到宿主机

为什么要使用边车容器来记录业务容器的日志以及被采集:

1
容器是属于单进程管理模式,一般来说一个容器里面只跑一个应用,如果把你的业务进程和日志收集进程放到同一个容器里面会难以维护,如果业务容器down了想查看关键日志,这时就可以去日志边车容器里面去查看,所以就有这种边车模式,这也是对容器部署的一种解耦;

宿主机路径:

如果pod删除此映射到宿主机的目录也会删除;

1
/var/lib/kubelet/pods/{crontainer_ID}/volumes/kubernetes.io~empty-dir/logs/