k8s 问题记录

2022-04-24  本文已影响0人  Robin92

关键注意解决方法。

kubectl 命令 The connection to the server localhost:8080 was refused

[root@k8s-node1 ~]# kubectl get nodes
The connection to the server localhost:8080 was refused - did you specify the right host or port?

执行机器对不对

我所用的 Kubernetes v1.5.2 集群只有 master 节点(安装了 apiserver 的)可以执行此命令,所以先检查节点是不是有问题。其他版本如 kubeadm 安装的,另作考虑。

etcd 启动失败

调查环境时发现 etcd 服务退出了,且启动不起来,通过 journalctl -xe -u etcd 查看到最后一条 read wal error (proto: Record: illegal tag 0 (wire type 0)) and cannot be repaired 信息。
通过百度查到这个可能是 protobuf 定义的下标为 0 的请求信息。
重装了 etcd 还是启动不起来。
同时偶然从 ETCD_DATA_DIR 目录中看到名为 wal 目录并尝试将其删除 rm /var/lib/etcd/default.etcd/member/wal/*,重新启动 etcd 成功。
然后启动 kube-apiserver 成功,并使用 kubectl get nodes 成功。

systemctl 启动失败调查方法

这里是 kubelet 启动失败

image.png

通过 journalctl -xe -u kubelet 查看日志,发现端口绑定不上,进而发现原来 IP 绑错了(x.x.x.130 是master 节点,当前在 x.x.x.129 节点)

image.png

改动后(注意查看下是否有其他地方配置错误),重启成功,通过 master 节点获取 kubectl get nodes 查到此节点。

docker 私有库

# vim /etc/sysconfig/docker

# Modify these options if you want to change the way the docker daemon runs
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --registry-mirror=https://registry.docker-cn.com --insecure-registry=172.16.156.128:5000'

在配置文件 /etc/sysconfig/docker 的 OPTIONS 中加入 --insecure-registry=<host>:5000

基础镜像拉取错误

image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest

这是因为 kubelet 指定了此镜像作为基础架构镜像,可以更改此配置镜像,使用私有库中的镜像。

# cat /etc/kubernetes/kubelet
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"

创建 Service 后无法通过结点地址访问

问题描述:创建了 NodePort 类型的 Service 后,发现无法通过结点 IP 访问(超时);进一步发现在集群 master 中用 curl ClusterIP:clusterPort 也无法访问成功(超时);但在 pod 所有的结点 curl dockerIP:port 可以正常返回。

原因:docker 环境跨结点无法访问,是安装的 flannel 的问题。查看原来的教程,原来是 docker iptables 规则没有改。

image.png

修改:快速配置 iptables -P FORWARD ACCEPT;固化配置参考 配置flannel网络

虚拟机磁盘被占满

问题来源:我从 k8s 相关的虚拟机上拷贝出来一个虚拟机学习 zookeeper,但发现 zookeeper 服务老挂,启动 zk 时看日志是写不进去了。经过 df . 命令查看磁盘空间已经使用了 100%。

定位:由于我们的 zk 的目录是在 /tmp 下,所以偶然在 /tmp 下执行 ls 发现都阻塞了很久。用正则列取文件的时候会报错文件太多。

➜  /tmp ls 
kube-scheduler.localhost.kube.log.ERROR.20220606-015851.13284
kube-scheduler.localhost.kube.log.INFO.20220606-014534.12925
kube-scheduler.localhost.kube.log.WARNING.20220604-183909.655
kube-scheduler.localhost.kube.log.WARNING.20220604-201409.666
... # 省略 n 条
➜  /tmp ls kube*
zsh: argument list too long: ls

解决:停掉了所有 k8s 相关的服务,然后分段删除 /tmp 下无用的 k8s 相关的文件。

systemctl disable kube-apiserver kube-controller-manager kube-proxy kubelet nfs
systemctl stop kube-apiserver kube-controller-manager kube-proxy kubelet nfs

删除后执行 df 看到磁盘只占用了 27%。

➜  /tmp df . 
Filesystem              1K-blocks    Used Available Use% Mounted on
/dev/mapper/centos-root  17811456 4665036  13146420  27% /

这些文件是什么?(待解决)

上一篇下一篇

猜你喜欢

热点阅读