Release
Last updated
Last updated
首先我们来看看一个典型的 Eru 集群结构是怎样的,如下图:
我们可以看到,一个 Eru 集群是由一组 eru-core 控制多个 pod,每个 pod 中有多个 node,通过这些 node 来部署目标容器/虚拟机。外部流量可以通过 elb 导入到集群中,也可以通过其他的方式。操作人员只需要关注 cli 就好了。那么我们如何部署一个真实的集群呢?
对于 Eru 而言必不可少的只有 etcd 和 docker,其中 etcd 承担着数据持久化的角色,类似于 MySQL。因此无论你采用何种 etcd 部署结构,你都需要保证有一个可用于生产环境的 etcd (集群)。这里你可以参考官方的部署文档。
然后,将需要接入 Eru 的 node 都预先准备好上面的 docker。需要配置的有两项东西,一项是为了保证 core 与 docker daemon 的通讯安全,我们推荐使用 tls 来配置 docker daemon 。另外一项需要注意的是 docker daemon 需要开启 cluster-store
, 这个选项会通过 etcd 将我们在其上面配置的 SDN 信息共享到其他的 node,如果你有使用 SDN 的话,一定不要忘记配置它。具体可以参考 quickstart/docker.sh 和 dockerd配置,在 quickstart 的脚本中我们把 docker daemon 的 cluster-store 指向了那个预先安装的 etcd,并启用了 tls,在生产环境中亦是如此。
在我们自己用的集群中是使用 Calico 作为 SDN provider 的,如果你也需要用可以参考calico.sh 的初始化步骤。要注意的是,docker network create
只需要在任意节点运行一次即可,并不需要运行多次。只要运行了一次之后,以同一个 etcd 作 cluster-store 的 docker daemon 都会知道有了这么一个网络。
另外如果有自己定制化 Calico SDN ACL 需求的,可以参考其文档。
现在我们需要找一个地方运行一个或者一组 eru-core。对于高可用的系统而言,我们建议跑多个 eru-core 并在之上通过 LVS/haproxy 的组件来保证起服务高可用。eru-core 在整个集群没有一个 eru-core 的时候是无法完成自举的,因此推荐使用 rpm 的方式或者通过原始的 docker run 的方式启动第一个 eru-core。
无论怎样一旦配置好 etcd 并启动 eru-core 之后,eru 集群就可以说准备好了。
在这一步你需要有一个地方指定 cli 命令,如果是在 CentOS 7 下可以通过 rpm 来安装 eru cli 的 rpm 包(当然你需要先自己打好,可以参考我们的 make-rpm)。另外一种方式则是使用已有的镜像来执行 cli 命令。
假设用镜像的前提下,可以通过以下命令创建 pod:
如果 cli
和 core
并非一台机器的话,传入 ERU
变量指向正确的地址即可。
在创建完 pod 之后,可以通过以下命令增加 node:
在这里我们假定了 cli
所运行的机器就是所需要增加的节点,如果是远程操作的话可以通过 --nodename
等参数来指定,具体的可以使用 cli node add --help
查看。通过 cli
工具你能很方便的组建起一个真实的 Pod-Node 结构的集群。我们的 Node 支持 Label
,因此在注册的时候可以通过增加这些元信息来进行部署时的节点过滤。
在准备好 core
和 cli
后,我们就可以开始部署 agent
了。对于 eru 而言,agent 其实不是必须的,当然了如果你需要这些东西的时候,agent 就必须部署上去了。
logs forward with meta data
metrics collect
healthcheck
dynamically update container status like publish ip
你可以通过手动部署 agent 也可以通过镜像部署,在 quickstart 中我们是通过 cli 自举部署了 agent,具体可以参考这里。
测试的时候可以使用 nc 来模拟 tcp 服务,在正式生产中如果你有对应的 logs
和 metrics
服务那是极好不过了。但要记得修改 core 和 agent 对应的配置文件。
最后,ENJOY run container by Eru now!