了解Kubernetes的人都知道,我们要想在Kubernetes中创建一个Deployment 部署,就会在Node上创建一个Pod,Pod是Kubernetes中对于一组容器以及与容器相关的资源的集合。Pod中的容器会共享IP和端口资源。而Pod总是运行在Node上,Node可以是物理机也可以是虚拟机。
但是,很多开发者都会遇到这样一个问题,Kubernetes node总是自己重启,到底是什么原因导致的呢?如何查找具体的问题点?
有相关经验的人,第一反应是看log。
在生产环境中,使用kubectl命令是可以查看pod的log的;但是查看log很不方便。容器针对标准输出和标准错误的log都是落盘了的,如果使用kubernetes管理,还需要去每个container查看磁盘上的日志。所在,在实际生产环境中,我们需要使用官方推荐的elasticsearch+kibana。
和docker一样,Kubernetes在日志这一块的支持主要还是在标准输出上。比较通用的做法是用ELK这套东西来操作。首先,在创建pod的时候,就把宿主机的某个目录映射上去,pod写日志到这个目录下。其次,在宿主机上运行一个单独的搜集日志的进程(logstash,fluentd),对这个目录树下的日志做统一收集,然后发送到远程的日志服务器上去。
docker daemon --log-driver可以修改日志输出,比如输出给syslog 这样的日志收集工具。syslog可以通过TCP协议将日志发给logstash,再结合elasticsearch+kibana,就是一套日志收集系统了。