Documentation
¶
Overview ¶
Package kubernetes 提供基于 Kubernetes API 的服务注册与服务发现实现。
设计思路(对齐 etcd/consul 的能力边界): - 用 ConfigMap 充当“注册中心存储”,data 中每条记录保存一个 ServiceNode(JSON); - Register 负责写入/更新/删除对应 key;SustainLease 通过周期性刷新自身记录模拟租约心跳; - Discovery 负责读取 ConfigMap 并构建本地索引;Watcher 通过轮询刷新本地缓存。
约束说明: - 该实现使用 client-go 访问 Kubernetes API; - ServiceConf.Namespace 视为 Kubernetes namespace; - Meta.Env 用于区分不同环境,映射到 ConfigMap 名称(ff-registry-<env>)。
Index ¶
- func NewDiscover(client kubernetes.Interface, meta *micro.Meta, conf *micro.ServiceConf) (micro.Discovery, error)
- func NewRegister(client kubernetes.Interface, meta *micro.Meta, conf *micro.ServiceConf) (micro.Register, error)
- type DiscoverInstance
- type RegisterInstance
- func (s *RegisterInstance) Install(service *micro.ServiceNode) error
- func (s *RegisterInstance) SustainLease()
- func (s *RegisterInstance) Uninstall()
- func (s *RegisterInstance) WithLog(log *zap.Logger)
- func (s *RegisterInstance) WithRetryAfter(handle func())
- func (s *RegisterInstance) WithRetryBefore(handle func())
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func NewDiscover ¶
func NewDiscover(client kubernetes.Interface, meta *micro.Meta, conf *micro.ServiceConf) (micro.Discovery, error)
NewDiscover 创建基于 Kubernetes 的服务发现实例。
func NewRegister ¶
func NewRegister(client kubernetes.Interface, meta *micro.Meta, conf *micro.ServiceConf) (micro.Register, error)
NewRegister 创建基于 Kubernetes 的服务注册实例。
约定: - conf.Namespace 视为 Kubernetes namespace; - ConfigMap 名称固定为 ff-registry-<env>(env 来自 meta.Env)。
Types ¶
type DiscoverInstance ¶
type DiscoverInstance struct {
// contains filtered or unexported fields
}
DiscoverInstance 基于 Kubernetes ConfigMap 的服务发现实例。
本地索引模型对齐 etcd/consul: - service: appId -> 节点列表(主表) - method: method -> appId(派生索引,用于 GetService 快速定位)
Watcher 采用轮询方式刷新: - 使用 ConfigMap.metadata.resourceVersion 判断是否有变化; - 有变化时重建索引,保证 method 与 service 一致。
func (*DiscoverInstance) GetService ¶
func (s *DiscoverInstance) GetService(sm string) ([]*micro.ServiceNode, error)
GetService 根据 gRPC 方法名获取对应的服务节点列表。
func (*DiscoverInstance) Watcher ¶
func (s *DiscoverInstance) Watcher()
Watcher 启动轮询监听并持续刷新本地缓存。 该方法会阻塞执行,通常在单独的 goroutine 中调用。
func (*DiscoverInstance) WithLog ¶
func (s *DiscoverInstance) WithLog(log *zap.Logger)
WithLog 设置内部日志输出回调。
type RegisterInstance ¶
type RegisterInstance struct {
// contains filtered or unexported fields
}
RegisterInstance 基于 Kubernetes ConfigMap 的服务注册实例。
语义对齐: - etcd 的 “key + lease” 模型 => ConfigMap.data 的 “key + 心跳更新时间” 模型; - SustainLease 周期性刷新自身记录,模拟租约保活; - Uninstall 删除自身 key,模拟租约撤销。
func (*RegisterInstance) Install ¶
func (s *RegisterInstance) Install(service *micro.ServiceNode) error
Install 补齐 ServiceNode 元信息并写入 ConfigMap.data。
func (*RegisterInstance) SustainLease ¶
func (s *RegisterInstance) SustainLease()
SustainLease 通过周期性刷新自身记录模拟“租约心跳”。
func (*RegisterInstance) Uninstall ¶
func (s *RegisterInstance) Uninstall()
Uninstall 删除本实例在 ConfigMap.data 中注册的 key,并停止心跳。
func (*RegisterInstance) WithLog ¶
func (s *RegisterInstance) WithLog(log *zap.Logger)
WithLog 设置内部日志输出回调。
func (*RegisterInstance) WithRetryAfter ¶
func (s *RegisterInstance) WithRetryAfter(handle func())
WithRetryAfter 设置重试成功后回调。
func (*RegisterInstance) WithRetryBefore ¶
func (s *RegisterInstance) WithRetryBefore(handle func())
WithRetryBefore 设置重试前回调。