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 | strategy: |
确定最终的命令为:
1 | kubectl kruise create ContainerRecreateRequest test-crr --pod=sample-k52bq --containers=nginx |
执行这条命令就可以重启 pod sample-k52bq 中名字为 nginx
的容器,其中 --containers
为一个列表,如果为空就重启 pod 中所有的容器,否则重启指定容器。
除了 --pod
、--containers
还支持 unreadyGracePeriodSeconds
和 terminationGracePeriodSeconds
,这两个参数都是选填。
- unreadyGracePeriodSeconds: 重建后新容器至少保持运行这段时间,才认为该容器重建成功
- terminationGracePeriodSeconds: 等待容器优雅退出的时间,不填默认用 Pod 中定义的
实现
相关的代码实现可以查看这个 PR。
这部分代码合并后下周会 release 新版本,想要尝鲜的同学可以 clone 项目后自行编译。
碎碎念
这篇文章是 weekly-report 系列的第一篇,之所以开始这个系列,真是说来话长。差不多就是刚开始写 blog 的时候是想每周都输出一篇有点子质量的技术文章,发现这样太难了,一是没有这么多内容输出,二是很容易被其他杂事打乱,很难坚持。这次开始以开源周报的名义写每周的 blog,实际上是想以一种随意、自由的方式,输出一点东西,不计篇幅也不考究质量,只为记录,这样大概能坚持下去吧。
都说日拱一卒,我先周拱一卒。