背景
今天在部署一个平台容器版的时候redis集群始终无法正常启动,报以下错误:
Liveness probe failed: Could not connect to Redis at localhost:6379
解决过程
排除dns解析问题
因为报localhost无法访问首先修改成127.0.0.1排除是dns解析的问题,改完后仍然报错,只不过localhost改成127.0.0.1了。
Liveness probe failed: Could not connect to Redis at 127.0.0.1:6379
确定网络连接不通
这样应该是网络问题了,登陆其中一个pod测试他跟其他pod连通性
kubectl -n blueking exec bk-redis-master-0 -it -- bash
echo >/dev/tcp/172.17.0.6/6379
返回拒绝连接,进一步证实确实网络有问题了。
ip地址分配错乱
kubectl -n blueking get pod -o wide发现pod的ip地址为172.17.0网段,而flannel.1网卡为10.244.0网段,
kubectl -n kube-system edit cm kube-flannel-cfg
...
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan"
...
pod获取到了不正确的ip地址,没猜错的话172.17一般是docker网桥分配的地址。经过对比发现2个节点的flannel.1网卡有问题,只有一个节点有flanel.1网卡。
ip addr show flannel.1
ip route
ip route发现只有一个节点的路由里面看到了flannel.1网卡信息
iptables -F #清除防火墙规则
net.ipv4.ip_forward = 1 #检查是否开启转发
systemctl restart docker #重启docker
systemctl restart kubelet
kubectl -n kube-system delete pod kube-flannel-ds-8vv6x kube-flannel-ds-kltmb kube-flannel-ds-nnrlg #重启flannel容器
经过不断的删除flannel容器和重启kubelet后三个节点的flannel.1网卡地址最终正常了 。
cni0网卡配置错乱
又发现没有cni0网卡,cni0网卡是flannel.1网卡通信不可或缺的部分。检查配置发现 /var/lib/kubelet/kubeadm-flags.env 这里面缺少--network-plugin=cni参数,完整参数如下:
KUBELET_KUBEADM_ARGS="--network-plugin=cni --container-runtime-endpoint=unix:///var/run/docker.sock --fail-swap-on=false --pod-infra-container-image=k8s.gcr.io/pause:3.5"
于是三个节点都加上这个参数,重启后只有master节点正常看到cni0网卡,其他2节点还是没有。
手工添加cni0网卡
想着手工添加cni0网卡
ip link add cni0 type bridge
ip addr add 10.244.1.1/24 dev cni0
ip link set cni0 mtu 1450
ip link set dev cni0 up
添加后确实三台都看到cni0了ip route也有cni0,但是pod之间的通信仍然不通。
删除节点重新加入集群
没办法,按着网友说的,把node节点给删除,重新加信集群
在master上删除node节点
kubectl delete nodes k8s-node1-10.10.10.234
kubectl delete nodes k8s-node2-10.10.10.235
node节点删除cni0和flannel.1网卡
kubeadm reset
ip link set cni0 down
ip link set flannel.1 down
ip link del flannel.1
ip link del cni0
master节点生成token
kubeadm token create --print-join-command
将文件传输至node
scp /etc/kubernetes/admin.conf 10.10.10.234:/etc/kubernetes/
node节点加入集群
kubeadm join 10.10.10.233:6443 --token rvcoby.df5nvmsxp2injnsc --discovery-token-ca-cert-hash sha256:df52bb42fc776849fc113c780080140e48896a68904c43c043ab88158694146d
Node加集群的时候会提示文件已经存在,将原文件备份后删除,关闭kubelet,过一会集群就加上了。其中,因为我docker升级过,加集群会提示docker版本比原来的版本高,我就把版本再次换成原来的版本后顺利加入集群。
kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master-10.10.10.233 Ready control-plane,master 2y166d v1.22.2
k8s-node1-10.10.10.234 Ready <none> 63m v1.22.2
k8s-node2-10.10.10.235 Ready <none> 51m v1.22.2
重启ip错乱的pod
刚加完集群后查看pod ip仍然是错乱的,干脆把错乱的全部删除。 经过不断的删除和强制删除后pod的ip地址终于变成flannel配置里面的10.244网段的地址:
但是有些ip还是跟物理机ip一样有点不太懂,得继续研究下。 参考链接: https://blog.csdn.net/wangjie72270/article/details/122252830 https://blog.51cto.com/u_15773567/5692623