kubernetes中网络报错问题

  1. 系统环境

    #系统版本
    cat /etc/redhat-release
    CentOS Linux release 7.4.1708 (Core)
    #kubelet版本
    kubelet --version
    Kubernetes v1.10.0
    #selinux状态
    getenforce
    Disabled
    #系统防火墙状态
    systemctl status firewalld
    ● firewalld.service - firewalld - dynamic firewall daemon
    Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
    Active: inactive (dead)
     Docs: man:firewalld(1)
  2. Pod 异常问题
    #dns的Pod 一直处于 Waiting 或 ContainerCreating 状态
    kubectl get po -n kube-system
    NAME                                    READY     STATUS             RESTARTS   AGE
    kube-dns-86f4d74b45-ffwjf        0/3       ContainerCreating   0          6m
    #查看Pod详细情况
    kubectl  describe pod kube-dns-86f4d74b45-ffwjf  -n kube-system
    ##我们看到如下信息:
    Error syncing pod
    Pod sandbox changed, it will be killed and re-created.
    ##可以发现,该 Pod 的 Sandbox 容器无法正常启动,具体原因需要查看 Kubelet 日志。
    #查看Pod的log
    journalctl -u kubelet
    ##看到如下报错内容:
    RunPodSandbox from runtime service failed: rpc error: code = 2 desc = NetworkPlugin cni failed to set up pod "kube-dns-86f4d74b45-ffwjf" network: failed to set bridge addr: "cni0" already has an IP address different from 10.244.4.1/24

    ##说明
    这里的一个Pod中启动了多个容器,所以,我们使用kubectl logs 命令查看日志很有局限性,关于kubectl logs的使用,请参考kubernetes中的Pod简述与实践kubernetes中文文档

  3. 处理步骤
    #在master节点之外的节点进行操作
    kubeadm reset
    systemctl stop kubelet
    systemctl stop docker
    rm -rf /var/lib/cni/
    rm -rf /var/lib/kubelet/*
    rm -rf /etc/cni/
    ifconfig cni0 down
    ifconfig flannel.1 down
    ifconfig docker0 down
    ip link delete cni0
    ip link delete flannel.1
    ##重启kubelet
    systemctl restart kubelet
    ##重启docker
    systemctl restart docker
    #说明
    ##如果上面操作之后还是报相同的错误或是如下错误:
    "CreatePodSandbox for pod \" kube-dns-86f4d74b45-ffwjf _default(78e796f5-e
    b7c-11e7-b903-b827ebd42d30)\" failed: rpc error: code = Unknown desc = N
    etworkPlugin cni failed to set up pod \" kube-dns-86f4d74b45-ffwjf _default\"
    network: failed to allocate for range 0: no IP addresses available in range set:
    10.244.1.1-10.244.1.254"
    #执行如下操作步骤:
    ##在master主机上
    kubeadm reset
    systemctl stop kubelet
    systemctl stop docker
    rm -rf /var/lib/cni/
    rm -rf /var/lib/kubelet/*
    rm -rf /etc/cni/
    ifconfig cni0 down
    ifconfig flannel.1 down
    ifconfig docker0 down
    ip link delete cni0
    ip link delete flannel.1
    ##重启kubelet
    systemctl restart kubelet
    ##重启docker
    systemctl restart docker
    ##初始化
    kubeadm init --kubernetes-version=v1.10.1 --pod-network-cidr=10.244.0.0/16
    --apiserver-advertise-address=10.0.0.39
    ##说明:
    最后给出了将节点加入集群的命令:
    kubeadm join 10.0.0.39:6443 --token 4g0p8w.w5p29ukwvitim2ti
    --discovery-token-ca-cert-hash sha256:21d0adbfcb409dca97e65564
    1573b2ee51c
    77a212f194e20a307cb459e5f77c8
    这条命令一定保存好,因为后期没法重现的!!
    ##建立.kube
    rm -rf /root/.kube/
    mkdir -p /root/.kube/
    cp -i /etc/kubernetes/admin.conf /root/.kube/config
    chown root:root /root/.kube/config
    #在node(非master)节点上
    kubeadm reset
    systemctl stop kubelet
    systemctl stop docker
    rm -rf /var/lib/cni/
    rm -rf /var/lib/kubelet/*
    rm -rf /etc/cni/
    ifconfig cni0 down
    ifconfig flannel.1 down
    ifconfig docker0 down
    ip link delete cni0
    ip link delete flannel.1
    ##重启kubelet
    systemctl restart kubelet
    ##重启docker
    systemctl restart docker
    ## kubeadm join
    kubeadm join 10.0.0.39:6443 --token 4g0p8w.w5p29ukwvitim2ti
    --discovery-token-ca-cert-hash sha256:21d0adbfcb409dca97e65564
    1573b2ee51c
    77a212f194e20a307cb459e5f77c8
  4. 总结
    除了以上错误,其他可能的原因还有:
    镜像拉取失败,比如:
    (1)配置了错误的镜像
    (2)Kubelet 无法访问镜像(国内环境访问 gcr.io 需要特殊处理
    (3)私有镜像的密钥配置错误
    (4)镜像太大,拉取超时(可以适当调整 kubelet 的 --image-pull-progress-deadline 和 --runtime-request-timeout 选项)
    CNI 网络错误,一般需要检查 CNI 网络插件的配置,比如:
    (1)无法配置 Pod 网络
    (2)无法分配 IP 地址
    容器无法启动,需要检查是否打包了正确的镜像或者是否配置了正确的容器参数等。
  5. 参考文章
    https://github.com/kubernetes/kubernetes/issues/57280

原文地址:http://blog.51cto.com/wutengfei/2121202

时间: 2024-11-06 07:18:50

kubernetes中网络报错问题的相关文章

IE对象最后一个属性后不要加逗号,否则在IE7及以下版本中会报错

某函数返回一个对象,如果在最后一个属性后加逗号,IE7及以下版本中会报错 正确代码: return{ top:rect.top-top, bottom:rect.bottom-top, left:rect.left-left, right:rect.right-left } 错误代码(IE8以上都不会报错) return{ top:rect.top-top, bottom:rect.bottom-top, left:rect.left-left, right:rect.right-left, }

maven web 项目中启动报错java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener

本篇文章主要介绍了"maven web 项目中启动报错java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener ",主要涉及到maven web 项目中启动报错java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener 方面的内容,对于maven web 项目中启动报错jav

VC中编译报错:error C2011: 'fd_set' : 'struct' type redefinition

这是头文件包含顺序的问题,原因与解决办法见下面代码的注释. /* 包含下面这两个头文件时,必须把winsock2.h放在前面 否则编译报错,N多的重定义错误:例如 error C2011: 'fd_set' : 'struct' type redefinition */ #include <WinSock2.h> #include <Windows.h> int main(int argc, _TCHAR* argv[]) { Sleep(1); return 0; } 其实可以不

node 中 npm报错 Error: ENOENT, stat &#39;C:\Users\Administrator\AppData\Roaming\npm&#39;

今天在看node书本时,安装express,看看里面的包.没想到出现这样一种情况. 报错了.后来思考了一下,可能是修改了node的默认安装路径.于是准备在出错的路径下建一个npm文件夹. 注意,有个时候会出现找不到AppData文件夹.看图: 看到这张图时大家应该明白了.因为这张图是隐藏起来的.大家要把他显示出来.至于如何在win7下显示文件夹,就不在这罗嗦了. 完成npm文件夹的创建后: 安装express试试: 看到下面那么一大坨东西,相信大家已经知道express暗转成功了. 在看看有没有

安卓中运行报错Error:Execution failed for task &#39;:app:transformClassesWithDexForDebug&#39;解决

安卓中运行报错Error:Execution failed for task ':app:transformClassesWithDexForDebug'解决 安卓中运行报错Error:Execution failed for task ':app:transformClassesWithDexForDebug'解决

C# String.Format格式化json字符串中包含"{" "}"报错问题

json.Append(String.Format("{\"total\":{0},\"row\":{1}}", lineCount, strJSON));直接会报错 字符串中包含{或者},则需要用{{ 来代替字符 {,用}} 代替 }如:json.Append(String.Format("{{\"total\":{0},\"row\":{1}}}", lineCount, strJS

SVN 使用过程中的报错

SVN 使用过程中的报错 1.Error while creating module:org.apache.subversion.javahl.ClientException:Authorization failed svn:认证失败 出现情景:启动 svn 服务后,首次提交项目时 解决方案:修改仓储目录下的配置文件 svnserve.conf.passwd.authz 第一种:打开匿名访问.修改 svnserve.conf 文件,将 anon-access 的值改为 write 第二种:设置授

定时器setTimeout/setInterval中变量报错:not defined 的解决方法

首先声明本人资质尚浅,如有错误,欢迎指正.共同提高. ----------------------------------------------------------------------------------- 首先声明:本文不重点讨论this作用域,而是讨论普通变量在定时器中容易报错的情况: setTimeout的基本用法不再重述, 详见:http://www.w3school.com.cn/htmldom/met_win_settimeout.asp bug: setTimeout

访问kubernetes dashboard UI报错

访问kubernetes dashboard UI报错Error: 'dial tcp 10.0.66.2:9090: getsockopt: connection timed out'Trying to reach: 'http://10.0.66.2:9090/' 原因是master节点和node节点flannel 的网络通信有问题解决方法: 依次重启master和node节点flannelsystemctl restart flanneld 原文地址:http://blog.51cto.c