zoukankan      html  css  js  c++  java
  • 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级联删除的垃圾回收处理过程。

  • 相关阅读:
    Json,Gson,FastJson解析笔记
    Java 里把 InputStream 转换成 String 的几种方法
    11大Java开源中文分词器的使用方法和分词效果对比,当前几个主要的Lucene中文分词器的比较
    HDU 1599 find the mincost route
    如何更改Java括号中的默认对齐
    Android Java 与 C++ 恒调用,路径、文件名、延长的最大长度
    使用android SpannableStringBuilder实现图文混排,看到许多其他
    POJ 2352 Stars 树阵
    cocos2dx环境配置和打包
    DSR on Openstack POC
  • 原文地址:https://www.cnblogs.com/abcdef/p/13816109.html
Copyright © 2011-2022 走看看