我们希望在执行 kubectl create -f kafka-source.yaml 之后,在 kubernetes 里会启动一个 pod,这个 pod 会做下面的事情:
它会从地址是 my-cluster-kafka-bootstrap.kafka:9092,topic 是 knative- demo-topic 的 kafka 机群里读取消
将读到的消息,发送到 kubernetes 的一个 Service 去执行
Kuberentes 里并没有 KafkaSource 这个资源可以使用,所以直接执行 kubectl create -f kafka-source.yaml 的时候,会出错。但是 kubernetes 提供的 CRD 机制可以让我们轻松的把上述功能添加到 kubernetes 里。
CRD 机制以上述 Kafkasource 为例,如下:
需要把 KafkaSource 这个资源注册到 kubernetes 中,这样 kubernetes 才会知道这个资源
注册之后,还需要开发一个 controller 组件,来监听用户是否创建了 KafkaSource,也就是部署、更新或者删除如上的 yaml 文件。
Controller 监听到有用户创建了 KafkaSource,就会创建一个 pod 来做相应的工作
归纳一下就是:
用户向 Kubernetes API 服务注册一个带特定 schema 的资源,并定义相关 API
将扩展资源的数据存储到 Kubernetes 的 etcd 集群
借助 Kubernetes 提供的 controller 模式开发框架,实现新的 controller,并借助 APIServer 监听 etcd 集群关于该资源的状态并定义状态变化的处理逻辑
https://zhuanlan.zhihu.com/p/114659529