意外停掉一台node的kubelet,发现调度有问题,研究了下调度的细节
k8s架构
控制层- kubelet(配合节点docker工作)
数据层- kube-proxy
逻辑图:
测试pod调度
停掉n1的kubelet,等几min后
kubectl get node 显示n1 not ready
在等几min后
kubectl get no -o wide AGE字段显示unkown.
在等几min.
发现开始调度了,调度结果
注: 调度完成后即使挂掉的n1起来,pod也不会重新回归了.
在跑道n1上去看,以前老的容器依旧running,待下次启动kubelet后,这些容器立马被kubelet干掉.
这是n1启动后kubelet的日志
出现的问题: kubelet和docker不好好配合,导致kubelet挂掉后无法调度.没查清楚什么问题
难道是内核和docker兼容问题? 不得而知,已上尝试调度好几次,有一次出现这个问题
参考:
https://docs.docker.com/engine/userguide/storagedriver/selectadriver/#docker-ee-and-cs-engine
http://blog.csdn.net/styshoo/article/details/60715942
为了给Docker配置overlay存储驱动,你的Docker host必须运行在Linux kernel3.18版本之上,而且加载了overlay内核驱动。对于overlay2驱动,kernel版本必须在4.0或以上。OverlayFS可以运行在大多数Linux文件系统之上。不过,现在最建议在生产环境中使用ext4。