Terminating with Grace - YouTube

Channel: Google Cloud Tech

[0]
当使用分布式系统时
[2]
能适当处理系统失败很关键
[3]
Kubernetes可以利用控制器
[6]
帮助观察系统的运转状况
[8]
然后重启已经停止运转的服务
[11]
另一方面 Kubernetes实际上
[13]
可以强行终结你的应用
[16]
确保大体的系统不受损害
[19]
在这一期的Kubernetes最佳使用方式中
[21]
让我们来看一下你该怎样使用Kubernetes
[23]
帮助它更有效地减少
[25]
你使用的应用的崩溃情况
[28]
[音乐播放]
[36]
在pre-container world中 大多数的应用
[39]
都在虚拟机或者物理机上运作
[41]
如果一个应用崩溃了可能需要很长时间
[45]
才能建一个 可以继续使用的替代应用
[47]
或者可能更糟使用者需要登陆机器
[51]
然后手动修复问题--
[52]
即使问题发生在半夜
[54]
如果你只有一台或者两台机器
[56]
来运转这个应用 用来恢复需要的时间
[59]
是不能接受的
[61]
所以 使用过程级监控变得很平常
[64]
这样可以在应用崩溃的时候进行重启
[67]
如果应用崩溃了监控过程
[70]
可以捕捉到退出代码
[72]
然后立刻重启服务器
[74]
类似Kubernetes的系统开始出现
[76]
这类系统建立在自己的基础设备中
[80]
Kubernetes使用一种循环系统
[82]
能让从容器到节点的资源
[85]
都保持健康
[86]
这意味着你不再需要手动运转这些
[89]
监控过程
[91]
如果一个资源在健康检测中出现问题
[93]
Kubernetes会自动制作
[95]
一个替代资源
[97]
但是Kubernetes的功能不止是 可以监控你的应用
[100]
确保无崩溃
[101]
它还可复制更多的应用
[103]
来在多台机器上运作
[104]
它可以更新你的应用
[106]
甚至可以运转应用的多种版本
[108]
并确保运转会同时发生
[111]
这意味着有很多种理由
[113]
来说明Kubernetes可能会终结一个 健康的容器
[117]
假如你更新了你的配置
[119]
并且使用的是滚动式更新
[120]
Kubernetes会慢慢终结就的容器 然后制造新的
[125]
如果你过度使用一个节点 Kubernetes会终结所有
[128]
那个节点中的容器
[129]
如果一个节点的资源都用光了
[132]
Kubernetes会终结一些容器 释放资源
[135]
很重要的一点是你的应用可以
[137]
优雅地进行终结
[140]
这样的话对你的终端用户的影响会很小
[142]
需要恢复的时间也会很短
[146]
也就是说需要存下来的数据 会被存下来
[149]
它会关闭所有的网络链接
[151]
完成剩下的工作--
[153]
等其它类似任务
[155]
实际操作中 这意味着你的应用 需要知道
[157]
怎么处理结束程序信号
[160]
当它收到这条信息时 应该开始进行关闭
[163]
一旦Kubernetes决定终结你的容器
[166]
一系列事件就会发生
[168]
让我们来看看Kubernetes终结任务中的
[171]
各个步骤
[173]
假设我们想终结这些容器中的一个
[176]
这时 容器会停止接收新的信息
[180]
对这个进行控制的容器不会受到影响
[183]
但是所有新的信息都会被阻止进入
[186]
让我们来看看prestop钩子
[188]
prestop钩子是一个 特殊的命令或者HTTP要求
[192]
会被送到容器中
[195]
如果你的应用不能
[196]
在收到结束程序信号时优雅地终结
[198]
你可以使用这个钩子 来引发一个优雅的关闭
[202]
大多数程序收到结束程序信号时 都能优雅地关闭
[205]
但是如果你使用了 某种第三方编码或者
[208]
一个你并不是很会操作的系统
[210]
prestop钩子就是一个 引发优雅关闭的好工具
[213]
而且不用对应用进行任何改动
[216]
现在 这个时候 Kubernetes
[217]
会将结束程序信号 发送到容器
[221]
这个信号会让容器知道
[223]
它们很快就会被关闭了
[224]
这样你的代码就能做好准备
[226]
然后有序开始进行关闭
[229]
这可能包括终止任何 长时间的链接
[231]
比如数据库链接 或者网络协议流
[234]
还可能会做保护当前状态 之类的事
[237]
所以说即使你已经在使用prestop钩子了
[240]
也要知道重要的一点是
[241]
你要测试当结束程序信号被送出时 你的应用会如何反应
[245]
这样在情况发生时 你就不会很吃惊
[248]
到这一步 Kubernetes会等着
[250]
直到终结优雅时段的到来
[253]
这个事件默认设置是30秒
[255]
很重要的是要知道当这个
[257]
和prestop钩子以及结束程序信号 同时发生时
[261]
Kubernetes不会等prestop钩子以及
[264]
结束程序信号来完成工作
[267]
如果你的应用 在终结优雅时段之前
[270]
就完成关闭Kubernetes 就会马上进行下一步
[274]
这时如果你的容器需要 超过30秒的时间来关闭
[277]
就要确定你增加终结优雅时段
[279]
你可以对终结优雅时段进行设置
[282]
就在容器YAML中
[284]
例如 这个例子中的设置是60秒
[288]
现在来说 最后一步--
[290]
如果容器在优雅时段后还在运行
[294]
它们会收到程序结束信号 然后被强制移除
[298]
这时 Kubernetes也会清除所有的物质
[303]
Kubernetes终结容器的原因有很多种
[305]
能确定你的应用可以知道怎样
[307]
优雅地进行终结
[310]
对于创建稳定的程序真的很重要
[313]
希望我们在下期的 Kubernetes最佳使用方式中再见
[317]
[音乐播放]