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. php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题

    我们知道数据库处理sql是一条条处理的,假设购买商品的流程是这样的: sql1:查询商品库存 1 if(库存数量 > 0) 2 { 3 //生成订单 4 //库存-1 5 > 当没有并发时 ...

  2. JAVA String介绍、常量池及String、StringBuilder和StringBuffer得区别. 以及8种基本类型的包装类和常量池得简单介绍

    一.概述 String是代表字符串的类,本身是一个最终类,使用final修饰,不能被继承. 二.定义方式   方式一:直接赋值法 String str1 = "hello"; 方式 ...

  3. JSP页面 CTRL+F 功能实现

    .res { color: rgba(255, 0, 0, 1) } .result { background: rgba(255, 255, 0, 1) } --- js 部分 var oldKey ...

  4. 他人学习Python感悟

    作者:王一 链接:https://www.zhihu.com/question/26235428/answer/36568428 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  5. MindSpore多元自动微分

    技术背景 当前主流的深度学习框架,除了能够便捷高效的搭建机器学习的模型之外,其自动并行和自动微分等功能还为其他领域的科学计算带来了模式的变革.本文我们将探索如何用MindSpore去实现一个多维的自动 ...

  6. Solution -「CF 510E」Fox And Dinner

    \(\mathcal{Description}\)   Link.   给定正整数集合 \(\{a_n\}\),求一种把这些数放置在任意多个圆环上的方案,使得每个环的大小大于 \(2\) 且环上相邻两 ...

  7. 【Java分享客栈】我为什么极力推荐XXL-JOB作为中小厂的分布式任务调度平台

    前言   大家好,我是福隆苑居士,今天给大家聊聊XXL-JOB的使用.   XXL-JOB是本人呆过的三家公司都使用到的分布式任务调度平台,前两家都是服务于传统行业(某大型移动基地和某大型电网),现在 ...

  8. 学习Spring5必知必会(3)~Spring的核心 IoC 和 DI

    一.Spring的核心 IoC(基于XML) 1.IoC容器 (1)BeanFactory容器创建对象: //使用BeanFactory @Test void testBeanFactory() th ...

  9. Zookeeper基础入门

    Zookeeper简介 基本概念 Zookeeper是一个开源的分布式协调服务.其设计目标是将那些复杂的容易出错的分布式一致性服务封装起来,以简单的接口提供给用户使用.它是一个典型的分布式数据一致性的 ...

  10. [杂记]CodeBlocks下载、安装及设置

    zyy安装codeblocks十次有九次都会卡在奇怪的地方,所以写篇博文以提醒自己少犯蠢[叹气] 下载 http://www.codeblocks.org/downloads/26 这是官网,以win ...