• crdstart demo学习笔记


    github demo链接: https://github.com/idevz/crd-start

    crdstart demo业务逻辑概述:
    通过crd定义一个crdstart分组下v1alpha1版本的Dcreater API资源类型,
    每创建一个creater-from-name的Dcreater对象时,k8s就会获取它的deploymentName和replicas属性,
    并根据事先准备好的Deployment模板创建deployment.
    如果这个对象有更新,就会根据更新信息,同步之前创建的deployment进行调谐。
    当这个对象被删除以后,我们会将其创建的deployment所关联的pod日志落地,然后将其清理。

    自定义资源控制器的开发流程概述:
    首先定义资源类型 //通过crd定义
    通过apply在k8s中注册它 //通过kubectl apply -f xxx-crd.yaml

    CrdContoller的控制逻辑主干代码在controller.go文件中,
    先是CrdController的结构体定义,
    两组Clientset用于和apiserver直接通信,
    各资源对象对应的Lister和InformerSynced对,表明了数据同步基于经典的List-Watch机制 ,
    本地预先同步了所有关心的数据,后面通过watch机制进行增量更新。
    InformerSynced标记了相关数据是否已经同步到本地。

    然后在主控逻辑Run方法中,我们先要等各个资源的Informer,将目前集群中的相关数据同步到本地缓存后,再启动worker协程。
    在worker处理过程中,从前面的工作队列中获取待处理的对象,
    并据此构建deployment。

    这里deployment对象构建相关逻辑在helper.go中实现,
    其中为Deployment对象添加对应对象所有者引用和终结器,为后面在资源对象回收的过程中,能够利用k8s的级联删除垃圾回收机制打下基础。

    另外helper中,关于获取Deployment对象的对应Pods对象的列表的方法,是直接引用的k8s内建的DeploymentController。
    这当然不是唯一的方法,我们也可以通过client-go提供的Informer机制来实现,这里直接引用pkg/apis/apps包,是为了演示对k8s项目的整包引用。
    因为当前k8s为了简化引用,将之前的一些核心模块导出到了staging目录下单独分拆提供,有时候我们为了研读k8s的源代码,希望能对它的核心逻辑做一些实验,就可以采用这种方式对k8s项目进行整包引用。

    logSaveAndClean展示了通过Patch的方式,去除Deployment对象的Finalizers终结器,使Deployment对象进入K8s级联删除的垃圾回收处理过程。

  • 相关阅读:
    看到一篇好文章 和大家分享《别让灵魂赶不上自己的脚步!》
    第二次结对编程作业
    css的用法
    MicrosoftWord2013基本用法
    使用winshark分析三次握手,四次挥手
    取石子(博弈游戏)
    java.lang.NullPointerException的可能原因及处理
    Git的用法
    C++ 各种基本类型间的转换
    Servlet技术(使用myeclipse)
  • 原文地址:https://www.cnblogs.com/abcdef/p/13816109.html
Copyright © 2020-2023  润新知