federation--kubernetes集群联邦的实现

2018-07-17  本文已影响0人  April_Luv_Choco

kubernetes默认的模式,是以处于同zone同cloud provider的单cluster形式,对外提供服务。

但是,有一些场景不是单一cluster模式适用的,比如提供全球服务时的低延迟、故障隔离(避免单节点故障)、高扩容(单节点内有一定限制)、以及为了数据安全而采用的混合云部署策略。这个时候,就需要用到federation了。

federation在 https://github.com/kubernetes/federation可以查看,属于一个独立于kubernetes的项目。从架构上来看,它属于kubernetes的上面一层。启用kubefed不会影响和改变cluster内部的任何工作。

单一的cluster对外提供服务的entrypoint是唯一的,所有的服务请求都由api server进来。然后,才有api server同controller manager交互、并与worker node通信等一系列后续操作。那么,federation这一层,所采用的结构其实是类似的。首先,有一个fcp的概念。fcp, federation control panel,它由三部分构成:federation api server、federation control manager和kubefed(CLI工具)。

// cmd / kubefed / app / kubefed.go

这里指定了两个镜像,etcd和fcp

// cmd / genfeddocs

针对不同的对象生成文档,对象类型包括:federation api server、federation control manager和kubefed。目前作用没有细究。

// cmd / fcp

server.go里面定义一个server的标准类型,api server、control manager server都基于这个类型来实例化。

type HyperKubestruct {

Name string// The executable name, used for help and soft-link invocation

  Long string// A long description of the binary.  It will be world wrapped before output.

  servers            []Server

baseFlags          *pflag.FlagSet

out                io.Writer

helpFlagVal        bool

makeSymlinksFlagVal bool

}

基于HyperKube类型实例化fcp,再把api server和control manager server都添加到fcp.servers 里,同时把fcp添加到该server的hk里。这样,fcp和server的关系就是双向的,通过一个都能找到另一个。

dns server目前只支持coredns、azuredns和aws route53。

上一篇下一篇

猜你喜欢

热点阅读