自从上次开始脚踏两只船(2个独立的k8s集群同时运行),园子暂时用奢侈的土豪方式过上了安稳的船上生活。

这种方式除了费钱之外,还带来一个问题,我们的集装箱自动装船系统(基于gitlab-ci的自动化部署)不灵了,不支持同时向2艘船装同样的货(2个gitlab-runner运行同1个job),后来,我们通过 gitlab 的秘密武器 parallel-matrix 解决了。

deploy-prod:
stage: deploy
tags:
- k8s-prod
variables:
DEPLOY_CLUSTER: ${DEPLOY_CLUSTER}
parallel:
matrix:
- DEPLOY_CLUSTER: [k8s-cluster0, k8s-cluster1]

注:上面的 DEPLOY_RUNNER 变量在部署中并没有实际用到,只是为了欺骗 gitlab-runner 以实现多个 runner 运行同一个 job。

这2艘船,一艘是旧船,引擎用的是 kubernetes 1.17.0。一艘是新船,引擎用的是 kubernetes 1.23.3,新船是今年春节后投入使用的,出现因大量 pod 同时  CrashLoopBackOff 而翻船的是新船。

上次翻船的博文中园友 Dicky_Zhang 的评论:

版本不对吧,一般不是建议使用1.23.5以上得版本吗,你们使用得.3,虽然说可能问题不大

让我们对新船产生了更多的怀疑,现在有了2只船,就更好验证了。

上周末我们停航了旧船(下线旧k8s集群),只投用新船,周六一切正常,周日又出现部分 pod 无缘无故 CrashLoopBackOff,后来投用新船恢复,证明了单独航行新船肯定会出问题

这周一2艘船并驾齐驱,一天平稳航行,一切正常。

今天周二依然是2艘船并驾齐驱,上午的访问高峰,新船又出问题了,整个集群有近 40% 的 pod 突然 CrashLoopBackOff(只有新闻应用因为所有 pod 都挂了,部分访问受影响),而旧船稳如泰山,证明了同时航行新旧船,新船会出问题,旧船不会

接下来,进行更重要的验证,将新船下线,在没有负载的情况下新船上的那些 CrashLoopBackOff 的 pod 很快就恢复正常。而没有新船相伴、独自航行的旧船,面对访问高峰的狂风暴雨,依然稳如泰山地如风平浪静般航行,证明了单独航行旧船不会出问题

通过今天的验证,我们推断 kubernetes 1.23.3 可能存在稳定性问题,接下来我们会尝试看能不能将新船的引擎降级为 1.22.8。

k8s 开船记-脚踏两只船:船儿还是旧的好,不翻船才是硬道理的更多相关文章

  1. k8s 开船记-故障公告:自建 k8s 集群在阿里云上大翻船

    非常非常抱歉,新年上班第一天, 在今天阿里云上气候突变情况下,由于我们开船技术差,在今天 10:15~12:00 左右的访问高峰,我们竟然把船给开翻了,造成近2个小时整个博客站点无法访问,由此给您带来 ...

  2. k8s 开船记-触礁:四涡轮发动机撞坏3个引发502故障

    (图片来自网络) 非常抱歉,这次开船触礁故障给您带来麻烦了,请您谅解. 在我们昨天发布 k8s 开船记首航博文后,有园友在评论中发来贺词——“泰坦尼克号出发了[狗头]”,借此吉言,今天船就触礁了,还好 ...

  3. k8s 开船记:升级为豪华邮轮(高可用集群)与遇到奇怪故障(dns解析异常)

    之前我们搭建的 k8s 集群只用了1台 master ,可用性不高,这两天开始搭建高可用集群,但由于之前用 kubeadm 命令创建集群时没有使用 --control-plane-endpoint 参 ...

  4. k8s 开船记-首航:博客站点从 docker swarm 切换到 k8s

    昨天晚上,我们将博客站点的生产环境从 docker swarm 集群切换到了 k8s 集群,开船到目前,航行非常平稳,可以说首航成功! k8s 集群是我们用10台阿里云服务器自己搭建的,1台 mast ...

  5. Kubernetes 开船记-脚踏两只船:用 master 服务器镜像克隆出新集群

    自从2020年2月23日 园子全站登船 之后,我们一边感叹"不上船不知道,一上船吓一跳" -- kubernetes 比 docker swarm 强大太多,一边有一个杞人忧天的担 ...

  6. 【故障公告】k8s 开船记:增加控制舱(control-plane)造成的翻船

    春节期间我们更换了 kubernetes 生产集群,旧集群的 kubernetes 版本是 1.17.0,新集群版本是 1.23.3,新集群上部署了 dapr,最近准备将更多独立部署的服务器部署到 k ...

  7. k8s 开船记-修船:改 readinessProbe ,去 DaemonSet ,上 Autoscaler

    (图片来自网络) 改 readinessProbe 对于昨天 k8s 尼克号发生的触礁事故,我们分析下来主要是2个原因,一是当时4个节点不够用造成部分容器负载过高而宕机,二是 readinessPro ...

  8. k8s 开船记-全站登船:Powered by .NET Core on Kubernetes

    今天 18:30 左右,我们迈出了 kubernetes 航行的关键一步——全站登船,完成了全站应用从 docker swarm 集群向 k8s 集群的切换,以前所未有的决心与信心重新开起这艘巨轮,而 ...

  9. k8s 随记

    1.kubelet参数解析:https://blog.csdn.net/qq_34857250/article/details/84995381 2.如何在github中查找k8s代码关键字? 现在我 ...

随机推荐

  1. 关于static

    static是静态的意思: static修饰的成员变量,在内存中存在于方法区中,只有一份,非静态的成员变量在堆中,每个对象中都有一份 public class Demo1 {    public st ...

  2. webhook触发jenkins进行sonar检测

    目的 jenkins仅需创建一个job,git推送后自动进行sonar代码检测并上传到sonarqube jenkins插件 已按社区推荐安装基本插件 Generic Webhook Trigger ...

  3. VS Code开发TypeScript

    TypeScript是JaveScript的超集,为JavaScript增加了很多特性,它可以编译成纯JavaScript在浏览器上运行.TypeScript已经成为各种流行框架和前端应用开发的首选. ...

  4. Mybatis动态开发

    1.单表动态SQL之if 2.单表动态SQL之foreach 3.单表动态SQL之片段抽取 Sql 中可将重复的 sql 提取出来,使⽤时⽤ include 引⽤即可,最终达到 sql 重⽤的⽬的

  5. 2.go-GIN快速入门

    一.go mod安装 1.为什么要安装go mod 在项目中需要某个依赖包,必须使用go get安装,否则运行go run main.go会报错.这种方式在依赖包较多时不便于管理,于是在go1.11版 ...

  6. python-利用json模块处理json数据几个函数总结

    1.前言 json是一种轻量级的数据交换格式,它是JavaScript的子集,易于人阅读和编写. 前端和后端进行数据交互,其实就是JS和Python进行数据交互. 接口间或者前后端间的语言不一致,不同 ...

  7. 盘点Go中的开发神器

    本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star. 在Java中,我们用Junit做单元测试,用JMH做性能基准测试(benchmark),用as ...

  8. startActivityForResult跳转后回调数据

    从AActivity向BActivity跳转后,关闭BActivity并向AActivity回调一些数据: 建立AActivity.java文件: 1 public class AActivity e ...

  9. Qt:QVariant

    0.说明 QVariant可以表现出Qt数据类型中最普遍的行为. 一个QVariant对象中一次只保留一个type()的单个值(有的type()可以是多值的,例如StringList),可以用conv ...

  10. Leaflet:Marker、Popup类

    Marker.Popup.Tooltip类都是继承自Layer类:Event与Layer Marker 1.用例 L.marker([41,123]).addTo(map); 2.实例化 L.mark ...