K8S operator

最近在看hugegraph-computer代码,基本上是自己实现了一个 GraphX的组件;
graphX用了RDD来对图进行建模,使用BSP计算模型,并且用的是spark自己的applicaiton调度模式;
而hugegraph-computer 是为hugegraph生态定制的图计算项目,可以很方便的直接对接 图存储和把数据写入到存储;
也是采用了BSP的计算模型;计算和 资源调度实现了分离,目前打算支持在k8s上进行调度和在yarn上进行调度;
目前最新的代码来看,yarn的调度部分还没做;但是提供了k8s的调度;
我们知道 k8s 提供了几种资源的调度,比如deloyment,statefulSet,dameonset,job 等;对于 bsp 的程序 需要主从,且可能存在重新选主,hugegraph-computer项目依据与k8s的扩展机制,实现了自己的 operator 来专门做 bsp计算的调度;

client go

k8s 提供client go 客户端来操作整个集群的行为;

  • informer Reflector 可以监听 api server的变动event;
  • 该类变动信息推送到 workqueue里面;
  • 我们的work 可以对比事件状态以及我们spec的预期来决定我们的操作;
  • RestClient, clientSet 操作基本的pod,service, dynamicClient 就可以操作我们的CRD定义的资源;

一个client go 的简单例子,我们自定义个一个controller,监听用户创建的delpyment,是有由annotation:ingrees true;
如果为true,controller 自动添加ingres,并且删除时候,自动删除;

CRD

如何创建一个自定义的类似于 Deloyment 一样的资源? CustomResourceDefinition
k8s 提供注册新的 kind 的schema格式;schema的文件定义需要参考标准;
定义schema之后,我们该怎么样来监听我们自定义的资源呢?
client go 里面为每一个 resource 都设置informer 和相关的代码, 我们可以使用code-generator来生成同样的代码,
既可以像使用其他resource一样在客户端使用informer了,当然也可以用dynamic client来操作,但是会更加复杂;

你可能感兴趣的:(K8S operator)