天天看点

(二进制)k8s笔记

前言:

最近在研究k8s集群ELK收集容器里面的日志,部署elk时发现Kibana没有连接到es中,报错信息如下:

报错信息提示连接不上es(k8s中是通过Pod名称、Services名称、名称空间进行连接)

启动一个busybox镜像来进行DNS测试发现无法解析任何Services,查看Dns Pod的状态、事件、日志没有发现异常,于是开始了k8s的踩坑循环中。

一、发现apiserver日志报错,如下图:

(二进制)k8s笔记

这个报错信息一般是证书有问题,服务器时区没同步或者证书hosts少ip(证书文件从刚开始集群部署成功后,就没有动过),于是我尝试重新生成ssl证书文件并上传到服务器中,不但没有解决问题,且越来越严重。

kubectl get nodes 发现node状态从Ready变成Not Ready(心态有点小崩)

查看各个组件的日志,发现都连接不上kube-apiserver,kube-apiserver报错信息如下图:

(二进制)k8s笔记

这也是证书问题,我再次重新生成证书上传到服务器,上图报错信息解决了,但是新的问题又来了

apiserver报错如下图:

(二进制)k8s笔记

kubelet报错如下图:

(二进制)k8s笔记

解决方法:

1、检查kubelet的配置信息

2、找一台干净的机器重新部署(k8s-node2配置一样),kubectl get nodes 发现有k8s-node3节点。

3、在Master上执行kubectl delete node k8s-node2,并且重新加入集群问题解决。

二、apiserver日志新的报错信息如下图:

(二进制)k8s笔记

网上查文档大概是我集群别的的项目Servicesaccount与apiserver进行通信出现的问题。

解决方法

重新生成serviceaccount

可参考 https://tonybai.com/2017/03/03/access-api-server-from-a-pod-through-serviceaccount/

三、以上问题处理完成后,发现dns还是无法解析services

简单粗暴的解决方法:

kubelet delete -f coredns.yaml

直接把coredns.yaml文件里的ServiceAccount、ClusterRoleBinding、ConfigMap、重新部署,问题解决。(如果一开始采用这种方法,估计就没那么多的坑!)