前言

配置 calico 网络插件时,kubectl get node 报错: NoReady

kubectl describe node node

Name:               node
Roles: <none>
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
kubernetes.io/arch=amd64
kubernetes.io/hostname=node
kubernetes.io/os=linux
Annotations: kubeadm.alpha.kubernetes.io/cri-socket: /run/containerd/containerd.sock
node.alpha.kubernetes.io/ttl: 0
projectcalico.org/IPv4Address: 192.168.58.246/24
projectcalico.org/IPv4IPIPTunnelAddr: 10.244.167.128
volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp: Mon, 22 Apr 2024 03:20:16 +0000
Taints: node.kubernetes.io/not-ready:NoExecute
node.kubernetes.io/not-ready:NoSchedule
Unschedulable: false
Lease:
HolderIdentity: node
AcquireTime: <unset>
RenewTime: Mon, 22 Apr 2024 05:36:58 +0000
Conditions:
Type Status LastHeartbeatTime LastTransitionTime Reason Message
---- ------ ----------------- ------------------ ------ -------
NetworkUnavailable False Mon, 22 Apr 2024 05:35:09 +0000 Mon, 22 Apr 2024 05:35:09 +0000 CalicoIsUp Calico is running on this node
MemoryPressure False Mon, 22 Apr 2024 05:33:18 +0000 Mon, 22 Apr 2024 03:20:16 +0000 KubeletHasSufficientMemory kubelet has sufficient memory available
DiskPressure False Mon, 22 Apr 2024 05:33:18 +0000 Mon, 22 Apr 2024 03:20:16 +0000 KubeletHasNoDiskPressure kubelet has no disk pressure
PIDPressure False Mon, 22 Apr 2024 05:33:18 +0000 Mon, 22 Apr 2024 03:20:16 +0000 KubeletHasSufficientPID kubelet has sufficient PID available
Ready False Mon, 22 Apr 2024 05:33:18 +0000 Mon, 22 Apr 2024 03:20:16 +0000 KubeletNotReady container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized

故障原因

网络插件的网卡发现机制,修改 IP_AUTODETECTION_METHOD 对应的 value 值。

官方提供的 yaml 文件中, ip 识别策略(IPDETECTMETHOD)没有配置,即默认为 first-found ,这会导致一个网络异常的 ip 作为 nodeIP 被注册,从而影响 node-to-nodemesh

IP_AUTODETECTION_METHOD 配置项默认为 first-found,这种模式中 calico 会使用第一获取到的有效网卡,虽然会排除 docker 网络,localhost,但是在复杂网络环境下还是有出错的可能。在这次异常中 master 上的 calico 选择了一个非主网卡。

为了解决这种情况,IP_AUTODETECTION_METHOD 还提供了两种配置 can-reach=DESTINATIONinterface=INTERFACE-REGEX

can-reach=DESTINATION  配置可以理解为 calico 会从部署节点路由中获取到达目的 ip 或者域名的源 ip 地址。

interface=INTERFACE-REGEX  配置可以指定 calico 使用匹配的网卡上的第一个IP地址。列出网卡和IP地址的顺序取决于系统。匹配支持 goalong 的正则语法。

解决方法

修改配置文件 calico.yamlCALICO_IPV4POOL_CIDRIP_AUTODETECTION_METHOD 配置项

kind: DaemonSet
apiVersion: apps/v1
metadata:
name: calico-node
namespace: kube-system
labels:
k8s-app: calico-node
spec:
...
containers:
...
env:
...
# - name: CALICO_IPV4POOL_CIDR
# value: "192.168.0.0/16"
...
- name: IP_AUTODETECTION_METHOD
value: "can-reach=${DNS 服务器 IP 地址}"

去掉 CALICO_IPV4POOL_CIDR 注释(注意-要与其他项的-对齐,否则会报错),并配置 value 值,使其与 kubeadm 初始化集群中的 pod_network_cidr 配置项保持一致

增加 IP_AUTODETECTION_METHOD 配置项,value 值后面的网段配置为 DNS 服务器 IP 地址

  • CALICO_IPV4POOL_CIDR: 集群 Pod 的 IP 的 cidr 网段

  • CALICO_IPV4POOL_IPIP: 集群 Pod 之间的数据包路由模式

    1. IPIP 模式填写: "Always"
    2. Bgp 模式填写: "Off"
    3. 跨网段模式填写: "CrossSubnet" (跨网段模式即 IPIP-Bgp 混合模式: 同子网内路由采用 Bgp 模式,跨子网路由采用 IPIP 模式)
  • IP_AUTODETECTION_METHOD: calico 实例发现节点目标物理网卡的方法

    1. 不配置 IP_AUTODETECTION_METHOD:默认使用"first-found"寻找节点物理网卡方法,即寻找到第一个网卡设定为节点的目标物理网卡
    2. "interface=${正则表达式}": 使用正则表达式寻找节点的目标物理网卡
    3. "can-reach=${DNS 服务器 IP 地址}": 使用 ping 通 DNS 服务器 IP 的方法寻找节点的目标物理网卡
    4. "cidr=${物理网卡 IP 所在的 CIDR 网段}": 使用 CIDR 的网段匹配方法寻找节点的目标物理网卡

然后重新执行 kubectl apply -f calico.yaml

kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready control-plane 2d18h v1.28.2
node Ready <none> 137m v1.28.2

解决完成!

calico配置报错 kubelet.go:2855] "Container runtime network not ready"的更多相关文章

  1. 解决eclipse spring配置报错:cvc-elt.1: Cannot find the declaration of element

    解决eclipse spring配置报错:cvc-elt.1: Cannot find the declaration of element 'beans'.Referenced file conta ...

  2. 【GitLab】gitlab上配置webhook后,点击测试报错:Requests to the local network are not allowed

    gitlab上配置webhook后,点击测试报错: Requests to the local network are not allowed 操作如下: 报错: 错误原因: gitlab 10.6 ...

  3. 【Azure App Service】C#下制作的网站,所有网页本地测试运行无误,发布至Azure之后,包含CHART(图表)的网页打开报错,错误消息为 Runtime Error: Server Error in '/' Application

    问题描述 C#下制作的网站,所有网页本地测试运行无误,发布至Azure之后,包含CHART(图表)的网页打开报错,错误消息为 Runtime Error: Server Error in '/' Ap ...

  4. 解决Eclipse 项目报错:Unbound classpath container: ‘JRE System Library [JavaSE-1.7]

    MyEclipse出现下面两条报错: The project cannot be built until build path errors are resolved HelloWord Unknow ...

  5. rsyslog配置报错解决

    配置过程中,查看/var/log/meassage 有报错信息: action '*' treated as ':omusrmsg:*' - please use ':omusrmsg:*' synt ...

  6. 由登录服务器时ulimit配置报错,也谈下ulimit配置

    最近在登录开发机时,有报错如下: -bash: cannot modify limit: Operation not permitted 一定是哪个地方有ulimit设置,想想看,用户登录或用户su命 ...

  7. maven 配置报错 JAVA_HOME not found in your environment

    最近比较空,想研究下spring mvc,于是编按照教程一步一步配置开发环境.配置maven完成后,运行命令mvn -v的时候,竟然报错.错误信息如下: Error: JAVA_HOME not fo ...

  8. webpack配置报错:invalid configuration object.webpack has been initialisted using a configuration objcet that does not match thie API schema

    最近接收了别人的项目,webpack配置总是报错如下:最后找到了解决办法,在此分享一下: 错误情况: 解决办法: 将package.json里面的colors删除掉即可

  9. 【原创】大叔经验分享(52)ClouderaManager修改配置报错

    Cloudera Manager中修改配置可能报错: Incorrect string value: '\xE7\xA8\x8B\xE5\xBA\x8F...' for column 'MESSAGE ...

  10. ClouderaManager启动NodeManager失败!报错Failed to initialize container executor

    报错信息: 2016-07-27 10:53:14,102 WARN org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor: ...

随机推荐

  1. Qt 中实现系统主题感知

    [写在前面] 在现代桌面应用程序开发中,系统主题感知是一项重要的功能,它使得应用程序能够根据用户的系统主题设置(如深色模式或浅色模式)自动调整其外观. Qt 作为一个跨平台的C++图形用户界面应用程序 ...

  2. 即时通讯技术文集(第44期):微信、QQ技术精华合集(Part1) [共14篇]

    为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第44 期. [-1-]  微信朋友圈千亿访问量背后的技术挑战和实践总结 [链接] http:/ ...

  3. 大型IM工程重构实践:企业微信Android端的重构之路

    本文由腾讯技术yeconglu分享,原题"企业微信大型Android系统重构之路",下文进行了排版和内容优化等. 1.引言 企业微信本地部署版(下文简称为本地版)是从2017年起, ...

  4. 6种微服务RPC框架-copy

    一类是跟某种特定语言平台绑定的,另一类是与语言无关即跨语言平台的. 跟语言平台绑定的开源 RPC 框架主要有下面几种. Dubbo:国内最早开源的 RPC 框架,由阿里巴巴公司开发并于 2011 年末 ...

  5. consul简介

    Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置. Consul是分布式的.高可用的.可横向扩展的.它具备以下特性 : 服务发现:consul通过DNS或者HTT ...

  6. 第九章 ThreadPoolExecutor源码解析

    ThreadPoolExecutor使用 + 工作机理 + 生命周期 1.最基础的线程池ThreadPoolExecutor 使用方式: 1 /** 2 * ThreadPoolExecutor测试类 ...

  7. springboot环境下的rokectMQ多数据源实现

    业务原因,需要在一个项目中与多方MQ进行业务通信: 步骤一,复制一份RocketMQProperties配置文件,避免与原来的冲突 package com.heit.road.web.config; ...

  8. kubernets学习笔记一

    了解kubernets Docker作为单一的容器技术工具并不能很好地定义容器的"组织方式"和"管理规范",难以独立地支撑起生产级大规模容器化部署的要求..因此 ...

  9. 0帧起手将腾讯混元大模型集成到Spring AI的全过程解析

    在前面,我们已经为大家铺垫了大量的知识点,并深入解析了Spring AI项目的相关内容.今天,我们将正式进入实战环节,从零开始,小雨将带领大家一步步完成将第三方大模型集成到Spring AI中的全过程 ...

  10. mysql之数据连接池

    数据库连接池 C3P0: 配置文件 <?xml version="1.0" encoding="UTF-8"?> <c3p0-config&g ...