从k8s的事件聊聊for循环

序言

    见过的人越多,就越喜欢狗。

    感觉没有秋天,突然一下就凉凉的,偶尔还下个雨。

k8s事件和for循环

    人人都爱for循环,无论是开发还是运维,经常随便来个for循环来执行一些脚本,例如进行一个测试。

for i in `seq 1000`;do curl -I http://example.com;done

    for循环是最简单的一种调用方式,但是也有巨坑,在一些特别的场景之中。

    1 k8s事件

    在k8s的集群中,总是会有各种自己写的代码,来监听k8s的事件,然后来做一些对应的操作,例如将pod注册到注册中心,例如将pod的状态同步到注册中心,例如使用pod来进行监控。

    当收到了pod创建事件之后,然后将pod注册到注册中心;当收到了pod删除事件之后,将pod从注册中心下线;当pod进行rolling update的时候,将pod从注册中心又要下线,又要上线。

    这个时候就要for循环出现了,一个for循环进行处理对应的操作,在正常情况下,这种处理机制好像没啥问题,直到。。。

    在运维k8s集群的时候,最常出现的两种操作:第一种,k8s的node机器宕机,从而造成大量的pod进行重新调度,可能是10个pod,也可能是200个pod,这在于node上的pod数量;第二种,当进行集群升级的时候,那么风险最小的做法就是将新建节点池,然后将老的pod进行驱逐,此时也是有大量的pod立刻处于terminating状态,然后会新建pod,最终老的pod被delete掉。

    那么如果这种情况一旦发生,对于for循环来说,卧槽,处理不过来了,而且极度依赖for循环里面每个事件的处理,如果一个事件处理出现延迟,那么整体的服务都会有问题。

    2 如何发现这种问题

    for循环的阻塞问题,怎么发现有问题的呢?其实也是比较难,尤其是对于代码新手。

    没事的时候,在测试环境进行一下演练,找个机器,上面跑几百个pod,然后进行一下宕机,就会收到业务那边的反馈,怎么出现了各种各样的报错,然后去查各种事件的日志,有的处理了,有的没处理,而没处理的都是反馈了问题的。

    操作日志,你值得拥有,你会发现事件最长的延迟时间是8个小时。虽然开始说fuck了,但是也毫无办法。。。

    在生产环境中,node机器宕机,也是稀松平常的事儿,一般都不会怎么太大关注,除非有业务在那叫,才开始进行排查。。。

    在进行排查这种事件问题的时候,一定要关注每个细节的时间点,例如代码在什么时间捕获到了时间,什么时候注册到了注册中心,什么时间点从注册中心下线了,什么时间点在注册中心变成了健康状态,从发生到结束,到底耗时多久。。。

    如果出现了上面的问题,那么你就会有两种疑问:一种怀疑是是不是丢失了事件,我们的事件捕获的不全?还有一种是大量的事件积压,处理不过来了,从而有延迟,但是最终能处理好。

    如果是屎上雕花,那么就先看看代码吧,特别是在事件处理的时候,如果用的是for循环,用for循环其实也没问题,更大的问题是每个事件是不是单独的一个协程来进行处理的,从而当同时到达几百个事件的时候,事件的处理不是串行的,而是并行的,而不是相互之间阻塞的。

    狗屎一样的代码也就算了,写代码的人还不查问题,简直是个垃圾。。。信誓旦旦说没问题,简直就是狗屎。

    3 事件监听需要注意的点

    Q1:监听事件的时候,有的时候需要选择,例如有的时候,你是监听pod的事件,但是如果是监控,那么在rolling update的时候,可能会造成监控数据的丢失,这个时候,如果你的服务都有svc,那么你可以试试监听endpoint的事件,完美解决监控数据丢失的问题。

    Q2:监听事件的时候,如果你要非常快速的能摘除节点,其实endpoint也比pod好,因为在宕机的场景中,pod的状态在默认情况下,5分钟还是running,这种一般都开始fuck了,但是如果你改成endpoint,就能做到妙级进行摘除了。

    Q3:监听事件的时候,关注极端场景下的测试,例如机器宕机的时候,其实pod的状态一直会保持5分钟状态为running,然后才会变成terminating,再进行重新调度,而node的感知到not ready状态是差不多45秒,3个健康检查周期一过,node是最先感知到的。

    Q4:监听事件的时候,如果要演练,驱逐的风险比宕机的风险要小很多,因为驱逐是直接整个机器上的pod状态立刻从running变成terminating,然后立刻进行重新调度,从而也能看到大量事件,对于大部分的应用来说,基本无损。

    Q5:监听事件的时候,如果每个事件的处理速度比较慢,不能达到秒级或者毫秒级,那么可能还是会依赖老的pod进行处理流量,那么可以尽量将老的pod的terminationGracePeriodSeconds设置的长一点,例如一分钟,例如五分钟,尽可能的让事件处理完成,让流量无损过度。

风言风语

   屎上雕花其实蛮烦的,代码的组织结构混乱,代码日志、日志格式混乱,这就是让人无法接手的代码,致命的玫瑰。

    很难预见能碰到什么问题,但是一般遇到问题解决问题也就差不多了,也不用过分焦虑,风险无时不在,只是时机未到而已。

    运维有的时候也是看运气,运气好呢,不会出故障,运气不好呢,卧槽,再牛逼也是一个故障接着一个故障,不过,该来的总是会来的,只是早与晚而已。

    碰到恶心的人的话,只能祝福他碰到的人以后都和他自己一样。。。以子之矛攻子之盾

    Good Luck for you

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/901794.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android——事件冲突处理

当我们给列表的item设置了点击事件后&#xff0c;又给item中的按钮设置了点击事件&#xff0c;此时item的点击事件会失效。 解决 给item的布局xml中设置以下属性 android:descendantFocusability"blocksDescendants"<LinearLayout xmlns:android"http://sc…

005:航空力学基础、无人机操纵、飞机性能

摘要&#xff1a;本文详细介绍无人机稳定性、操控性、飞机性能等概念。 一、飞机的稳定性 概念&#xff1a; 飞机的稳定性&#xff08;安定性&#xff09;&#xff0c;是指在飞机受到扰动后&#xff0c;不经飞行员操纵&#xff0c;能恢复到受扰动前的原始状态&#xff08;即原…

Android系统架构

Android系统架构&#xff1a; Android系统架构是一个复杂的、分层的结构&#xff0c;旨在提供高度的灵活性和可扩展性。这个架构可以大致分为以下几个主要层次&#xff1a; Linux Kernel&#xff08;Linux内核&#xff09;&#xff1a; Linux内核是Android系统的底层&#xff0…

OAK相机的RGB-D彩色相机去畸变做对齐

▌低畸变标准镜头的OAK相机RGB-D对齐的方法 OAK相机内置的RGB-D管道会自动将深度图和RGB图对齐。其思想是将深度图像中的每个像素与彩色图像中对应的相应像素对齐。产生的RGB-D图像可以用于OAK内置的图像识别模型将识别到的2D物体自动映射到三维空间中去&#xff0c;或者产生的…

OpenSSL

OpenSSL 概述 OpenSSL 是一个开源的、安全传输协议实现工具&#xff0c;广泛应用于数据加密与解密、证书生成与管理以及其他安全性相关的任务。在现代网络安全中&#xff0c;OpenSSL 被用于构建和维护 SSL/TLS 通信&#xff0c;确保数据在传输过程中的机密性和完整性。 简单来…

西圣和绿联电容笔哪款好用?西圣、绿联和uhb电容笔真实避坑测评!

现在市面上的平替电容笔种类非常多&#xff0c;在购买的时候大多数人都没有非常确定的目标&#xff0c;这主要是因为大多数人对电容笔的认识程度不够。 作为一个有着多年数码产品测评经验的测评员&#xff0c;我刚好对电容笔也有比较深刻的理解&#xff0c;也借着大家问我关于…

ASP.NET MVC-font awesome-localhost可用IIS不可用

环境&#xff1a; win10, .NET 6.0&#xff0c;IIS 问题描述 本地IIS正常显示&#xff0c;但放到远程服务器上&#xff0c;每个icon都显示?。同时浏览器的控制台报错&#xff1a; fontawesome-webfont.woff2:1 Failed to load resource: the server responded with a statu…

【网络协议栈】Tcp协议(上)结构的解析 和 Tcp中的滑动窗口(32位确认序号、32位序号、4位首部长度、6位标记位、16为窗口大小、16位紧急指针)

绪论​ “没有那么多天赋异禀&#xff0c;优秀的人总是努力翻山越岭。”本章主要讲到了再五层网络协议从上到下的第二层传输层中使用非常广泛的Tcp协议他的协议字段结构&#xff0c;通过这些字段去认识其Tcp协议运行的原理底层逻辑和基础。后面将会再写一篇Tcp到底是通过什么调…

java实现的音视频格式转化器

一、前言 最近写了一款图形界面版的音视频格式转化器&#xff0c;可以实现将多种视频之间进行转化&#xff0c;非常好用&#xff0c;如将AVI转换为&#xff0c;TS&#xff0c;FLV&#xff0c;MP4等。音频可将MP3转成WAV。 二、实现 1.需引入相关maven依赖。 <!-- 核心包 -…

群控系统服务端开发模式-应用开发-业务架构逻辑开发准备工作

安装与仓库已经调整完毕&#xff0c;现在开发业务架构逻辑&#xff0c;其次再开发功能逻辑。业务架构逻辑开发与功能逻辑开发不是一回事&#xff0c;一定要明白。业务架构指的是做某一件事或是某一种类型的事的逻辑&#xff0c;在互联网web应用中通常指一套系统的外在逻辑&…

知识见闻 - 磁力片原理

磁力片是一种利用磁性原理设计的玩具&#xff0c;它的工作原理和磁性方向的排列方式非常有趣。让我们深入了解一下磁力片的核心原理和磁性方向的特点。 磁力片的基本原理 磁力片的工作原理基于磁铁的基本特性。每个磁力片都包含多个小磁铁&#xff0c;这些磁铁被精心排列&#…

强化学习数学原理学习(一)

前言 总之开始学! 正文 先从一些concept开始吧,有一个脉络比较好 state 首先是就是状态和状态空间,显而易见,不多说了 action 同理,动作和动作空间 state transition 状态转换,不多说 policy 策略,不多说 reward 奖励,不多说 MDP(马尔科夫) 这里需要注意到就是这个是无…

小程序视频SDK解决方案,提供个性化开发和特效定制设计

美摄科技作为视频处理技术的领航者&#xff0c;深知在这一变革中&#xff0c;每一个细微的创新都能激发无限可能。因此&#xff0c;我们精心打造了一套小程序视频SDK解决方案&#xff0c;旨在满足不同行业、不同规模客户的多元化需求&#xff0c;携手共创视频内容的璀璨未来。 …

守护头顶安全——AI高空抛物监测,让悲剧不再重演

在城市的喧嚣中&#xff0c;我们享受着高楼林立带来的便捷与繁华&#xff0c;却往往忽视了那些隐藏在高空中的危险。近日&#xff0c;震惊全国的高空抛物死刑案件被最高院核准并执行。案件中被告人多次高空抛物的举动&#xff0c;夺去了无辜者的生命&#xff0c;也让自己付出了…

Leetcode11:盛水最多的容器

原题地址&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳…

Docker本地安装Minio对象存储

Docker本地安装Minio对象存储 1. 什么是 MinIO&#xff1f; MinIO 是一个开源的对象存储服务器。这意味着它允许你在互联网上存储大量数据&#xff0c;比如文件、图片、视频等&#xff0c;而不需要依赖传统的文件系统。MinIO 的特点在于它非常灵活、易于使用&#xff0c;同时…

Pr 视频效果:波形变形

视频效果/扭曲/波形变形 Distort/Wave Warp 波形变形 Wave Warp效果用于在剪辑上创建类似波浪的动态变形效果。 此效果会自动动画化&#xff0c;波形以恒定速度移动。要改变速度或停止波动&#xff0c;需要设置关键帧。 ◆ ◆ ◆ 效果选项说明 通过调整波形的类型、高度、宽度…

(六)问题记录,simulink仿真出现模型碰撞后穿越

明明已经设置了车轮和地面之间的 spatial contact force&#xff0c;可是还会出现模型穿越&#xff08;重力作用下自由落体&#xff09;&#xff0c;如下图所示。 可仅降低小车初始高度后就不会穿越&#xff0c;如下图所示。 初步怀疑是小车初始高度大的话&#xff0c;小车在和…

【原创】统信UOS如何安装最新版Node.js(20.x)

注意直接使用sudo apt install nodejs命令安装十有八九会预装10.x的老旧版本Node.js&#xff0c;如果已经安装的建议删除后安装如下方法重装。 在统信UOS系统中更新Node.js可以通过以下步骤进行&#xff1a; 1. 卸载当前版本的Node.js 首先&#xff0c;如果系统中已经安装了N…

Kafka消费者故障,出现活锁问题如何解决?

大家好&#xff0c;我是锋哥。今天分享关于【Kafka消费者故障&#xff0c;出现活锁问题如何解决&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; Kafka消费者故障&#xff0c;出现活锁问题如何解决&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资…