1 写在前边

自从公司项目前年上了 OpenShift 3.9 私有云平台,更新部署程序的确变得更加容易了。但是带来了很多复杂性,运维实施人员的学习曲线也陡然上升。

上云之前:在项目没上容器云的早期,应用服务集群往往是由一个Nginx作为负载均衡器,当有集群中有一个节点出现故障时,只需要将 Nginx 上负载均衡块 upstream 块中的故障节点地址移除,刷新 Nginx 即可达到快速响应,也能慢慢收集性能指标进行分析。

上云之后:在云上部署应用,应用容器生命周期由 Deployment 管理,多实例集群由 Service 负载流量 (本文暂时不谈服务网格)。当应用集群中某个Pod出现故障,通过 Deployment 或 Service 并不能直接把某个 Pod 从流量负载中移出,使用存活探针的话基本没办法收集性能指标。(以下是k8s部署简图)

就绪探针:能从流量中移出无响应 Pod,但是会受到应用检测健康的接口准确程度限制,比如,开发了一个请求立即返回接口供就绪探针检测使用,那么应用服务哪怕有一点点处理能力,就绪检测就是通过的,此时表现在客户面前,应用可能会非常卡顿。

存活探针:流量中移除无响应Pod,并重建或重启 Pod。

注:合理地配置就绪探针与存活探针有助于自动解决服务的绝大部分问题。但是,就绪探针的接口是否有用完全取决于程序员(如果只是立即返回,可以说用处不算大,最佳实践是探测服务的内部状态给出合适的响应),存活探针仅适用于某些重启就能解决的特殊情况(当由于应用程序的bug导致的无响应,而有 bug 的功能一直被调用,则 Pod 将一直重启,存活探针的作用就不大了,不如保留现场收集性能指标供程序员解决问题)。

本文目标:给出云平台将故障Pod流量下线通用思路,以及 OpenShift 平台将故障 Pod 流量下线,确保有收集性能指标的机会。相信本文对其他基于 k8s 的云平台也有一定参考价值。

2 梳理思路

一般来讲,Pod 的多副本的流量直接来源是 Service。当应用不可用时,我们需要保留故障 Pod,最简单的办法是只配置就绪探针,但是就绪检测接口无法确保服务的确是就绪状态,那就需要人工介入了。

流量从哪里来?

对于 Pod 而言,流量来自于 Service。初学 K8s 时,都会看到类似下边的图,大意是 Service 是通过 Selector 配置的 Label 来匹配 Pod 的。

那么,Service 直接连接到了 Pod 上么?

这样说并不准确,Service 与 Pod 中间还有一种资源 —— Endpoints,Service 通过 Selector 将匹配到的 IP 地址和端口列表存入 Endpoints。也就是说,当流量到达网络代理(KubeProxy)时,网络代理会从众多 Endpoints 中找出目标 Endpoints 并取出其中一个地址进行转发。

所以,流量能进入 Pod 是因为 Service 的 Selector 匹配到了相同 Label 的 Pod。

如果我修改了故障 Pod 的 Label,不就是可以流量下线了吗?理论可行,开始实践。

3 基于 OpenShift 实践下线故障 Pod

我们的主要目标是将故障 Pod 从流量中移除,所以可以先看看 Service 以哪个 Label 匹配 Pod。

这里以我测试环境的程序举例,通过 Deployment 处的 Actions - Edit Yaml 打开如下界面:

可以看到 selector 选择的 Label 为 deloymentConfig: bi,这样我们就能确认 Pod 必须也有这个标签,那么我们去修改故障节点。

退出编辑 yaml 界面,可以看到该 Service 对应的 Pod 列表,这里以 bi-4-7dt6r 作为故障节点演示,点击 bi-4-7dt6r

进入 bi-4-7dt6r Pod 界面,依次点击 Actions - Edit yaml,我们找到与 Service 中同样的标签(注意大小写)

修改 deloymentConfig: bideloymentConfig: bi-debug,只要标签不同即可,然后 Save

回到 Service 界面,如下图,原来的 bi-4-7dt6r 已经不在负载列表中了

我们再去 Pods 界面查看 bi-4-7dt6r 是否依然存在,如图,原来的 Pod 依然存在。

主要目标——断开流量已经达成,至于为什么会创建了一个新的 Pod 呢?

打开这个应用的 Deployment yaml,我们可以看到:好家伙,原来 Deployment 匹配 Pod 的标签也是 deloymentConfig: bi

这也很好解释自动创建新节点的原因了:由于 DeploymentConfig 查询不到它期待的3个Pod副本数,就创建了一个新的!

以上,今天要分享的内容都在这里了。如果本文对你有所启发,请为我送上一个赞吧!如有错漏处,还望评论告知一二!

我是 Hellxz,我们下次再见!

参考书目《Kubernetes in Action》

云平台将故障Pod流量下线通用思路与OpenShift操作实战的更多相关文章

  1. <CEPH中国-深圳站-技术交流会演讲PPT> YY云平台Ceph Block应用实践 & 我写的书 《CEPH实战》

    YY云平台Ceph Block应用实践 http://s3.yyclouds.com/public/YY%E4%BA%91%E5%B9%B3%E5%8F%B0Ceph%E5%AE%9E%E8%B7%B ...

  2. 东师理想云平台异步任务处理系统V2.0重构思路

    现存问题分析: 1.功能太多,而且杂糅到一个程序中,架构不清晰,出问题不好调试.2.系统重启后,不登录到桌面,程序不运行,用户体验差.经常的下载403等错误3.处理程序卡死,处理速度慢等问题,不支持多 ...

  3. Cloud Native Weekly |面对云平台宕机,企业如何止损

    KubeEdge v0.2发布 KubeEdge在18年11月24日的上海KubeCon上宣布开源的一个开源项目,旨在依托K8S的容器编排和调度能力,实现云边协同.计算下沉.海量设备的平滑接入. Ku ...

  4. 基于TFS的.net技术路线的云平台DevOps实践

    DevOps是近几年非常流行的系统研发管理模式,很多公司都或多或少在践行DevOps.那么,今天就说说特来电云平台在DevOps方面的实践吧. 说DevOps,不得不说DevOps的具体含义.那么,D ...

  5. 云平台DevOps实践

    基于TFS的.net技术路线的云平台DevOps实践   DevOps是近几年非常流行的系统研发管理模式,很多公司都或多或少在践行DevOps.那么,今天就说说特来电云平台在DevOps方面的实践吧. ...

  6. JFrog推出全球首个支持混合云架构,端到端的通用DevOps平台 ——JFrog Platform

            JFrog Platform,基于屡获殊荣的JFrog Artifactory制品仓库的独特能力,通过多合一的体验提供DevSecOps.CI / CD和软件分发的解决方案. 2020 ...

  7. openStack 云平台管理节点管理网口流量非常大 出现丢包严重 终端总是时常中断问题调试及当前测试较有效方案

    tuning for Data Transfer hosts connected at speeds of 1Gbps or higher <一.本次OpenStack系统调试简单过程简单记录& ...

  8. Kubernetes容器云平台建设实践

    [51CTO.com原创稿件]Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署.大规模可伸缩.应用容器化管理.伴随着云原生技术的迅速崛起,如今Kubernetes 事实上已经 ...

  9. .Net 分布式云平台基础服务建设说明概要

    1)  背景 建设云平台的基础框架,用于支持各类云服务的业务的构建及发展. 2)  基础服务 根据目前对业务的理解和发展方向,总结抽象出以下几个基础服务,如图所示 3)  概要说明 基础服务的发展会根 ...

随机推荐

  1. 入门-k8s查看Pods/Nodes (四)

    目标 了解Kubernetes Pods(容器组) 了解Kubernetes Nodes(节点) 排查故障 Kubernetes Pods 在 部署第一个应用程序 中创建 Deployment 后,k ...

  2. 计算当前日期n天后的日期

    //计算180天后的日期//180*24*60*60*1000//更具时间戳计算n天前的日期 $(function () { var timestamp =Date.parse(new Date()) ...

  3. iOS应用性能调优的建议和技巧--中高级--王朋

    中级(这些是你可能在一些相对复杂情况下可能用到的) 9. 重用和延迟加载Views 10. Cache, Cache, 还是Cache! 11. 权衡渲染方法 12. 处理内存警告 13. 重用大开销 ...

  4. linux_6

    1.编写脚本实现登陆远程主机.(使用expect和shell脚本两种形式). #使用expect远程登录 [root@centos8 ~]#dnf -y install expect [root@ce ...

  5. sublime中运行python时编码格式问题

      方案一在程序文件中以下三句 import sys reload(sys) sys.setdefaultencoding('utf8') 方案二在方案一不行的情况下,去除python的问题,subl ...

  6. Linux常用命令在Ubuntu 16下(个人笔记)

    可以通过 tab键来补全提示命令或者目录,终端命令的格式: 命令 [-选项,多个选项可以结合写] [参数] , 大多数情况可以通过 ctrl c 退出命令 磁盘管理 pwd 查看当前所在目录 即:pr ...

  7. IDA FLIRT使用

    IDA FLIRT/FLAIR   FLIRT是IDA提供的一种函数识别技术,即库文件快速识别与鉴定技术(Fast Library Identification and Recognition Tec ...

  8. 答疑记录:jmeter从返回的html中提取指定内容

    返回的html(截取部分),要求从中提取:2022-02-22 13:46:15 <!-- 前面省略557行 --> <td>2022-02-22</td> < ...

  9. 华为eNSP无限井号#解决方法

    如下图所示,允许ensp相关应用通过防火墙

  10. 报表软件测评来啦!Smartbi电子表格使用感受

    最近因为工作需求,需要用到一些报表工具软件,看到Smartbi比较方便,可以直接在excel中进行配置,所以安装体验了一下. 下载 Smartbi有多个版本,我主要是在excel中使用,所以下载了一个 ...