• 【博客434】Kubelet Bootstrap Checkpoint


    Kubelet Bootstrap Checkpoint

    Kubelet Bootstrap Checkpoint是什么

    Kubelet Bootstrap Checkpoint:

    是kubelet对特定的Pods的进行备份、恢复的kubelet内置模块。
    
    • 1

    Kubelet Bootstrap Checkpoint作用:

    是对当前Node上带有Annotation:node.kubernetes.io/bootstrap-checkpoint=true的
    Pods的Checkpoint到文件系统机制。
    当kubelet重启时,会检查checkpoint目录下各个Pods对应的checkpoint文件,
    加载所有的checkpoint文件,转换成Pod Object,然后启动这些Pods。
    
    • 1
    • 2
    • 3
    • 4

    Kubelet Bootstrap Checkpoint应用场景

    相似场景:

    1、static pod:根据某个目录下Pod的描述文件,kubelet监控这些文件,根据文件的变更与否,
                        决定是否删除、创建、更新对应的Pods。
    
    2、DaemonSet
    
    • 1
    • 2
    • 3
    • 4

    不同点:

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

    Kubelet Bootstrap Checkpoint主要的应用场景:

    对于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。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    怎么启用Kubelet Bootstrap Checkpoint

    Kubelet启动参数中配置--bootstrap-checkpoint-path,默认为“”,意味着默认Disable。
    给需要Bootstrap Checkpoint的Pods加上:
    Annotation:node.kubernetes.io/bootstrap-checkpoint=true
    
    • 1
    • 2
    • 3

    Bootstrap Checkpoint工作机制

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

    创建或者变更Pod

    当用户提交创建Pod请求后,经过scheduler调度,最后由kubelet发现调度到本节点,
    由kubelet开始Pod的创建流程。
    
    checkpointManager不为空的情况下,kubelet会检查Pod是都有
    Annotation:node.kubernetes.io/bootstrap-checkpoint=true,
    
    kubelet在HandlePodAddtions时会遍历所有Pods,在dispatchWorker去创建Pod前,
    PodManager会调用checkpoint.WritePod接口先将满足Annotation的Pods写入到它们对应的
    checkpoint文件(Pod_UID.yaml)中。
    
    同样的,当Pod Spec发生变更,kubelet通过HandlePodUpdates遍历所有Pods,
    由PodManager调用checkpoint.WritePod接口将满足Annotation的Pods最新内容
    写入到它们对应的的checkpoint文件中。
    
    如果checkpoint.WritePod发生Error,并不会引发流程异常,
    Pod还会继续创建起来,但是checkpoint失败。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    删除Pod

    当用户提交删除Pod请求后,kubelet通过HandlePodRemove遍历所有Pods,
    由PodManager调用checkpoint.DeletePod接口将Pod对应的checkpoint文件删除。
    
    • 1
    • 2

    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实例。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    other

    Bootstrap Checkpoint只是对本节点的特定Pods进行Checkpoint,并不包括其他Kubernetes Object的Checkpoint。

  • 相关阅读:
    笔记-Elasticsearch搜索引擎构建入门与实战
    Docker Swarm集群部署
    软件测试面试必备,一文带你彻底掌握接口测试
    Vite Vue3+Element Plus框架布局
    企业文件传输使用网盘好还是大文件传输软件好?
    多线程--JUC并发编程
    1600*G. Special Permutation(构造&找规律)
    C++基础语法(类于对象下)
    数字信号处理-09-串行FIR滤波器MATLAB与FPGA实现
    oppo面试问题
  • 原文地址:https://blog.csdn.net/qq_43684922/article/details/126086505