• 一起误删cni0虚拟网卡引发的k8s事故


    起因:

    由于生产K8S集群需要踢出一个已存在的节点后重新加入,在清理node节点环境的过程中,误将需要在node节点上执行的删除cni0虚拟网卡的操作在master节点上执行了。由于资源问题,我们的master节点也部署了很多的业务pod。这个操作导致master节点上非hostnetwork的pod的网络通信全部中断。很多业务受到了影响,告警也很及时。

    误操作命令:

    ip link del cni0
    

    紧急修复:

    为了尽快恢复业务,我直接将master节点强制排水了。将节点上的pod驱逐到了其它节点上,使得业务尽快得以恢复。

    kubectl drain master01 --ignore-daemonsets --delete-emptydir-data
    // 注意排水后,观察pod重调度部署情况。确认所有pod正常启动恢复业务!
    

    后续:

    业务是恢复了,但是master节点上的pod网络还是不通的。我想到了两种恢复手段。第一,直接将节点踢出集群,然后重新加入。第二,尝试手工恢复cni0虚拟网卡,将pod网络接回来。第一种简单粗暴些,考虑到重新加入集群执行的脚本中,因为迭代过的原因,可能有些参数或者内核参数变更过。为了避免出现修改影响到master组件。我倾向于尝试第二种方式。

    要将pod网络接回来,就要了解K8S flannel组件的通信原理和连接方式。需要理解pod虚拟veth pair对是如何工作的?这里主要涉及flannel的工作原理,网络名称空间的基本机制和操作。

    首先,flannel(vxlan模式)的工作原理如下:

  • 相关阅读:
    R语言非参数检验多重比较
    附加进程 到远程服务器中Docker容器内 调试
    Airtest & poco 入门小结
    Linux 同步管理(上)
    2562. 找出数组的串联值
    PCL相关函数
    语法练习:diff21
    【Unity】LayoutGroup自动缩放子对象大小
    DSP篇--C6678功能调试系列之Nor_FLASH调试
    开发板移植RTOS操作系统,RTOS操作系统适配开发板整理大全
  • 原文地址:https://blog.csdn.net/Huangjiazhen711/article/details/126950052