[Day 2] SRE - 你的服务死後不要让人担心嘛

graceful shutdown

在关闭服务前,在服务内部以做完该做的事情,使得服务得以善终。
在容器化的时代,现在的部署更新,几乎都是透过image版本更新的方式。

本篇文章重点不在於如何实作graceful shutdown
如有想了解的大大 可以参考 热血奶爸v0.0.1实作文章

为何我说graceful shutdown很重要,如果在k8s当发生服务逻辑有bug时,

  1. 会先去查看在更新image版本之前是否有此问题,来判断此image版本发生此问题的机会有多高
  2. 在测试站或开发站测试旧版本是否有同样问题,如果「有」代表不是版本差的问题,可能是其他问题或者更久远的问题。
  3. 如果旧版本没问题,这时候就要进行部署撤退的动作减少公司损失,这时候可能会下指令

helm指令

helm rollback -n ${NAMESPACE} ${RELEASE-NAME} ${REVISION}

或是kubectl指令

kubectl rollout undo daemonset <daemonset-name> --to-revision=<revision>

这时候目前还在运行的Pod会收到关机讯号,当服务有时做graceful shutdown时,可以尽可能地把该做的事情做完然後关机,新的服务可以无痛衔接起来,这时执行部署撤退动作的人员就只需专注於Pod是否完全rollback完成,然後进行各式各样的例行通知作业,不用再让执行人员担心资料或服务是否还有问题,以大幅减轻执行人员的压力。

另外还有graceful startup 在服务启动前做完该做的检查後,才会正式对外说:「我准备好了,可以开始服务大家了!」,这也是很重要的,重点就在於对於服务生命周期的管理与设计,而实作方式大家可以参考Evelyn_Chen去年的文章-day 10 Pod(3)-生命周期, 容器探测
/images/emoticon/emoticon39.gif


<<:  Day10: [资料结构] Graph - 图

>>:  [CSS] Flex/Grid Layout Modules, part 5

Day25-React 效能优化篇-下篇(介绍 React Profiler)

在这篇文章中,将会介绍 React 提供的 Profiler API。 介绍 React Profi...

Day13 Vue directives(v-if & v-show)

嗨~今天又见面了,昨天我们了解了Evnet Handing後我们今天要继续来讲条件渲染v-if、v-...

【Day13】return的妙传得分

当我们在Chrome的console视窗键入如下程序码,执行一个say()的函式,除了consol...

Day23 :【TypeScript 学起来】先了解 ES6 Class

因为我没什麽用到 Class,这一篇会笔记 ES6 Class 的使用, 下一篇才会进到 Type...

# Day6--一个很难驾驭的概念:闭包

闭包(closure)大概是我在函式这个单元过後,卡的稍微久一点的一个关卡,主要是弄不清楚闭包到底跟...