首页 > 其他分享 >从Workload中优雅隔离Pod

从Workload中优雅隔离Pod

时间:2024-09-05 19:50:23浏览次数:11  
标签:iptables sbin Workload tcp 优雅 ACCEPT && Pod

线上集群中,业务跑着跑着,突然发现有个Pod上出现大量错误日志,其他的Pod是正常的,该如何处理呢?

  • 直接删除Pod?

这样不便于保留现场,可能会影响判断问题的根因

  • 让业务方忍一会,先排查下问题?

会被喷死

最好的方案是既让Pod停止接收流量,又保留Pod

思路:

  1. 停止接收流量

停止接收流量这个动作是通过Pod的label来实现的,通过修改label来实现。其实本质就是把Pod从endpoint中移除,这样无论是服务化,还是http都会把当前这个节点移除,不再转发流量。
当然,这里的前提是服务化和http的节点发现是基于k8s的endpoint来实现的(理论上大家都会这么干,不排除有黑科技)。

首先要主动调用服务下线的方法,理论上这个调用应该会配再Pod的prestop钩子中,这样Pod被删除的时候,会先调用这个方法,然后再删除Pod。

preStop:
    exec:
      command:
      - /bin/sh
      - -c
      - /bin/stop.sh
  1. 将Pod从Workload中移除

调用下线完毕之后,再修改Pod的标签,这个标签的修改可以让Pod脱离Workload的控制,变成孤儿Pod,注意修改Pod标签也要让service的selector选择不到这个Pod,这样Pod也就从endpoint中移除,服务发现也就感知不到这个节点了。

  1. 如果Pod是消费型业务,比如说 nsq worker,不具备主动发起下线怎么办?

这种情况,可以直接将Pod网络切断,这样Pod就无法接收流量了,切断方式也很简单,直接在Pod上加一个iptables规则,将流量全部丢弃即可。

/sbin/iptables -A INPUT -s {node_ip}/32 -j ACCEPT &&   // 允许节点访问,避免kubelet liveness检查失败
/sbin/iptables -A OUTPUT -d {node_ip}/32 -j ACCEPT &&
/sbin/iptables -A OUTPUT -s localhost -d localhost -j ACCEPT &&
/sbin/iptables -A INPUT -s localhost -d localhost -j ACCEPT &&
/sbin/iptables -A INPUT -p tcp --tcp-flags RST RST -j ACCEPT &&
/sbin/iptables -A OUTPUT -p tcp --tcp-flags RST RST -j ACCEPT &&
/sbin/iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset &&
/sbin/iptables -A OUTPUT -p tcp -j REJECT --reject-with tcp-reset"""

标签:iptables,sbin,Workload,tcp,优雅,ACCEPT,&&,Pod
From: https://www.cnblogs.com/leason001/p/18399149

相关文章

  • 解决podman: ERRO[0000] running newuidmap: write to uid_map failed: Invalid argum
    报错ERRO[0000]running/usr/bin/newuidmap27115520100011100000655366553710000065537:newuidmap:writetouid_mapfailed:InvalidargumentError:cannotsetupnamespaceusing"/usr/bin/newuidmap":shouldhavesetuidorhavefilecapssetu......
  • ServiceStage集成Sermant实现应用的优雅上下线
    作者:聂子雄华为云高级软件工程师摘要优雅上下线旨在确保服务在进行上下线操作时,能够平滑过渡,避免对业务造成影响,保证资源的高效利用。Sermant基于字节码增强的技术实现了应用优雅上下线能力,应用发布与运维平台ServiceStage通过集成Sermant使得应用在进行持续发布时实现无侵入式地......
  • 如何优雅的使用Optional类?
    在项目中我们是用Optional来判空的。//遍历打印userListfor(UserInfouserInfo:Optional.ofNullable(userList).orElse(newArrayList<>())){//printuserInfo}我们通常的做法,是先判断不为空,再遍历:if(!CollectionUtils.isEmpty(userInfoList)){for(UserInfo......
  • 开源优雅的API交互工具 HTTPie CLI
    #HTTPie CLI:现代、用户友好的命令行HTTP客户端 - 精选真开源,释放新价值。概览HTTPie CLI 是一款专为API时代设计的命令行HTTP客户端,以其简洁明了的语法和丰富的功能集,为开发者和系统管理员提供了一种高效与HTTP服务交互的方式。它支持JSON格式的自动解析和生成,使得与RESTfu......
  • 动态调整pod资源
    #运行时动态调整pod资源##1.控制平面组件特性门控编辑如下路径/etc/kubernetes/manifests/的kube-apiserver.yaml,kube-controller-manager.yaml,kube-scheduler.yaml配置文件,在各自容器启动命令行参数添加配置项:---featuregates=InPlacePodVerticalScaling......
  • Java服务端服务降级:优雅降级的实现
    Java服务端服务降级:优雅降级的实现大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在分布式系统中,服务降级是一种常见的容错机制,用于在系统负载过高或服务不可用时,有意识地降低服务的级别,以保证核心服务的可用性。优雅降级是服务降级的一种策略,它通过......
  • 优雅谈大模型:白话ZeRO 下
    机器学习模型的复杂性和规模不断增长,分布式训练变得比以往任何时候都更加重要。训练具有数千亿参数的大型语言模型(LLMs)将是机器学习基础设施面临的挑战。与传统的分布式计算框架不同的地方在于GPU的分布式训练需要将数据传递给GPU芯片等物理硬件层。GPU设备之间会进行频繁、......
  • 一种优雅的方式整合限流、幂等、防盗刷
    大家在工作中肯定遇到过接口被人狂刷的经历,就算没有经历过,在接口开发的过程中,我们也需要对那些容易被刷的接口或者和会消耗公司金钱相关的接口增加防盗刷功能。例如,发送短信接口以及发送邮件等接口,我看了国内很多产品的短信登录接口,基本上都是做了防盗刷,如果不做的话,一夜之间,也许......
  • k8s中pod获取宿主机IP地址
    在Pod内部的Java环境中,你可以通过KubernetesAPI或KubernetesDownwardAPI来获取节点的IP地址。以下是几种方法来实现这一点:个人使用的第一种方法1:使用KubernetesDownwardAPI如果你已经在Pod配置中使用了DownwardAPI,将节点的IP地址注入到环境变量中,你可......
  • 最适合程序员的编程字体,好看、优雅!
    对于程序员来说,每天面对最多的就是代码了,选择一款赏心悦目的编程字体就显得尤为重要。那什么是好看的字体呢?基本要求就是相似符号要有明显区别,比如:0、O、o;l、I、1;全角和半角的()等,并且得看着舒服。还有些人认为输入和显示不要有太大的差异,比如:!=展示为≠;===展示为≡等,这个就......