k8s使用时需要注意的坑点

在k8s实践的过程中,积累了一些填坑经验,小做总结,拿来分享一下。 希望能对准备或正在使用k8s的小伙伴提供帮助。

滚动升级 之 更新太慢

默认情况下,滚动升级是逐个更新的,当有几十上百个POD需要更新时,再加上就绪检测,整个过程将会更慢。


解决方法:

  rollingUpdate:
    maxSurge: 20% #每个滚动更新的实例数量
    maxUnavailable: 10% #允许更新过程中有多少实例不可用

就绪检测 之 无损更新

通常,服务重启的时候会有一小段时间是无法正常提供服务的。 为了避免这个过程中有请求的流量进来,我们可以使用就绪检测来检测服务是否就绪可正常接收并处理请求。

......
        readinessProbe:
          httpGet:
            host: api.xxx.com
            path: /
            port: 80
          initialDelaySeconds: 3 # 容器启动3秒后开始第一次检测
          periodSeconds: 60 # 每隔60s检测一次
          timeoutSeconds: 3 # http检测请求的超时时间
          successThreshold: 1 # 检测到有1次成功则认为服务是`就绪`
          failureThreshold: 1 # 检测到有1次失败则认为服务是`未就绪`
......

就绪检测 之 全面瘫痪

就绪检测是把双利剑,用不好,反而容易出大问题,比如服务全面瘫痪。 我们可以看到上面就绪检测的配置,漏洞百出。


比如:

  • 超时

高并发情况下,请求处理不过来,个别服务很容易导致检测请求的超时(504),立马被认为未就绪,于是流量被转移到其它服务,进而让本来就高负荷的其它服务出现同样情况,恶性循环,很快,所有服务都被认为是未就绪,结果产生全面瘫痪现象。


解决方法:

设置更长的超时时间,以及更高的失败次数。

  • 重新部署

这种情况可能是误操作,也可能是其它异常导致服务挂了。总之,你需要在用户还在不断尝试请求你服务的时候重启。你会惊讶的发现,一直无法正常启动为就绪状态,所有服务都是未就绪。同样的原因,服务启动过程不是一次全部起来,而是逐批启动,这样每批服务启动后都无法hold住流量,于是还是恶性循环,全面瘫痪


解决方法:

先去掉就绪检测再重新部署。


自动扩展 之 瞬时高峰

自动扩展POD虽然好用,但如果扩展的指标(CPU、内存等)设置的过高,如:50%以上,那么,当突然有翻倍的流量过来时,根本来不及扩展POD,服务直接就超时或挂掉。


解决方法:

尽可能的把指标设置在一个较小的值,对以往流量做参考评估,确保了当有2倍、3倍甚至5倍的流量突袭时不至于hold不住。


自动伸缩 之 提前扩容

通常,节点的自动伸缩依赖于POD的自动扩展时资源是否充足。然而在面对定时突然流量高峰的业务时,这种伸缩显然来不及,甚至常常出现高峰10分钟后才扩容的机器,流量已经回到低谷,完全启不到作用。并且,流量到底是因为业务属性很快回落,还是因为扩容不及时导致的流失?


解决方法:

根据自身业务,参考以住流量数量及推广时间,找到规律,提前或定时触发自动扩容。


容器运行 之 僵尸进程

这是一个docker旧版(<1.13)已知问题,有些容器启动后会出现defunct进程(ps aux | grep defunct),而且会越来越多,称为僵尸进程,可能导致内存泄漏,而且kill不掉,除非重启容器。


解决方法:

tini


集群节点 之 移除节点

如何安全地移出节点?这个节点上面部署了你的业务,甚至包括kube-system的东西。


解决方法:

kubectl drain,可以先把节点上的POD驱逐到其它节点,然后再移出该节点。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

牛转乾坤

1 篇文章2 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据

Kafka 的详细设计及其生态系统

原文地址:https://dzone.com/articles/kafka-detailed-design-and-ecosystem

1442
来自专栏企鹅号快讯

入门干货之用DVG打造你的项目主页-Docfx、Vs、Github

由于这三项技术涉及到的要点以及内容较多,希望大家有空能自己挖掘一下更多更深的用法。 0x01、介绍 VS,即VS2017以及以上版本,宇宙最好的IDE,集成了宇...

1946
来自专栏企鹅号快讯

11个让你吃惊的Linux终端命令

我已经用了十年的linux了,通过今天这篇文章我将向大家展示一系列的命令、工具和技巧,我希望一开始就有人告诉我这些,而不是曾在我成长道路上绊住我。 ? 1. 命...

1859
来自专栏zhangdd.com

ntp服务器查看状态命令ntpstat及ntpq -p 说明及差别详解

NTP服务器【Network Time Protocol(NTP)】是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)...

772
来自专栏linux运维学习

linux学习第五十八篇: 负载均衡集群介绍,LVS介绍,LVS的调度算法,LVS NAT模式搭建

负载均衡集群介绍 主流开源软件LVS、keepalived、haproxy、nginx等 其中LVS属于4层(网络OSI 7层模型),nginx属于7层,hap...

2069
来自专栏腾讯Bugly的专栏

Android 进程保活招式大全

目前市面上的应用,貌似除了微信和手Q都会比较担心被用户或者系统(厂商)杀死问题。本文对 Android 进程拉活进行一个总结。 Android 进程拉活包括两个...

5247
来自专栏桥路_大数据

使用react-navigation动态改变当前状态栏title

6935
来自专栏顶级程序员

11个让你吃惊的Linux终端命令

我已经用了十年的Linux了,通过今天这篇文章我将向大家展示一系列的命令、工具和技巧,我希望一开始就有人告诉我这些,而不是曾在我成长道路上绊住我。 ? 1.命...

4777
来自专栏大数据和云计算技术

Google资源管理器简析

9.2.2 Borg[1] Borg是一个集群管理器,负责对来自几千个应用程序所提交的Job进行接收、调试、启动、停止、重启和监控,这些Job将用于不同的服务...

3396
来自专栏PHP在线

PHP:40+开发工具推荐

PHP是为Web开发设计的服务器脚本语言,但也是一种通用的编程语言。超过2.4亿个索引域使用PHP,包括很多重要的网站,例如 Facebook、Digg和Wor...

3427

扫码关注云+社区