微服务,【容器亚健康状态】问题,研究和解决

—【前言】—

我问:”程序有『亚健康状态』吗?”

一个正常的人,应该这样回答:”什么?程序,亚健康。。。?你神经病吧?我只听说过人,有亚健康状态。”

实际上,’程序’是有『亚健康状态』的,这和人有『湿气』道理一样。

『亚健康状态』是指,程序处于【正常】和【非正常】之间,老司机都知道,

最明显的表现就是:程序表面输入/输出正常,但卡顿,或后台在疯狂报错。

细探原因,实际上是千奇百怪的。这里不做展开。

既然程序有亚健康状态,那么容器内运行的程序,也应该有亚健康状态,也很合理。这就是标题说的『容器亚健康状态』问题。

https://www.cnblogs.com/cmt/p/14083631.html

上述『容器亚健康状态』问题,在博客园特例中,我总结如下:

最开始,后端数据库有问题了,导致页面pod报错。后端数据库修复后,页面表现有时很快,有时卡顿,估计某个pod有问题,没恢复过来。但由于pod很多,无法立马找出问题pod。猜测cpu100%,但是容器探活正常。或探活有些慢但能通过。

—【『容器亚健康状态』问题分析】—

老司机都知道,细探原因,实际上是千奇百怪的。

又因为部分容器正常,所以你必须收集所有容器的log。这些『亚健康状态容器』,也是能通过容器探活的,有时候我们并不具备详细探究的条件。这就好像医生知道从海鲜市场里出来的很多病人肺有问题了,用常规的药后也治不好。而你急着解决,手头上还没有【基因测序】这些个超级手段。

—【k8s的解法】—

假设100个容器里头,有1个『亚健康状态容器』,这个容器还是『无症状』或『症状不明显,能过探活』这种,这个问题是不容易解决的。

K8s 1.15版本,提供了滚动重启的命令。但我赶脚相对而言不轻量。

需要说明的是:

定时重启能缓解和部分解决这种问题,不能解决所有问题。要想解决所有问题,还得靠压测,和看日志,还有调试。

—【k4t的解法】—

K4t是我业余时间开发的,容器编排系统。

博客园的问题,提醒了我。我看了k8s的解决方案后,琢磨出了这个问题更好的方案:

即『杀死容器老奶奶』功能,或者叫『最老容器_定时重启间隔』参数。

这个值默认是7天,最小是1分钟。值绑定在应用上。

这个参数假设生存时间越长的容器副本,越会出问题。而新run的容器副本,假设没问题。

也就是说超过这个阈值(1分钟—7天),就会优雅的重启1个容器副本。

优雅的重启1个容器副本是指:
1从dns,和反向代理中摘除这个容器入口。那么就没有新流量进来了。
2超过n分钟后。这个时间可以自定义。目的是等待老http session,结束。
3再杀死容器,重启。

若遇到上述『容器亚健康』问题。则调小这个值即可。等过一段时间,容器都优雅重启了后,再调整回来即可。当然了,我的k4t是有办法查看,每个容器的启动时间的。

注意:

l 定时重启并不能解决所有问题。要想解决所有问题,还得靠压测,和看日志,还有调试。

l 此参数不能理解成『单个容器最大生存时间』。设你的应用有10个容器副本,第一个容器会在7天后重启,第10个容器在70天才会重启。

这个参数,看起来跟滚动重启类似吗?

K8s有这功能吗???

—【附录a:k4t简介】—

k4t即:《kaiiit生产级别的容器编排系统》

https://gitee.com/chuanjiao10/k4t

预计2021年6月发布alphi1版

中文名:《海贼帝·优秀的怕被沽沟暗杀·黑毛腿》

中文别名:《ps1倚天剑》

微服务,【容器亚健康状态】问题,研究和解决

这是一套基于《卡死你3000》打造的,全功能,容器集群的自动化部署、扩容以及运维的平台。(国产k8s)。它采用开放式架构,具有网络简单稳定,使用简单,脚本操控灵活的特点。

powershell传教士 业余时间 作品

群名称:k4t官方1群 群 号:722528388

—【附录b:k4t 组件介绍】—

问:完美版的k4t项目,由哪几部分组件构成?

答:

1 master端。 正在开发中,预计2021年6月前发布alphi1版。

2 node端。已经开发完成,并部分开源免费成为雏形版。

3 动态负载均衡api网关。(外部)

提供反向代理,和负载均衡功能。用于给一组容器应用,形成统一的ip。

目前基于我编写的envoy后端增删脚本。

https://gitee.com/chuanjiao10/envoy_powershell

你也可diy,改成自己喜欢的。

4 动态dns。(外部)

是非必要组件。K4t集群,可以只用负载均衡器api-getway。

用于给一组容器应用,形成统一的服务名字。

目前基于未激活的无图win2019。当然有图版win2019也行。你也可diy,改成自己喜欢的。例如:dnsmasq

—【后记】—

“容器当然有亚健康状态了,容器996也有可能会疲劳呀!这和人有’湿气’道理是一样的”我喃喃道。

K4t的这个参数,让容器告别996,也有轮流上下班时间了。哈哈,这参数堪称『大力丸』。有病能治病(比如内存泄漏),无病能防病(比如内存泄漏)。实乃居家旅行、以及运维编排、必备之好手段也!

实际上,【大力丸】存在的意义是:pod常规http探活手段不完美。写脚本并绑定pod探测稍嫌麻烦,这么做的少。

谢谢观看。

Original: https://www.cnblogs.com/piapia/p/14406823.html
Author: PowerShell免费软件
Title: 微服务,【容器亚健康状态】问题,研究和解决

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/610797/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Linux基础学习(二)

    显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录 [root@ct7 ~]# ls /etc | grep -E “^[0-9][a-z]*”…

    Linux 2023年6月8日
    094
  • linux三剑客之awk

    linux三剑客之awk 适用范围:awk主要是用来格式化文本。 语法格式:awk [参数] [处理规则] [操作对象] 参数 作用 -F 指定文本分隔符(不写默认是以空格作为分隔…

    Linux 2023年5月27日
    0112
  • centos安装torch==1.4.0与相关细节

    对于某些直接安装torch==1.4.0报错的情况(没错,就是我遇到了) 在网上查找了,大概的解决方法是先安装一个低版本的torch和torchvision, torchvisio…

    Linux 2023年6月7日
    0107
  • NRF24L01双向无线通信

    最近闲来无事,利用手头资源研究了一下基于nrf24L01的双向通信实验,整个系统如下图所示。原理:nrf24L01本身是一种单向通信的无线模块,但是,当nrf24L01工作在增强型…

    Linux 2023年6月14日
    097
  • 上篇:Go函数的骚包玩法有哪些

    1. 用type关键字可以定义函数类型,函数类型变量可以作为函数的参数或返回值。 package main import "fmt" func add(a, b…

    Linux 2023年6月7日
    096
  • 使用Linux Deploy将闲置的安卓手机改造简易服务器

    本文将介绍我在自己闲置的小米4手机安装CentOS系统的过程。手机配置信息:MIUI 9开发版(方便ROOT)、Android 6、架构 ARMv7(arm32) 准备工作 1、手…

    Linux 2023年6月8日
    0112
  • 前端数据提交给后端之HTML表单简单剖析

    写在开篇 什么是表单呢?当前端想要提交数据给后端,怎么搞?那么在前端开发中,表单是常用的手段,比如常见的场景有:登录框、账号注册页、主机信息录入CMDB等等场景都是需要表单。那么在…

    Linux 2023年6月7日
    0104
  • Windows 添加nginx到服务

    一、下载nginx 地址:http://nginx.org/en/download.html (稳定版) 解压到相应的磁盘,本文是:E:\nginx\nginx-1.18.0 二、…

    Linux 2023年6月8日
    0118
  • sed用法

    基础sed命令 sed OPTIONS… [SCRIPT] [INPUTFILE…] 常用的选项: -n,–quiet: 不输出模式空间中的内容 -i: 直…

    Linux 2023年6月6日
    0134
  • USB转双串口产品设计-TTL串口

    基于USB转2路串口芯片CH342,可以为各类主机扩展出2个独立的串口。CH342芯片支持使用操作系统内置的CDC串口驱动,也支持使用厂商提供的VCP串口驱动程序,可支持Windo…

    Linux 2023年6月7日
    0105
  • 清空Redis集群所有节点的数据工具

    FLUSHALL和FLUSHDB是单机命令,所以清空集群需要在所有Master节点上均执行一次。下载:https://github.com/eyjian/redis-tools/b…

    Linux 2023年5月28日
    0111
  • c++模板类的使用,编译的问题

    前两天在写代码时,把模板类的声明和分开放在两个文件中了,类似于下面这样: stack.hpp: #ifndef _STACK_HPP #define _STACK_HPP temp…

    Linux 2023年6月14日
    0100
  • tcpreplay重放报文,tcpdump能抓到包,应用程序收不到包

    现象: 生产环境中有两台服务器A、B,A服务器实时有报文发往B服务器。为了在测试环境测试新功能,故在现网A服务器上tcpdump抓取发往B服务器的报文,然后在测试环境tcprewr…

    Linux 2023年5月27日
    0165
  • short, int, long, long long各个类型的范围

    类型名称 字节数 取值范围 signed char 1 -2^7 ~ 2^7-1 -128~+127 short int 2 -2^14 ~ 2^14-1 -32768~+3276…

    Linux 2023年6月8日
    0114
  • 如何在 pyqt 中自定义工具提示 ToolTip

    前言 Qt 自带的工具提示样式不太好看,就算加了样式表也时不时会失效,同时工具提示没有阴影,看起来就更难受了。所以本篇博客将会介绍自定义工具提示的方法,效果如下图所示: 实现过程 …

    Linux 2023年6月7日
    0109
  • 实验一-密码引擎-加密API实现与测试

    任务详情 1 下载并查找GMT 0018-2012密码设备应用接口规范原始文档进行学习 (5分) 2 实现GMT 0018-2012密码设备应用接口规范的接口函数,至少实现:1)设…

    Linux 2023年6月8日
    093
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球