zoukankan      html  css  js  c++  java
  • k8s下的eureak服务注册失败(cannot execute request on any known server)解决

     问题场景

      项目使用了Spring Cloud 微服务框架并利用kubernetes(简称k8s)进行容器编排的。有一天查看Eureka Server监控页面,发现有个serviceid对应的服务副本数只有2个,正常应该是3个的,可是只注册了2个。

      在Master上使用kubectl logs命令对这个模块的pod进行日志查看,发现有2个pod运行正常,但是另外一个pod的日志一直在报:cannot execute request on any known server。之前还是好好的,怎么突然就不行了,其他2个pod运行正常,也能注册上,说明该模块的镜像和eureka server是没有问题的。而服务的注册是要发送网络请求进行通信的,因此很有可能是该pod的网络出现了问题(业务模块运行在docker容器内),导致有一个注册不上。为此,有以下2个办法可以解决注册不上的问题:

    1、使用 kubectl 重新创建该服务对应的Deployment

    #删除 deployment
    kubectl delete -f xxx-dep.yaml
    # 创建deployment kubectl create
    -f xxx-dep.yaml

    2、找到运行异常pod的服务器并使用docker命令停止容器

    #查找特定容器信息
    docker ps|grep xxxx
    # 停止该容器 docker stop 容器ID
    #再次查看特定容器信息
    docker ps|grep xxxx

      虽然已经调用过停止命令,但是再次使用docker ps命令查看该容器时,你会发现相同名字的容器依然在。这是因为k8s会自动重新

    创建pod中的这个业务容器(pod是k8s调度的最小单元,一个pod通常由一个或多个业务容器+pause容器组成),这个就是k8s作为容器编排工具的强大之处。

      此时刷新Eureka Server的监控页面,发现又成功注册上来了一个服务,达到了3个,注册失败问题解决。

    从对用户的影响大小角度来看,推荐使用第二种方式,服务器开销最小,又不会影响原先2个服务。如果重新创建deployment的话,将导致有一段时间该模块无法提供服务。

  • 相关阅读:
    《Think Python》第7章学习笔记
    Arrays和String单元测试
    结对编程项目-四则运算 第二周
    2018-2019-2 20175227张雪莹《Java程序设计》 实验二《Java面向对象程序设计》
    类定义
    20175227张雪莹 2018-2019-2 《Java程序设计》第六周学习总结
    结对编程项目-四则运算 第一周 阶段性总结
    迭代和JDB
    20175227张雪莹 2018-2019-2 《Java程序设计》第五周学习总结
    结对学习小组
  • 原文地址:https://www.cnblogs.com/stm32stm32/p/12093857.html
Copyright © 2011-2022 走看看