问题
阿里云的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的日志配置:
那么可以知道容器的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的运行配置为:
红色框是配置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
输出的提示是:
尽然没有说配置的可选值是什么,然后官网的文档也没有说怎么配置,连-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
的配置
- 等待kubelet重启对应的pod,可以通过
docker ps | grep scheduler
来看对应的pod是否已经重启 -
docker ps | grep scheduler
获得对应的container id - 查看对应的
/var/lib/docker/containers/<container-id>/<container-id>-json.log
就可以获得对应的日志了
总结
如果需要“hack”其它组件也是类似的原理。不过提醒大家,这个只能是作为开发/测试需要时才使用。在生产环境还是要保留原有的方式,毕竟那个是经过生产检验过的配置方式。