(k8s)Flannel Error问题解决!
1.问题描述
书接上回,我们在解决kubectl不断重启的时候引入了Flannel 网络插件,但是一上来就报错,
2.问题解决
自己的思路:照例开始检查
1.先检查一下目前Flannel的pod
kubectl get pods --all-namespaces
2.检查 Flannel的pod的日志
kubectl describe pod kube-flannel-ds-4d456 -n kube-flannel
kubectl logs kube-flannel-ds-4d456 -c kube-flannel -n kube-flannel
找到了主要的问题所在,提示我们Error registering network: failed to acquire lease: node "master" pod cidr not assigned
3.分析问题
Error registering network: failed to acquire lease: node "master" pod cidr not assigned
这表明 Kubernetes 的控制平面(包括 kube-controller-manager
)无法为节点分配 Pod CIDR。需要确保 kube-controller-manager
能够获取到正确的 Pod CIDR。
解决方法
1. 为 kube-controller-manager
设置 Pod CIDR
你可以通过编辑 kube-controller-manager
的 kubeadm
配置来确保 Pod CIDR 正确设置。具体步骤如下:
-
检查
kubeadm
配置:确保在kubeadm
初始化时已经指定了--pod-network-cidr
参数。如果没有指定 Pod CIDR,可以通过以下方式为kubeadm
初始化指定该参数:kubeadm init --pod-network-cidr=10.244.0.0/16
这会为 Kubernetes 集群中的 Pod 分配一个 CIDR 范围。根据网络环境,CIDR 范围可能会有所不同。
-
修改 Kubernetes 控制平面节点的配置: 如果集群已经初始化并运行,可以手动编辑
kube-controller-manager
配置,使其能够与网络插件正确交互。通过以下方式编辑
kube-controller-manager.yaml
文件:- 找到
--allocate-node-cidrs=true
这一项,确保它被启用。 - 如果没有,手动在
command
中添加--allocate-node-cidrs=true
和--cluster-cidr=10.244.0.0/16
(与网络插件的配置一致)。
修改后的部分应该类似于:
- --allocate-node-cidrs=true
- --cluster-cidr=10.244.0.0/16
- 找到
在这里加上我们需要的两段话,重启,成功!!!!!!!!!!!
4.总结
- 确保
kube-controller-manager
的配置中指定了正确的--cluster-cidr
。 - 检查
kube-flannel
配置,确保其与kube-controller-manager
中的 CIDR 匹配。 - 验证节点的 Pod CIDR 是否已经正确分配。
- 如果仍然存在问题,尝试重新初始化
kubeadm
集群,确保指定了--pod-network-cidr
参数。
5.没有提到的地方
在此之前我们还尝试了一下几个地方,但一开始并没有奏效
这些命令主要是与 Linux 网络配置 和 Kubernetes 集群中的网络流量 管理相关的。它们涉及到桥接网络、IP 转发和防火墙规则。下面是每个命令的详细解释:
1. modprobe br_netfilter
- 这条命令加载了
br_netfilter
模块。br_netfilter
是一个内核模块,用于启用 Linux 内核对桥接网络接口的过滤能力。它允许在桥接网络中处理 IP 和 IP6 的防火墙规则,通常用于 Docker 和 Kubernetes 等容器化平台。 - 启用该模块后,容器之间的网络流量可以通过 iptables 进行过滤。
2. lsmod | grep br_netfilter
lsmod
命令列出当前加载的所有内核模块。grep br_netfilter
是通过管道将输出过滤,只显示br_netfilter
模块的状态。- 如果该模块已成功加载,你会看到类似于
br_netfilter 32768 0
的输出,表示br_netfilter
模块已加载并且未被其他模块使用。
3. sysctl -w net.bridge.bridge-nf-call-iptables=1
sysctl
用于查看或修改内核参数。这个命令修改了net.bridge.bridge-nf-call-iptables
参数,将其设置为1
,表示启用桥接网络接口(例如 Docker 或 Kubernetes 使用的桥接网络)上数据包的iptables
过滤。- 默认情况下,Linux 桥接网络会直接转发数据包,不经过防火墙规则。通过启用
bridge-nf-call-iptables
,数据包会先通过iptables
进行过滤。
4. sysctl -w net.bridge.bridge-nf-call-ip6tables=1
- 这条命令与上面的命令类似,只是它启用了对 IPv6 数据包的过滤。它会让桥接网络上的 IPv6 数据包也经过
ip6tables
(IPv6 防火墙)进行处理。
5. sysctl -w net.ipv4.ip_forward=1
- 这个命令启用了 IP 转发(
ip_forward
),即允许系统转发通过它的网络接口接收到的 IP 数据包。这对于路由器、网关以及容器环境中的节点间通信(比如 Kubernetes 集群中的 Pod 之间)是必须的。 - 启用 IP 转发后,系统会将网络包从一个接口转发到另一个接口,从而实现容器或虚拟机之间的通信。
6. sysctl -p
- 这个命令会加载和应用
/etc/sysctl.conf
文件中的配置或系统中当前尚未应用的参数。这是一个全局的配置更新命令,确保之前使用sysctl -w
修改的参数永久生效。
7. sysctl
命令输出:
net.ipv4.tcp_max_tw_buckets = 4096 net.core.somaxconn = 4096 net.ipv4.tcp_slow_start_after_idle = 0 kernel.sysrq = 1 net.ipv6.conf.all.disable_ipv6 = 0 net.ipv6.conf.default.disable_ipv6 = 0 net.ipv6.conf.lo.disable_ipv6 = 0 kernel.printk = 5
net.ipv4.tcp_max_tw_buckets = 4096
:设置最大 TCPTIME_WAIT
状态的连接数。这个参数控制 TCP 协议栈中TIME_WAIT
状态的连接桶的数量,避免因为过多的连接导致资源耗尽。net.core.somaxconn = 4096
:调整系统可以为每个监听套接字队列分配的最大连接数。增加该值可以允许更多的并发连接。net.ipv4.tcp_slow_start_after_idle = 0
:禁用 TCP 空闲后慢启动的机制。正常情况下,TCP 会在连接空闲后进入慢启动阶段,但设置为 0 会禁用这一行为,从而加速连接恢复。kernel.sysrq = 1
:启用 SysRq 键的功能,允许在系统发生故障时进行紧急操作,如重启、查看堆栈等。net.ipv6.conf.all.disable_ipv6 = 0
、net.ipv6.conf.default.disable_ipv6 = 0
、net.ipv6.conf.lo.disable_ipv6 = 0
:这些参数确保启用 IPv6 支持,不会禁用全局、默认和回环接口的 IPv6 地址。kernel.printk = 5
:调整内核日志打印级别,5
表示内核打印日志的级别,较低的级别会显示更多的调试信息。
6.为什么?
在 Kubernetes 集群中,Flannel 是一个常用的网络插件,用于提供容器之间的网络连接。Flannel 通过为每个节点分配一个子网并配置网络地址转换(NAT)来实现容器网络的隔离和通信。
当你在 Kubernetes 控制平面节点上修改 kube-controller-manager
配置,确保启用了 --allocate-node-cidrs=true
和 --cluster-cidr=10.244.0.0/16
,这对 Flannel 的成功运行至关重要。以下是详细的原因和解释:
1. --allocate-node-cidrs=true
- 这个参数告诉 Kubernetes 控制平面节点(特别是
kube-controller-manager
)启用自动为每个节点分配 CIDR(子网)块的功能。 --allocate-node-cidrs=true
启用后,Kubernetes 会在集群初始化时为每个节点分配一个专用的 IP 子网。这个子网会被分配给该节点上所有运行的 Pod。- Flannel 作为网络插件,会使用这些子网来为容器分配 IP 地址。Flannel 会确保每个 Pod 获得唯一的 IP 地址,避免与其他 Pod 或节点的 IP 地址冲突。
2. --cluster-cidr=10.244.0.0/16
--cluster-cidr
设置 Kubernetes 集群的 Pod 网络地址范围。在你的例子中,--cluster-cidr=10.244.0.0/16
设置了集群的 Pod 网络地址池为10.244.0.0/16
。这意味着所有的 Pod 地址将从这个范围内分配。- Flannel 需要知道这个地址范围,以便能够正确地为每个节点分配子网。每个节点的子网必须来自这个范围,Flannel 会确保每个节点的 IP 地址分配不会冲突。
- 如果
--cluster-cidr
设置不正确,Flannel 无法为 Pod 正确分配 IP 地址,导致 Pod 无法通信。
3. Flannel 与 Kubernetes 配合
- Flannel 使用了 Subnet 模式,其中每个节点都有一个 CIDR 子网,并且每个 Pod 都会获得该子网内的 IP 地址。
--allocate-node-cidrs=true
和--cluster-cidr=10.244.0.0/16
配置启用后,kube-controller-manager
会自动为每个节点分配一个子网(例如:10.244.1.0/24
、10.244.2.0/24
等),然后 Flannel 会为每个节点上的 Pod 分配一个独立的 IP 地址,这些地址会在节点的子网范围内。
4. 为什么需要这两项配置?
- 如果
--allocate-node-cidrs=true
被禁用,Kubernetes 不会自动分配节点的子网,Flannel 就无法为每个节点分配唯一的子网。结果,Flannel 无法正确配置每个节点的网络,从而无法为 Pod 分配 IP 地址。 - 如果没有正确设置
--cluster-cidr
,Flannel 就无法知道应该从哪个地址池中选择子网来分配给每个节点。这会导致 Pod 无法连接,或者多个节点之间的 IP 地址发生冲突。
5. Flannel 启动时如何工作
- Flannel 启动时会通过 API Server 获取集群的 CIDR 范围(即
--cluster-cidr
配置的值)。 - 它会为每个节点分配一个子网,并将该子网中的 IP 地址分配给该节点上的 Pod。Flannel 会通过 VXLAN、host-gw 或其他后端方式将这些网络连接起来,确保集群内的 Pod 可以跨节点通信。
总结
通过确保在 kube-controller-manager
配置中启用 --allocate-node-cidrs=true
和设置合适的 --cluster-cidr=10.244.0.0/16
,你告诉 Kubernetes 和 Flannel 网络插件如何分配 Pod 的 IP 地址。这样,Flannel 可以正确地为每个节点分配一个子网,并通过 Flannel 网络来连接各个节点的 Pod。这个配置是 Flannel 成功运行和集群内容器之间正常通信的关键。
要注意10.244.0.0/16!!!!这个是我现在的子网ip范围!!要根据自己的来调整,
但是这样我的也是可以加入的,真酷!,下一节总结一下这段时间使用的命令!
相关文章:

(k8s)Flannel Error问题解决!
1.问题描述 书接上回,我们在解决kubectl不断重启的时候引入了Flannel 网络插件,但是一上来就报错, 2.问题解决 自己的思路:照例开始检查 1.先检查一下目前Flannel的pod kubectl get pods --all-namespaces 2.检查 Flannel的po…...

Delaunay三角刨分算法理解及c#过程实现
Delaunay三角刨分算法理解及c#过程实现 0 引言1 关于三角剖分2 Delaunay三角剖分算法实现及对比3 结语0 引言 💻💻AI一下💻💻 三角剖分是什么? 三角剖分是一种将平面或曲面划分成三角形集合的方法。在二维平面中,给定一个平面区域(可以是多边形等),通过连接区域…...
Backend - ADO.NET(C# 操作Oracle、PostgreSQL DB)
目录 一、引入参考 1. ConfigurationManager的调用前提: 2. NpgsqlConnection的调用前提: 3. OracleConnection的调用前提: 二、设置数据库链接字串 1. 在App.config中设定链接数据库详情 2. 获取数据库链接字串 三、调用 1.调用Oracle数据库…...

Idea-离线安装SonarLint插件地址
地址: SonarQube for IDE - IntelliJ IDEs Plugin | Marketplace 选择Install Plugin from Disk..,选中下载好的插件,然后重启idea...

Leetcode Hot100 第三题 234. 回文链表
用快慢指针找到链表中间节点反转后面一段链表遍历每个节点做判断为什么是while pre: 不能写while head呢 ? 答:因为slow节点在反转后,他的前序节点除了反转之后的节点,之前正序的节点仍然存在的,即slow.pre 的next依旧是slow, 我…...

Python教程丨Python环境搭建 (含IDE安装)——保姆级教程!
工欲善其事,必先利其器。 学习Python的第一步不要再加收藏夹了!提高执行力,先给自己装好Python。 1. Python 下载 1.1. 下载安装包 既然要下载Python,我们直接进入python官网下载即可 Python 官网:Welcome to Pyt…...

SpringBoot项目实战(39)--Beetl网页HTML文件中静态图片及CSS、JS文件的引用和展示
使用Beetl开发网页时,在网页中使用的CSS、JS、图片等静态资源需要进行适当的配置才可以展示。大致的过程如下: (1)首先Spring Security框架需要允许js、css、图片资源免授权访问。 (2)网站开发时࿰…...
ARIMA模型 (AutoRegressive Integrated Moving Average) 算法详解与PyTorch实现
ARIMA模型 (AutoRegressive Integrated Moving Average) 算法详解与PyTorch实现 目录 ARIMA模型 (AutoRegressive Integrated Moving Average) 算法详解与PyTorch实现1. ARIMA模型概述1.1 时间序列预测1.2 ARIMA的优势2. ARIMA的核心技术2.1 自回归 (AR)2.2 差分 (I)2.3 移动平…...

【Uniapp-Vue3】swiper滑块视图容器的用法
我们使用swiper标签就可以实现轮播图的效果。 一、swiper组件的结构 整体的轮播图使用swiper标签,轮播的每一页使用swiper-item标签。 <template><swiper class"swiper"><swiper-item><view class"swiper-item">111…...

allure报告修改默认语言为中文
1、项目根目录创建.py文件,把代码复制进去 import os from pathlib import Pathdef create_settings_js_file(directory"../pytest_mytt/reports/allures/", filenamesettings.js):# 创建或确认目录存在Path(directory).mkdir(parentsTrue, exist_okTrue…...

国产3D CAD将逐步取代国外软件
在工业软件的关键领域,计算机辅助设计(CAD)软件对于制造业的重要性不言而喻。近年来,国产 CAD 的发展态势迅猛,展现出巨大的潜力与机遇,正逐步改变着 CAD 市场长期由国外软件主导的格局。 国产CAD发展现状 …...
GolangWeb开发- net/http模块
文章目录 Golang开发-案例整理汇总一、net/http介绍二、HTTP客户端Get请求Post请求三、HTTP服务端总结Golang开发经典案例,点击下方链接 Golang开发-案例整理汇总 一、net/http介绍 Go语言内置的net/http包提供了HTTP客户端和服务端的实现。 文档链接: https://pkg.go.dev/n…...
Vue2中使用Echarts
1.安装echarts 在项目根目录下,使用npm或yarn安装ECharts: npm install echarts --save 或者 yarn add echarts 2.在相应的vue页面中引入echarts <script> import * as echarts from "echarts"; </script> 3.代码解析 <…...

AI赋能服装零售:商品计划智能化,化危机为转机
在服装零售这片竞争激烈的战场上,每一个细微的决策都可能成为品牌兴衰的关键。当市场波动、消费者口味变化、供应链挑战接踵而至时,许多品牌往往将危机归咎于外部环境。然而,真相往往更为深刻——“危机不是外部的,而是你的商品计…...
Spring AI ectorStore
Spring AI中的VectorStore是一种用于存储和检索高维向量数据的数据库或存储解决方案,它在AI应用中扮演着至关重要的角色。以下是对Spring AI VectorStore的详细解析: 一、VectorStore的基本概念 定义:VectorStore特别适用于处理那些经过嵌入…...
zig 安装,Hello World 示例
1. 安装 Zig 首先,你需要在你的计算机上安装 Zig 编译器。你可以从 Zig 官方网站 下载适合你操作系统的版本。 安装完成后,你可以在终端中运行以下命令来检查 Zig 是否安装成功: zig version如果一切正常,它会显示 Zig 的版本信…...
龙蜥Linux系统部署docker21.1.3版本
龙蜥系统配置docker环境 更新yum源 更新软件源中的包。 yum update安装底层工具 yum install -y yum-utils device-mapper-persistent-data lvm2添加阿里云仓库 # 添加阿里云的docker镜像仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/c…...

django解决跨域问题
# 1.安装django-cors-headers 库 pip install django-cors-headers -i https://pypi.tuna.tsinghua.edu.cn/simple2.添加到应用程序中 添加 corsheaders 到你的 INSTALLED_APPS 设置中: INSTALLED_APPS [...corsheaders,... ]3.添加中间件 MIDDLEWARE [...cor…...

【蓝桥杯选拔赛真题60】C++寻宝石 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解
目录 C++寻宝石 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 五、运行结果 六、考点分析 七、推荐资料 C++寻宝石 第十四届蓝桥杯青少年创意编程大赛C++选拔赛真题 一、题目要求 1、编程实现 有N(1<N<100)个盒子排成一排,每个盒子都放…...

Git 从入门到精通
一、环境配置 下载地址:https://git-scm.com/downloads/ 二、用户配置 找到git bash git --version 查看当前版本 git config --global user.name szhipeng625 设置用户名 git config --global user.email szhipeng625gmail.com 设置邮箱 git config --global …...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...