云平台将故障Pod流量下线通用思路与OpenShift操作实战

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: bi 为 deloymentConfig: 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操作实战的更多相关文章
- <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 ...
- 东师理想云平台异步任务处理系统V2.0重构思路
现存问题分析: 1.功能太多,而且杂糅到一个程序中,架构不清晰,出问题不好调试.2.系统重启后,不登录到桌面,程序不运行,用户体验差.经常的下载403等错误3.处理程序卡死,处理速度慢等问题,不支持多 ...
- Cloud Native Weekly |面对云平台宕机,企业如何止损
KubeEdge v0.2发布 KubeEdge在18年11月24日的上海KubeCon上宣布开源的一个开源项目,旨在依托K8S的容器编排和调度能力,实现云边协同.计算下沉.海量设备的平滑接入. Ku ...
- 基于TFS的.net技术路线的云平台DevOps实践
DevOps是近几年非常流行的系统研发管理模式,很多公司都或多或少在践行DevOps.那么,今天就说说特来电云平台在DevOps方面的实践吧. 说DevOps,不得不说DevOps的具体含义.那么,D ...
- 云平台DevOps实践
基于TFS的.net技术路线的云平台DevOps实践 DevOps是近几年非常流行的系统研发管理模式,很多公司都或多或少在践行DevOps.那么,今天就说说特来电云平台在DevOps方面的实践吧. ...
- JFrog推出全球首个支持混合云架构,端到端的通用DevOps平台 ——JFrog Platform
JFrog Platform,基于屡获殊荣的JFrog Artifactory制品仓库的独特能力,通过多合一的体验提供DevSecOps.CI / CD和软件分发的解决方案. 2020 ...
- openStack 云平台管理节点管理网口流量非常大 出现丢包严重 终端总是时常中断问题调试及当前测试较有效方案
tuning for Data Transfer hosts connected at speeds of 1Gbps or higher <一.本次OpenStack系统调试简单过程简单记录& ...
- Kubernetes容器云平台建设实践
[51CTO.com原创稿件]Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署.大规模可伸缩.应用容器化管理.伴随着云原生技术的迅速崛起,如今Kubernetes 事实上已经 ...
- .Net 分布式云平台基础服务建设说明概要
1) 背景 建设云平台的基础框架,用于支持各类云服务的业务的构建及发展. 2) 基础服务 根据目前对业务的理解和发展方向,总结抽象出以下几个基础服务,如图所示 3) 概要说明 基础服务的发展会根 ...
随机推荐
- 解决Wordpress提示FTP登录问题
向wordpress目录的wordpress-config.php中添加 define("FS_METHOD", "direct"); define(" ...
- swift语言学习博文精选
初探swift语言的学习笔记九(OC与Swift混编) Objective-C 与 Swift 混编之路 Swift项目兼容Objective-c问题汇总
- Java多线程经典案例分享
汇总 案例一 案例二 案例三 案例四 案例五 案例六 案例七 案例一 实现一个容器,提供两个方法,add(),count() 写两个线程,线程1添加10个元素到容器中,线程2实现监控元素的个数,当个数 ...
- visual studio自动向量化
//////////////////////////////////////////////////*SSE 和 AVX 每个都有16个寄存器SSE 有 XMM0 ~ XMM15,是128bitAVX ...
- Solution -「ARC 104C」Fair Elevator
\(\mathcal{Description}\) Link. 数轴从 \(1\sim 2n\) 的整点上有 \(n\) 个闭区间.你只知道每个区间的部分信息(可能不知道左或右端点,或者都不知 ...
- [LeetCode]21.合并两个有序链表(Java)
原题地址: merge-two-sorted-lists 题目描述: 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例 1: 输入:l1 = [1 ...
- Vue2.0源码学习(1) - 数据和模板的渲染(上)
准备 一.首先去GitHub上把vue源码download下来,传送门:https://github.com/vuejs/vue 二.搭建一个vue-cli跑起来,用于代码调试,不看着代码动起来只看源 ...
- MYSQL文件复制及备份
周末研究了下mysql的数据结构,记录下: 场景1:当从一台电脑的mysql的data中复制数据库的文件夹到另一台电脑上时会发现 表不存在,函数等也不存在 方法:1.需要将data根目录下的ibdat ...
- SaccadeNet:使用角点特征进行two-stage预测框精调 | CVPR 2020
SaccadeNet基于中心点特征进行初步的目标定位,然后利用初步预测框的角点特征以及中心点特征进行预测框的精调,整体思想类似于two-stage目标检测算法,将第二阶段的预测框精调用的区域特征转化为 ...
- 零售BI解决方案_新零售时代转型升级思路全都在这里
新零售是什么意思?新零售即企业以互联网为依托,通过运用大数据.人工智能等先进技术手段,对商品的生产.流通与销售过程进行升级改造,进而重塑业态结构与生态圈,并对线上服务.线下体验以及现代物流进行深度融合 ...