百度开源网关BFE源代码阅读1之启动
BFE是一个功能强大的网关。 因为BFE是用Golang写的,所以值得一看,但是它的用户体验实在是一言难尽。
BFE是一个功能强大的网关。 因为BFE是用Golang写的,所以值得一看,但是它的用户体验实在是一言难尽。
go-ethereum版本: v1.12.2
由于以太坊(ethereum)在不断的发展, 所以协议也在不断的改进,如果你看过《用Go来做以太坊开发》,你会发现其中关于查询交易的那一节中的获取交易的发送者From
这部分代码在最新版本中已经失效了,本文主要演示当前以太坊(ethereum)最新版本获取的获取方式。
kubernetes代码版本: v1.20.2
前一节大致看了一下apiserver 的启动流程,以及组成kube-apiserver
的三个组件,这一节看看三个组件都会用到的一个非常重要的对象GenericAPIServer
, 它是一个HTTP Server的抽象, 虽然这么说很抽象。它会提供注册路由的入口以及各种钩子函数的注册入口。
kubernetes代码版本: v1.20.2
个人认为kube-apiserver
是k8s中最核心的组件,承上启下,无论是k8s其他组件还是是外部客户端都需要跟kube-apiserver
组件进行交互,kube-apiserver
负责接受请求并将数据持久化到后端存储(一般来说就是etcd.)。
书接上回,继续看kubectl 删除, 更新, 查询操作的源代码。因为之前已经介绍了kubectl一些常用的设计模式和代码结构,所以本文会比较快的阅读其他操作的代码。
如果不知道怎么用client-go,那就看看kubectl的代码吧,kubectl除了是一个比较优秀的命令行工具之外,还提供了比较好的代码实现,通过看kubectl的代码我们可以抄到很多有用的代码片段。
只要读k8s源代码一定会读informer的代码的,因为informer相当优秀,大多数分布式项目(比如OpenStack)在解决组件间通信的问题时都会选择如kafka,rabbitmaq之类的消息队列,但是k8s不走寻常路,选择了自己解决,解决的方案是informer。
client-go提供了许多有用的工具,其中就包括选举,通过选举的功能,我们可以同时运行多个业务实例,多个实例之间互为备份,并且同一时刻只有一个实例运行。
虽然k8s的发现客户端可以实时的获取k8s集群的所有资源,但是并不是直接面向用户的接口,因为解析这些资源组版本是一个乏味和无趣的过程,所以在此基础上client-go提供了RESTMapper来帮助用户映射和发现要找的资源。
之前介绍了client-go的静态客户端,动态客户端,本文主要讲解一下发现客户端的源代码,发现客户端用于发现k8s集群现有的资源,包括但不限于内置资源,可以获取当时k8s集群中的所有资源,通过发现客户端我们可以确定当前器群存在哪些资源及其对应的版本。