k8s 问题记录
关键注意解决方法。
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 节点)
改动后(注意查看下是否有其他地方配置错误),重启成功,通过 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% /
这些文件是什么?(待解决)