Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 偶尔会在没有网络的情况下创建pod,这会导致pod反复失败,并导致崩溃_Kubernetes_Kubelet - Fatal编程技术网

Kubernetes 偶尔会在没有网络的情况下创建pod,这会导致pod反复失败,并导致崩溃

Kubernetes 偶尔会在没有网络的情况下创建pod,这会导致pod反复失败,并导致崩溃,kubernetes,kubelet,Kubernetes,Kubelet,有时,我会看到pod在没有网络连接的情况下启动的问题。正因为如此,吊舱进入了一个紧急回退状态,无法恢复。我能够让pod再次运行的唯一方法是运行kubectl delete pod,然后等待它重新调度。下面是一个liveness probe因此问题而失败的示例: Liveness探测失败:获取http://172.20.78.9:9411/health: net/http:在等待连接时取消了请求(在等待标头时超出了Client.Timeout) 我还注意到,发生这种情况时,pod IP没有ipta

有时,我会看到pod在没有网络连接的情况下启动的问题。正因为如此,吊舱进入了一个紧急回退状态,无法恢复。我能够让pod再次运行的唯一方法是运行
kubectl delete pod
,然后等待它重新调度。下面是一个liveness probe因此问题而失败的示例:

Liveness探测失败:获取http://172.20.78.9:9411/health: net/http:在等待连接时取消了请求(在等待标头时超出了Client.Timeout)

我还注意到,发生这种情况时,pod IP没有iptables条目。当pod被删除和重新调度(并且处于工作状态)时,我有iptables条目

如果我关闭容器中的livenessprobe并将其执行,我确认它与群集、本地网络或internet没有网络连接

我想听听关于它可能是什么的任何建议,或者我还可以研究什么来进一步解决这个问题

当前正在运行:

Kubernetes版本:

Client Version: version.Info{Major:"1", Minor:"4", GitVersion:"v1.4.7",
GitCommit:"92b4f971662de9d8770f8dcd2ee01ec226a6f6c0", 
GitTreeState:"clean", BuildDate:"2016-12-10T04:49:33Z", 
GoVersion:"go1.6.3", Compiler:"gc", Platform:"linux/amd64"}

Server Version: version.Info{Major:"1", Minor:"4", GitVersion:"v1.4.7",  
GitCommit:"92b4f971662de9d8770f8dcd2ee01ec226a6f6c0", 
GitTreeState:"clean", BuildDate:"2016-12-10T04:43:42Z", 
GoVersion:"go1.6.3", Compiler:"gc", Platform:"linux/amd64"}
操作系统:


看起来您的网络驱动程序工作不正常。如果没有关于您的设置的更多信息,我只能建议您:

  • 了解使用了什么网络驱动程序?您可以通过检查kubelet
    --网络插件
    标志来判断。如果未指定网络插件,则它使用本机docker网络
  • 给定网络驱动程序,检查pod网络设置,看看缺少什么。使用tcpdump查看数据包的去向
    我没有足够的观点来评论,所以这个答案是针对Prashanth B()

    让我更详细地描述一下“没有网络连接”。当我进入其中一个正在遭受最初描述的症状的POD时,这就是我所看到的网络问题

    在这个例子中,我们有一个没有任何网络连接的pod

    首先,我从pod ping物理节点(eth0接口)的可路由ip。这从正常工作的同一节点上的吊舱开始工作

    # ping 10.30.8.66
    PING 10.30.8.66 (10.30.8.66): 56 data bytes
    92 bytes from tv-dmx-prototype-3638746950-l8fgu (172.20.68.16): 
    Destination Host Unreachable
    ^C
    
    正在尝试内部或外部DNS解析。我不希望ping可以工作,但这是容器中唯一可用的进行名称解析的工具。由于没有网络,我无法安装任何其他内容

    # ping kubernetes
    ^C
    # ping www.google.com
    ^C
    #
    
    从同一集群中的另一个pod和不工作的pod位于同一物理节点上,我将尝试连接到pod上打开的端口

    / # telnet 172.20.68.16 80
    telnet: can't connect to remote host (172.20.68.16): Host is unreachable
    / #
    
    从物理节点,我无法连接端口80上的pod ip

    core@ip-10-30-8-66 ~ $ curl 172.20.68.16:80
    curl: (7) Failed to connect to 172.20.68.16 port 80: No route to host
    
    我在上浏览了故障排除指南,但该指南旨在诊断将kubernetes服务连接到一个或多个POD的问题。在我的场景中,我们在创建非特定于服务的pod时遇到了一种不可预测的行为。例如,我们每周会在跨越数十个“部署”的3个不同集群中看到1-3次这种情况。出现问题的不是同一个部署,我们唯一的办法是删除pod,然后正确实例化

    我已经阅读了故障排除指南的相关部分,并将它们发布在这里

    这里我们看到kubelet和kube代理正在运行

    root       7186   7167  2 Jan19 ?        15:14:25 /hyperkube proxy          --master=https://us-east-1-services-kubernetes.XXXXX.com 
     --proxy-mode=iptables --kubeconfig=/var/lib/kube-proxy/kubeconfig
    core      25646  26300  0 19:22 pts/0    00:00:00 grep --colour=auto -i hyperkube
    
    
    kubelet --address=0.0.0.0 --pod-manifest-path=/etc/kubernetes/manifests --enable-server --logtostderr=true --port=10250 --allow-privileged=True --max-pods=110 --v=2 --api_servers=https://us-east-1-services-kubernetes.XXXXXX.com --enable-debugging-handlers=true --cloud-provider=aws --cluster_dns=172.16.0.10 --cluster-domain=cluster.local --kubeconfig=/var/lib/kubelet/kubeconfig --node-labels=beta.kubernetes.io/instance-type=c4.8xlarge,failure-domain.beta.kubernetes.io/region=us-east-1,failure-domain.beta.kubernetes.io/zone=us-east-1d,kubernetes.io/hostname=ip-10-30-8-66.ec2.internal,public-hostname=ec2-52-207-185-19.compute-1.amazonaws.com,instance-id=i-03074c6772d89ede8
    
    我已经验证了kube代理通过点击同一节点上的其他POD进行代理

    core@ip-10-30-8-66 ~ $ curl 172.20.68.12 80
    <html>
    <head><title>301 Moved Permanently</title></head>
    <body bgcolor="white">
    <center><h1>301 Moved Permanently</h1></center>
    <hr><center>nginx/1.11.4</center>
    </body>
    </html>
    curl: (7) Couldn't connect to server
    
    core@ip-10-30-8-66 ~$172.20.68.1280
    301永久搬迁
    301永久搬迁
    
    nginx/1.11.4 curl:(7)无法连接到服务器
    一个新版本的应用程序刚刚部署,我丢失了我正在进行故障排除的pod。我将开始准备一些附加命令,以便在该症状再次出现时运行。我还将运行大量部署创建,因为我们得到的坏吊舱数量与正在创建的新吊舱数量有关

    回应弗里汉()

    我们正在使用默认的网络插件,正如您所指出的,它是本地docker插件

    关于使用tcpdump捕获数据包路径的建议。你知道一个简单的方法来确定哪一个veth与给定的pod相关吗

    我计划运行一个安装了tcpdump的容器,并观察与问题pod相关的veth上的流量,同时从pod启动出站网络流量(例如:ping、dig、curl或给定pod中可用的任何内容)


    如果您还有其他想法,请告诉我,我会尝试一下。

    我认为我们遇到了这个错误。我已经验证了我可以复制docker/coreos版本中列出的bug。将coreos/docker和验证。

    对于未准备就绪的端点,您不会获得iptables条目(例如:crashloopbackoff中的死容器)。您应该从诊断网络问题开始,“没有网络连接”是什么意思?你能联系到google.com吗?你能到达同一集群中的另一个pod或服务吗?请开始调试:并报告哪个步骤失败。
    core@ip-10-30-8-66 ~ $ curl 172.20.68.12 80
    <html>
    <head><title>301 Moved Permanently</title></head>
    <body bgcolor="white">
    <center><h1>301 Moved Permanently</h1></center>
    <hr><center>nginx/1.11.4</center>
    </body>
    </html>
    curl: (7) Couldn't connect to server