深入分析Kubelet Bootstrap Checkpoint 原

栏目: CSS · CSS3 · 发布时间: 5年前

内容简介:Author:摘要:本文对Kubelet Bootstrap Checkpoint的使用方法、应用场景、工作机制及其代码工作流程进行了全面分析,目前仍处于Alpha阶段,不确定性较大,但值得持续的关注它在self-hosted kubernetes, kubeadm upgrade, bootkube等方向的应用,相信Kubernetes的部署和升级还会变的更加简单。Kubelet Bootstrap Checkpoint是kubelet对特定的Pods的进行备份、恢复的kubelet内置模块。

Author: xidianwangtao@gmail.com , Version: Kubernetes 1.12

摘要:本文对Kubelet Bootstrap Checkpoint的使用方法、应用场景、工作机制及其代码工作流程进行了全面分析,目前仍处于Alpha阶段,不确定性较大,但值得持续的关注它在self-hosted kubernetes, kubeadm upgrade, bootkube等方向的应用,相信Kubernetes的部署和升级还会变的更加简单。

Kubelet Bootstrap Checkpoint是什么

Kubelet Bootstrap Checkpoint是kubelet对特定的Pods的进行备份、恢复的kubelet内置模块。

node.kubernetes.io/bootstrap-checkpoint=true

Kubelet Bootstrap Checkpoint应用场景

看起来似乎有点像static pod的使用方式:根据某个目录下Pod的描述文件,kubelet监控这些文件,根据文件的变更与否,决定是否删除、创建、更新对应的Pods。又或者有点像DaemonSet的使用场景。

最大的不同是,Kubelet Bootstrap Checkpoint是会对特定Pods的checkpoint,如果Pods通过API发生变更或者创建,那么最新的Pod数据会写入到Pod对应的checkpoint文件中,Pod对应的checkpoint文件名格式是 Pod_UID.yaml ,存放的内容是完整的Pod API Object的Yaml格式内容,包括Status。

Kubelet Bootstrap Checkpoint主要的应用场景:

  • self-hosted-kubernetes 用来对k8s托管的apiserver,controller-manager,scheduler,kubelet,etcd,Adds-on组件进行升级、维护的场景。关于 self-hosted-kubernetes 的更多内容请参考 self-hosted-kubernetes design-proposals ,bootkube, kubeadm upgrade等都与此相关。这也是社区设计这一特性的主要动机。下图是bootkube的原理图。

深入分析Kubelet Bootstrap Checkpoint 原

那么,对于用户来说,部署普通应用时给Pod加上Annotation: node.kubernetes.io/bootstrap-checkpoint=true 来给该Pod提供bootstrap checkpoint会带来什么好处吗?

对于用户而言,如果apiserver能正常访问,那么bootstrap checkpoint确实没有什么用处,因为etcd中已经有Pods API Object信息了,checkpoint就显得多此一举了。如果checkpoint文件和etcd中数据存在不一致的情况,反而会导致Pod先通过checkpoint恢复后,很快又根据etcd中Object Info进行重建的问题。

但是,对于Node上一些特殊的常驻Agent,比如cmdb agent,需要定期上报Node的状态等信息,以DaemonSet Pod方式运行在Node上,如果在对Kubernetes进行升级时方式不对或者不顺畅,Node系统重启并长时间无法与apiserver进行通信(比如apiserver升级失败),这将导致Node上无法运行DaemonSet Pod,那么这个Node上的cmdb agent就无法正常上报信息。对于这种情况,如果我们给这个DaemonSet Pod设置了对应Annotation和启用了Kubelet Bootstrap Checkpoint,那么kubelet可以在不依赖apiserver的情况下,通过本地的checkpoint文件恢复之前备份的Pods。

因此,给一些per-node上的关键用户组件使用Bootstrap Checkpoint是有价值的。

怎么启用Kubelet Bootstrap Checkpoint

  • Kubelet启动参数中配置 --bootstrap-checkpoint-path ,默认为 “” ,意味着默认Disable。

  • 给需要Bootstrap Checkpoint的Pods加上Annotation: node.kubernetes.io/bootstrap-checkpoint=true

Bootstrap Checkpoint工作机制

  • kubelet启动时,在NerMainKubelet中会检查 --bootstrap-checkpoint-path 是否不为空,如果不为空,就会创建checkpointManager。

创建或者变更Pod

node.kubernetes.io/bootstrap-checkpoint=true

删除Pod

  • 当用户提交删除Pod请求后,kubelet通过HandlePodRemove遍历所有Pods,由PodManager调用checkpoint.DeletePod接口将Pod对应的checkpoint文件删除。
  • 如果Pod对应的checkpoint文件不存在,不会有异常返回,也不应该有异常返回。
  • 如果Pod对应的checkpoint文件存在,但是删除失败,那么会有kubelet Error日志,但是流程不会失败。

注意,这里并不会去检查Pod的Annotation是否满足条件,而是对所有Pods都试图去删除对个格式的文件名。为什么不先检查Annotation呢?这样性能不是会更高么?试想一下这种场景,Pod的Checkpoint Annotation在变更时被删除了,那么他的checkpoint文件就会被残留。之后该Pod被删除了,然后kubelet发生重启时,还会从checkpoint中恢复这个已经被删除的Pod,这很糟糕。当然,很快这个Pod会从apiserver中同步中知道已经被删除了,然后kubelet再次删除这个Pod.

Kubelet重启

  • 当kubelet发生冷重启时,会先检查 --bootstrap-checkpoint-path 是否配置了,如果是,就会调用checkpoint.LoadPods根据配置的目录下的所有Pod_UID.yaml格式的文件,并通过FNV Hash算法进行CheckSum检查。

  • 检查通过后,将checkpoint yaml文件内容转换成Pod API Object,然后把这些Pods对象通过kubetypes.PodUpdate类型的channel一直传递给Kubelet.syncLoopIteration,最终由dispatch给Kubelet podWorkers去创建对应的Pods实例。

Bootstrap Checkpoint工作流

Bootstrap Checkpoint的代码很简单,也不多,这里直接贴出对应的代码流程概要图。

深入分析Kubelet Bootstrap Checkpoint 原

其他注意事项

  • 目前Bootstrap Checkpoint只是对本节点的特定Pods进行Checkpoint,并不包括其他Kubernetes Object的Checkpoint。
  • 更不是对kubelet内存数据的Checkpoint。这些都不是它想做的事,更不是应该做的事,集群状态存储的地方越多,问题就会越多。

总结

本文对Kubelet Bootstrap Checkpoint的使用方法、应用场景、工作机制及其代码工作流程进行了全面分析,目前仍处于Alpha阶段,不确定性较大,但值得持续的关注它在self-hosted kubernetes, kubeadm upgrade, bootkube等方向的应用,相信Kubernetes的部署和升级还会变的更加简单。

深入分析Kubelet Bootstrap Checkpoint 原

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Beginning Apache Struts

Beginning Apache Struts

Arnold Doray / Apress / 2006-02-20 / USD 44.99

Beginning Apache Struts will provide you a working knowledge of Apache Struts 1.2. This book is ideal for you Java programmers who have some JSP familiarity, but little or no prior experience with Ser......一起来看看 《Beginning Apache Struts》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

URL 编码/解码
URL 编码/解码

URL 编码/解码