“Hack”阿里云Kubernetes的Scheduler的日志级别

  1. 云栖社区>
  2. 博客>
  3. 正文

“Hack”阿里云Kubernetes的Scheduler的日志级别

了哥-duff 2018-06-29 09:15:14 浏览3520

问题

阿里云的Kubernetes容器服务,默认已经根据生产的要求创建好了3个master的高可用集群。每个master节点都部署了对应的apiserver, controller, scheduler。对于一些高级用户,特别是在开发测试阶段,或许需要调整这些组件的日志级别来dubug其运行的行为,则需要手工做一下日志级别的调整。那么我们需要了解阿里云的kubernetes是如何配置,从而“hack”它。

了解阿里云Kubernetes的部署方式

Docker的部署

Docker是通过systemd部署,可以登录到一台master,通过

systemctl status docker

查看docker daemon的状态,从而知道docker的配置在/usr/lib/systemd/system/docker.service
可以查看改文件知道,docker的日志配置:
image.png

那么可以知道容器的stdout的日志将存在容器的目录里,文件为/var/lib/docker/containers/<container-id>/<container-id>-json.log

Kubelet的部署方式

Kubelet也是通过systemd部署,可以登录到一台master,通过

systemctl status kubelet

查看kubelet的运行状态,从而知道kubelet的配置在/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
可以查看改文件知道,kubelet的运行配置为:
image.png
红色框是配置static pod的对应的yaml文件所在的路径:/etc/kubernetes/manifests

Static Pod的使用和原理可以参见:https://kubernetes.io/docs/tasks/administer-cluster/static-pod/

scheduler的日志启动参数

进入/etc/kubernetes/manifests目录,可以看到有三个文件,这个就是apiserver, scheduler, controller的pod的运行yaml文件

对云的scheduler的podyaml文件是:kube-scheduler.yaml,相关的配置就在这里面。从配置可以知道,该scheduler pod是直接输出到stdout的,那么它的日志对应文件就在之前说的容器的目录里。

Kubernetes scheduler的日志级别配置

Kubernetes的scheduler的日志配置第一反应就是去改配置参数,但是比较坑的是kube-scheduler --help输出的提示是:

image.png

尽然没有说配置的可选值是什么,然后官网的文档也没有说怎么配置,连-v参数都不说
不得不去google,最后找到一下文档:

https://github.com/kubernetes/community/blob/master/contributors/devel/logging.md

Hack scheduler日志级别实践

从上面的信息我们已经知道了scheduler的运行方式,以及了解了日记级别的配置,那么hack就简单多了

  • 修改 /etc/kubernetes/manifests/kube-scheduler.yaml 增加. -v=4的配置

image.png

  • 等待kubelet重启对应的pod,可以通过docker ps | grep scheduler 来看对应的pod是否已经重启
  • docker ps | grep scheduler 获得对应的container id
  • 查看对应的 /var/lib/docker/containers/<container-id>/<container-id>-json.log就可以获得对应的日志了

总结

如果需要“hack”其它组件也是类似的原理。不过提醒大家,这个只能是作为开发/测试需要时才使用。在生产环境还是要保留原有的方式,毕竟那个是经过生产检验过的配置方式。