记一次使用Flannel插件排错历程

原来使用的是Calico插件,这不准备学习K8s的网络,就准备换成Flannel了,然后噩梦就开始了。。。

直接使用kubectl apply -f 安装了flannel插件,使用kubectl get pod -n kube-system查看pod的运行状态,一切都能美好,接着就准备直接运行个Pod看是否正常,结果等了半天还是在创建,这肯定不正常了,就使用kubectl describe pod命令查看,结果发现报下面类型的错误:

Warning FailedCreatePodSandBox 7m48s kubelet, node1 Failed to create pod sandbox: rpc error: code = Unknown desc = [failed to set up sandbox container "c71c64ed91ac3f408b7809a4a98117714a15fc45282efb136affc2469a9f9b61" network for pod "coredns-7ff77c879f-544jh": networkPlugin cni failed to set up pod "coredns-7ff77c879f-544jh_kube-system" network: error getting ClusterInformation: Get https://[10.96.0.1]:443/apis/crd.projectcalico.org/v1/clusterinformations/default: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes"), failed to clean up sandbox container "c71c64ed91ac3f408b7809a4a98117714a15fc45282efb136affc2469a9f9b61" network for pod "coredns-7ff77c879f-544jh": networkPlugin cni failed to teardown pod "coredns-7ff77c879f-544jh_kube-system" network: error getting ClusterInformation: Get https://[10.96.0.1]:443/apis/crd.projectcalico.org/v1/clusterinformations/default: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")]

嗯,看来是网络插件的问题,初步分析应该是Calico没有卸载干净。当初只是执行了kubeadm reset命令,接着就分别执行了下面的几个命令:

$ ipvsadm --clear
$ rm -rf /etc/cni/net.d/
$ rm -rf $HOME/.kube/config

接着重新安装flannel插件,安装完成后,执行kubectl get pod -n kube-system查看,结果发现coredns一直起不来。使用describe命令查看,发现报错信息和上面的类似。

继续翻,原来kubelet会从默认目录读取配置文件,如果有多个配置文件,那么它会应用按字母顺序首先出现的配置文件中的 CNI 插件,CNI的配置文件默认在/etc/cni/net.d/目录。

详细可以参考官方文档:https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/

这时候感觉有些眉目了,前面我们一直在操作master,而没有管node节点,进入node节点的/etc/cni/net.d/目,果然发现有calico的遗留。

删除后进行kubeadm reset,然后重新加入master,在master上执行kubectl get pod -n kube-system,发现终于正常了。

接着呢,就有开始验证是否能正常拉取镜像,就执行了下面的命令:

kubectl create deployment nginx --image=nginx:1.14-alpine

查看pod,结果发现还是不正常,这次报下面这种错误:

Warning FailedCreatePodSandBox 5m28s (x4 over 5m34s) kubelet, node1 (combined from similar events): Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "48c46e7e0d9198ff94721fba330cc9370f166c6d1c4181fb3543ef99461c4e8d" network for pod "nginx-55f8fd7cfc-4zbvl": networkPlugin cni failed to set up pod "nginx-55f8fd7cfc-4zbvl_default" network: failed to set bridge addr: "cni0" already has an IP address different from 10.244.3.1/24

从报错信息中看出,cni的ip地址不在10.244.3.1/24这个段。在node1上使用ip address查看IP信息。

从上图中可以看到flannel.1的网关是10.244.3.9/32。接着使用cat /run/flannel/subnet.env查看子网环境:

到这里问题就明确了,我们使用的Overlay network为Flannel,也就是说Pod的IP地址段应该在Flannel的subnet下,而现在我们看到cni0的IP地址段与flannel subnet地址段不同,所以就出现了问题。

接下来直接删除这个cni0这个错误网卡,删除后会自动重建。

$ ifconfig cni0 down
$ ip link delete cni0

最后在master上进行验证,问题解决。

记一次使用Flannel插件排错历程的更多相关文章

  1. HTTP Error 500.0 - ANCM In-Process Handler Load Failure 排错历程

    先上报错图 环境 Window Server 2008 r2 netcore 2.2 排错历程 看到这个错 我第一个想到netcore 安装问题 先检查了下环境 发现没问题 我排查了下应用池 确定是无 ...

  2. minikube配置CRI-O作为runtime并指定flannel插件

    使用crio作为runtime后,容器的启动将不依赖docker相关的组件,容器进程更加简洁.如下使用crio作为runtime启动一个nginx的进程信息如下:根进程(1)->conmon-& ...

  3. 记一次被DDoS敲诈的历程 糖果LUA FreeBuf 今天 0x01 背景

    记一次被DDoS敲诈的历程 糖果LUA FreeBuf 今天 0x01 背景

  4. suse 12 二进制部署 Kubernetets 1.19.7 - 第03章 - 部署flannel插件

    文章目录 1.3.部署flannel网络 1.3.0.下载flannel二进制文件 1.3.1.创建flannel证书和私钥 1.3.2.生成flannel证书和私钥 1.3.3.将pod网段写入et ...

  5. CNI flannel插件

    // plugins/meta/flannel/flannel.go func cmdAdd(args *skel.CmdArgs) error 调用n, err := loadFlannelNetC ...

  6. Qt try catch排错历程——C++的异常对除零不起作用

    前几天从网上下载了一份网友用Qt写的作品,打开时发现它是用VS2010写的,而我机器上只有VS2008,倒腾了半天最终没能用VS2008打开,而自己又不想再安装VS2010.还好在工程中有.pro文件 ...

  7. 害你加班的bug就是我写的,记一次升级Jenkins插件引发的加班

    主旨 本文主要记录了下Jenkins升级插件过程中出现的场景,一次加班经历,事发时没有截图,有兴趣可以看看. 起因 需求 最近有个需求:在Jenkins流水线中完成下载Git上的文件简单修改并提交的功 ...

  8. 记一次使用idea插件CamelCase技巧

    1.在idea中下载插件CamelCase插件  2.使用Shift+Alt+U快捷键进行转换 3.由于转换格式比较导致多次使用快捷键才能达到自己想要的效果,此插件提供了允许禁用某些转换或更改它们在首 ...

  9. 前端利器躬行记(8)——VSCode插件研发

    VSCode提供了丰富的 API,可以借助编辑器扩展许多定制功能. 本次研发了一款名为 Search Method 的插件,在此记录整个研发过程. 一.准备工作 1)安装环境 首先是全局安装 yo 和 ...

  10. 记2012-2013年一路的Windows Phone历程

    昨天和秦春林同学小聚一次,不厌其烦的唠叨各种认识了许多年的纪念,感觉他仍然保持着那份对技术的追求和梦想,而我却已经变得逐利,每个人享受幸福的方式不一样,因此追逐幸福的过程也就是没有办法一样了,你无法知 ...

随机推荐

  1. Django实战项目-学习任务系统-自定义URL拦截器

    接着上期代码框架,6个主要功能基本实现,剩下的就是细节点的完善优化了. 首先增加URL拦截器,你不会希望没有登录用户就可以进入用户主页各种功能的,所以增加URL拦截器可以解决这个问题. Django框 ...

  2. SpringBoot原理分析-1

    SpringBoot原理分析 作为一个javaer,和boot打交道是很常见的吧.熟悉boot的人都会知道,启动一个springboot应用,就是用鼠标点一下启动main方法,然后等着就行了.我们来看 ...

  3. OpenGL与GLSL各版本对应说明

    OpenGL 4.6 (API Core Profile) (API Compatibility Profile) OpenGL Shading Language 4.60 Specification ...

  4. SQL Server 中的事务管理

    SQL Server 中的事务是什么? 事务是应该作为一个单元执行的一组 SQL 语句.这意味着事务确保所有命令都成功或都不成功.如果事务中的命令之一失败,则所有命令都失败,并且在数据库中修改的任何数 ...

  5. 原子指令,自旋锁,CAS

    原子指令,自旋锁,CAS 问题 我们先看一下这段代码: /* * badcnt.c - An improperly synchronized counter program */ /* $begin ...

  6. PHP配置并使用mosquitto

    要在PHP中配置和使用Mosquitto,你需要进行以下步骤: 安装Mosquitto PHP扩展: sudo apt-get install php-mosquitto 在PHP配置文件中启用Mos ...

  7. HTB打靶记录-EscapeTwo

    信息收集 nmap -sV -sC -O 10.10.11.51 Starting Nmap 7.95 ( https://nmap.org ) at 2025-04-05 14:52 CST Sta ...

  8. 继承 QPaintEngine 利用 QSvgRenderer 从SVG 图片中提取路径(QPainterPath)的方法

    SVG 作为为可缩放矢量图形(Scalable Vector Graphics),易于编辑和维护,基于XML的文本文件存储,在网页设计.图标制作.数据可视化和其他图形相关的领域应用广泛.在应用工程中总 ...

  9. windows里的一些常用的dos命令

    --------------------------------------------- 1. 中断命令执行 Ctrl + Z 2. 文件/目录 cd   切换目录 例:cd   // 显示当前目录 ...

  10. 可轻便docker部署的密码保存系统:Vaultwarden

    一.简介 Vaultwarden是著名的Bitwarden项目的一个分支,是一个社区驱动的项目,使用Rust语言编写.它是Bitwarden的轻量级自托管替代方案,完全兼容Bitwarden客户端协议 ...