二进制安装k8s,日志所在位置 /opt/kubernetes/logs,命令查看集群主机日志命令 journalctl -u kubelet
1.k8s 污点 node.kubernetes.io/disk-pressure
kubectl taint node k8s-node2 node.kubernetes.io/disk-pressure-
问题描述:删除不了这个污点,删除了也会自动添加,新建的pod无法分配到这个节点
解决办法:磁盘快满导致,清理磁盘容量,如果还有节点还是删除不了污点 那就重启那个节点
2.二进制安装K8S报错
问题描述:如上图,未关闭selinux和系统时间不同步导致
解决办法:关闭selinux,同步时间
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
cat /etc/selinux/config #确认已经更改
时间同步
yum install ntpdate -y
ntpdate time.windows.com
3.k8sadm方式安装-节点加入集群报错
问题描述:如上图
解决办法:所有需要加入master的节点执行
echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables
4.k8s修改主机名后新建POD报错
Error from server: error dialing backend: dial tcp: lookup master-node on 100.100.2.136:53: no such host
解决办法: 改回原有主机名
4.master也作为节点加入集群正常,但其他节点加入后报错
问题描述:如上图
解决办法:安装替换默认yum安装的docker,采用二进制安装的docker后正常
5.离线安装kubectl -f apply coredns.yaml是时coredns的pod一直重启
问题描述:安装coredns,running后不断重启
解决办法: vim coredns.yaml 删除里面的loop,如下图
kubeapply -f apply coredns.yaml
5.1大量pod出现evicted(被驱逐状态),产生大量日志/opt/kubernetes/logs/占满磁盘,导致其他命名空间的项目的pod也出现大量evicted
k8s有种机制,当服务器磁盘使用超过85%之后就不允许节点再次创建了,所以节点创建之后就被驱逐了
问题描述:因为有一个节点磁盘使用率百分之88,所有新建的pod到这个节点就会被驱逐,而其他节点也正好没有资源去新建这些pod,所以就出现pod不断
的被驱逐,影响到所有命令空间的所有pod
解决办法:
1.删除所有为evicted状态的pod
kubectl get pods -n zhxy | grep Evicted | awk '{print $1}' | xargs kubectl delete pod -n zhxy
2.清理所有节点的磁盘空间,或者增加资源
cd /
du -sh * | sort –n
一层一层找找最后用rm 删除日志或者大文件
6.常见故障排查思路
kubectl get pod -n kube-system 查看集群组件状态
查看集群节点是否处于 Ready 状态 kubectl get node
a. 如果是Ready状态,再使用kubectl describe node k8s-node2 查看资源使用率 kubectl top node
b. 如果是NotReady,则使用kubectl get node -owide 查看对应的节点,然后登陆到对应节点上, 查看kubelet 和docker 服务是否正常
kubectl get cs 查看集群关键组件(etc、scheduler、controller-manager)的状态是否是 Healthy
a. 如果是,不予理睬
b. 如果是Unhealthy 状态,使用则使用kubectl get node -owide 查看对应的节点,然后登陆到对应节点上查看kubelet 和docker 服务是否正常;
7.磁盘满导致etcd故障
https://www.codercto.com/a/50013.html
8.K8S生产环境故障排查一(POD和节点问题排查)
https://blog.csdn.net/qq_25037905/article/details/117232193
9.K8S调度机制和Pod基本故障排查