2022 NO.30 Open source weekly report

2022 年第 30 周,以下是本周的开源周报。

事出有因

周中的时候在 OpenKruise 开源社区群里看到有开发者提到能不能在 kubectl-kruise 插件中提供一种便捷的方式,让用户能够快速使用 ContainerRecreateRequest 实现原地重启容器的能力。

其实这个想法我在很久之前就有了,

当时搁置了一下就淹没在琐碎之中,详见这个 issue。趁着这周末的空闲,打算把这个功能实现一把。

背景

ContainerRecreateRequest 是 OpenKruise 提供的一种运维增强的组件,可以帮助用户重启/重建存量 Pod 中一个或多个容器。
和 Kruise 提供的原地升级类似,当一个容器重建的时候,Pod 中的其他容器还保持正常运行。重建完成后,Pod 中除了该容器的 restartCount 增加以外不会有什么其他变化。

目前用户创建 CRR 实现容器原地重启的方式主要有两种方式:

  • kubectl apply -f crr.yaml
  • OpenKruise API

这两种方式对集群运维人员来说都不够友好,过于繁琐。最好的方式就是在 terminal 中使用一行命令就能创建 CRR 完成原地重启。而 Kruise-tools 为 Kruise 的功能提供了一系列命令行工具,包括 kubectl-kruise,它的是 kubectl 的标准插件。在这个插件中可以很容易集成该功能。(关于 kubectl-kruise 后面打算专门开一篇文章来详细介绍。)

确定目标

首先我们需要保证输入的参数尽量少,其他的必须参数都给到合理的默认值,以便用户能够以最快的速度创建 CRR 重启容器,所以我在插件中定义了 CRR 的一个默认策略:

1
2
3
4
5
6
strategy:
failurePolicy: Fail
orderedRecreate: false
unreadyGracePeriodSeconds: 3
activeDeadlineSeconds: 300
ttlSecondsAfterFinished: 1800

确定最终的命令为:

1
kubectl kruise create ContainerRecreateRequest test-crr --pod=sample-k52bq --containers=nginx

执行这条命令就可以重启 pod sample-k52bq 中名字为 nginx 的容器,其中 --containers 为一个列表,如果为空就重启 pod 中所有的容器,否则重启指定容器。

除了 --pod--containers 还支持 unreadyGracePeriodSecondsterminationGracePeriodSeconds,这两个参数都是选填。

  • unreadyGracePeriodSeconds: 重建后新容器至少保持运行这段时间,才认为该容器重建成功
  • terminationGracePeriodSeconds: 等待容器优雅退出的时间,不填默认用 Pod 中定义的

实现

相关的代码实现可以查看这个 PR

这部分代码合并后下周会 release 新版本,想要尝鲜的同学可以 clone 项目后自行编译。

碎碎念

这篇文章是 weekly-report 系列的第一篇,之所以开始这个系列,真是说来话长。差不多就是刚开始写 blog 的时候是想每周都输出一篇有点子质量的技术文章,发现这样太难了,一是没有这么多内容输出,二是很容易被其他杂事打乱,很难坚持。这次开始以开源周报的名义写每周的 blog,实际上是想以一种随意、自由的方式,输出一点东西,不计篇幅也不考究质量,只为记录,这样大概能坚持下去吧。

都说日拱一卒,我先周拱一卒。


-------------The End-------------

本文标题:2022 NO.30 Open source weekly report

文章作者:cloud sjhan

发布时间:2022年07月24日 - 22:07

最后更新:2022年07月30日 - 17:07

原始链接:https://cloudsjhan.github.io/2022/07/24/2022-30-Open-source-weekly-report/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

cloud sjhan wechat
subscribe to my blog by scanning my public wechat account
坚持原创技术分享,您的支持将鼓励我继续创作!
0%
;