记一次使用Flannel插件排错历程
记一次使用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插件排错历程的更多相关文章
- HTTP Error 500.0 - ANCM In-Process Handler Load Failure 排错历程
先上报错图 环境 Window Server 2008 r2 netcore 2.2 排错历程 看到这个错 我第一个想到netcore 安装问题 先检查了下环境 发现没问题 我排查了下应用池 确定是无 ...
- minikube配置CRI-O作为runtime并指定flannel插件
使用crio作为runtime后,容器的启动将不依赖docker相关的组件,容器进程更加简洁.如下使用crio作为runtime启动一个nginx的进程信息如下:根进程(1)->conmon-& ...
- 记一次被DDoS敲诈的历程 糖果LUA FreeBuf 今天 0x01 背景
记一次被DDoS敲诈的历程 糖果LUA FreeBuf 今天 0x01 背景
- 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 ...
- CNI flannel插件
// plugins/meta/flannel/flannel.go func cmdAdd(args *skel.CmdArgs) error 调用n, err := loadFlannelNetC ...
- Qt try catch排错历程——C++的异常对除零不起作用
前几天从网上下载了一份网友用Qt写的作品,打开时发现它是用VS2010写的,而我机器上只有VS2008,倒腾了半天最终没能用VS2008打开,而自己又不想再安装VS2010.还好在工程中有.pro文件 ...
- 害你加班的bug就是我写的,记一次升级Jenkins插件引发的加班
主旨 本文主要记录了下Jenkins升级插件过程中出现的场景,一次加班经历,事发时没有截图,有兴趣可以看看. 起因 需求 最近有个需求:在Jenkins流水线中完成下载Git上的文件简单修改并提交的功 ...
- 记一次使用idea插件CamelCase技巧
1.在idea中下载插件CamelCase插件 2.使用Shift+Alt+U快捷键进行转换 3.由于转换格式比较导致多次使用快捷键才能达到自己想要的效果,此插件提供了允许禁用某些转换或更改它们在首 ...
- 前端利器躬行记(8)——VSCode插件研发
VSCode提供了丰富的 API,可以借助编辑器扩展许多定制功能. 本次研发了一款名为 Search Method 的插件,在此记录整个研发过程. 一.准备工作 1)安装环境 首先是全局安装 yo 和 ...
- 记2012-2013年一路的Windows Phone历程
昨天和秦春林同学小聚一次,不厌其烦的唠叨各种认识了许多年的纪念,感觉他仍然保持着那份对技术的追求和梦想,而我却已经变得逐利,每个人享受幸福的方式不一样,因此追逐幸福的过程也就是没有办法一样了,你无法知 ...
随机推荐
- rust学习笔记(1)
参考 rust圣经 参考 通过例子学习rust cargo 是rust的包管理器+编译工具 创建新项目 使用下述指令创建一个新的项目 cargo new rust_learn 执行 使用 cargo ...
- css设置backgroud:url(),无效
react项目中,使用styled-components编写样式,给元素添加背景图不生效. background直接设置十六进制颜色或者颜色的英文名称都是可行的,但是使用url无作用,那就是url问题 ...
- 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
效果 来具体介绍之前先来看看效果. 使用C#构建了一个简单的MCP客户端,以下为运行这个简单客户端的截图,同样可以在Cline等其它的一些MCP客户端中玩耍. 创建一个数据库表: 获取数据库中的所有表 ...
- 朱朝兵《Web前端开发之HTML5+CSS3快速入门》课程资料在线学习
<Web前端开发之HTML5+CSS3快速入门> [课程简介]本课程由一直专注前端技术与Discuz模板设计与制作!DZ起点网创始人朱朝兵出品,通过本课程学习,即可掌握html5的基本结构 ...
- mosquitto的基本参数使用
当使用mosquitto_pub命令时,可以使用多个参数来配置发布行为.以下是mosquitto_pub命令的一些常见参数及其详细说明: -h, --host <hostname>:指定连 ...
- 【WinForm】WinForm 生成单文件程序
WinForm 生成单文件程序 零.解决 安装 Costura.Fody 安装好这个库后生成的就是单文件了. .Net 3.5 NuGet控制台 NuGet\Install-Package Costu ...
- MONyog入门总结
1.安装步骤 1)安装MONyog_6.6.3.exe文件,步骤如下: 2)停止MONyog服务 3)将MONyog.exe和MONyog-patch.exe文件放到E:\MONyog\bin目录下 ...
- 🧠 Model Context Protocol(MCP)详解:AI 编程新时代的“USB 接口
目标读者:具备一定编程基础,但尚未涉足 AI 编程的开发者 本文目的:帮助你理解 MCP 的核心概念.技术优势.运作机制,并指导你如何使用 MCP 构建智能体项目. 什么是 MCP? MCP,全称 M ...
- 机器人操作系统ROS2之简介
什么是ROS2? ROS(机器人操作系统)是用于机器人应用的开源软件开发工具包.ROS 为各行业的开发者提供了一个标准的软件平台,帮助他们从研究和原型设计一直推进到部署和生产,从驱动程序到最先进的算法 ...
- 什么是 Java 的 AOT(Ahead-Of-Time)?
Java 的 AOT(Ahead-Of-Time) 1. 定义 AOT(Ahead-Of-Time)编译是与 JIT(Just-In-Time)相对的一种编译方式. 在 AOT 模式下,Java 字节 ...