zoukankan      html  css  js  c++  java
  • arm64 系统克隆主机上 部署 k8s 跨节点 pod 网络不通 解决方法

    前言

    ​ 测试环境中使用了一台 长城 arm 架构的服务器,创建几台虚拟机准备测试安装 kubernetes 。按照之前 虚拟化的使用方式,创建并安装一台虚拟机后,后面的虚拟机从安装好系统的虚拟机克隆而来。再克隆好的主机上搭建完 Kubernetes 之后,发现跨节点的 Pod 无法访问。


    附上参考链接:https://zhangguanzhang.github.io/2020/11/06/kylin-arm-clone-vxlan-error/


    环境信息


    系统版本:

    image-20211015163307946


    集群信息:

    image-20211015163826828


    node 信息:

    image-20211015163412152


    coredns 信息:

    image-20211015163935260



    排查过程


    创建了测试 Pod :

    [root@k8s-master ~]# cat ngx-test.yaml 
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      labels:
        app: ngx-test
      name: ngx-test
    spec:
            #replicas: 1
      selector:
        matchLabels:
          app: ngx-test
      template:
        metadata:
          labels:
            app: ngx-test
        spec:
          containers:
          - image: nginx:alpine-arm64
            name: nginx
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: ngx-test
      name: ngx-test
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: ngx-test
    

    image-20211015165502299


    通过 master 节点直接访问 Pod 地址:

    image-20211015165606927


    发现问题:Pod 网络跨主机无法通信。

    尝试在 Pod 所在的主机进行访问:

    image-20211015165854325


    发现问题:跨集群节点的Pod 网络是无法访问的。


    目前问题到这里就想到 是否是网络插件 flannel 出了问题。于是继续排查 flannel :

    image-20211015170152373


    最初,进行了 ping 测试并使用 tcpdump进行排查,无解。开始怀疑是否是 kylin arm64 兼容性的问题,但是切换到 centos 7 arm64 搭建k8s一切正常,排除了 kvm虚拟化和兼容性的问题。

    由于最初创建虚拟机是通过 克隆 的方式来创建三台虚拟机的,考虑过 mac 地址的问题,也给忽略了。

    查阅相关资料,看到有大佬已经处理过类似的问题:

    https://zhangguanzhang.github.io/2020/11/06/kylin-arm-clone-vxlan-error/

    我出现的情况和他文中的一模一样。


    回到上面的图片才发现 三张虚拟机网络 flannel.1 mac地址竟然全部一样的。查看下 集群分配的mac 地址:

    image-20211015170352897

    果然问题出在 mac 地址上面。


    解决过程

    根据大佬给出的办法,首先创建 link 文件:

    集群内的每个节点都需要创建:

    cat << 'EOF' > /etc/systemd/10-flannel.1.link
    [Match]
    OriginalName=flannel.1
    
    [Link]
    MACAddressPolicy=none
    EOF
    

    查看是否运行:

    image-20211015171501567


    再次,删除节点的 flannel.1 虚拟网卡

    ip link delete flannel.1
    

    然后删除节点对应的 kube-flannel-ds* Pod 使其 重新创建:

    kubectl delete po -n kube-system  kube-flannel-ds-skhkq
    

    重新生成的 flannel.1 网卡的 mac 地址就更新了。

    image-20211015172816310


    确保,网络的mac 和集群显示的 mac 地址统一:

    image-20211015173508350


    每个节点如上操作后,再次进行 跨节点访问测试:

    image-20211015173619624


    到此,跨节点的Pod网络恢复正常。


    总结


    出现跨节点 Pod 无法访问的问题:

    1. 查看 集群节点 是否处于 Ready 状态
    2. 检查 flannel.1 Pod 是否正常运行
    3. 查看所有节点 flannel.1 网卡 mac 是否一致
    4. 克隆主机一定要注意网卡mac 一致的问题


    --- EOF ---
  • 相关阅读:
    hdu 5101 Select
    hdu 5100 Chessboard
    cf B. I.O.U.
    cf C. Inna and Dima
    cf B. Inna and Nine
    cf C. Counting Kangaroos is Fun
    Radar Installation 贪心
    spfa模板
    Sequence
    棋盘问题
  • 原文地址:https://www.cnblogs.com/hukey/p/15412081.html
Copyright © 2011-2022 走看看