8. k8s集群环境搭建之集群检查

各服务启动是否正常

etcd kube-apiserver kube-controller-manager kube-scheduler
kubelet kube-proxy flanneld docker

node 是否都正常

kubectl get nodes
若为notready 则重启该节点上的kubelet systemctl restart kubelet

pod中无法通过service ip访问其它容器

kubernetes service对应的endpoint是否正常,有时重启ip会变;

kubectl describe service kubernetes
如果不对则重启master node

若service对应 endpointip 正确 但仍无法访问service ip

确认kube-proxy是否启动正常,是否有权限调用api
若均正常则重启kube-proxy,若仍有问题 查看 proxy日志

flannel是否正常启动,且已管理 docker ip

ip addr
解决方案:
* systemctl stop docker
* systemctl restart flanneld
* mk-docker-opts.sh -i
* source /run/flannel/subnet.env
* ifconfig docker0 ${FLANNEL_SUBNET}
* ip addr查看是否正常
* systemctl restart docker
* systemctl restart kubelet
* 删除pod 重新自动生成

若出现重启docker后,通过ip addr查看docker0已自动重置的情况
原因为systemd在启动 dockerd 进程前,先导入flannel生成的网络相关环境变量
解决方案:删除/var/lib/docker/network/files/下的文件local-kv.db
重启docker

如果上述操作后仍有问题 通过iptables -L查看iptables规则,然后通过 iptables -F/-X/-Z 清除iptables规则

无法通过域名连接其它容器

  • dns容器是否均已启动
kubectl get pods -n kube-system
解决方案:
* 重新创建sa  kube-dns
* 重新创建deploy kube-dns
* 查看service kubernetes绑定的ip是否正确,若不正在重启kube-apiserver

创建sa时未创建secret

原因为:
apiserver中的安装ip为127.0.0.1,而controller-manager及scheduler中的masterip设置的并不是127.0.0.1
所以出现该问题,查看controller-manager日志是否正常

也可手动创建secret,并通过label "kubernetes.io/service-account.name": "myserviceaccount"关联 sa