加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 服务器 > 系统 > 正文

如何构建一个优秀的CAAS系统

发布时间:2021-06-02 00:42:08 所属栏目:系统 来源:互联网
导读:1. 用户镜像制作 既然是一个简单的CAAS系统,我们就不让用户上传代码或者使用第三方代码托管了,直接让他们制作镜像后提交给我们,为此我们需要搭建一个docker私

既然是一个简单的CAAS系统,我们就不让用户上传代码或者使用第三方代码托管了,直接让他们制作镜像后提交给我们,为此我们需要搭建一个docker私服来让用户上传镜像,假设用户上传的镜像遵循这种格式:docker私服地址/{appId}:{version},这对用户有一定要求,毕竟一些用户可能连docker是啥都不知道就更别奢望让他们编写dockerfile制作镜像交付给我们了。当然如果我们提供一些基础服务镜像(比如mysql服务,redis服务等)给用户那***了。

2. 启动用户镜像

有了用户制作的镜像,该是启动它的时候了

docker pull docker私服地址/{appId}:{version}  

docker run -d docker私服地址/{appId}:{version}  

启动方式很简单,但这并不是我们想要的,毕竟我们是要让用户能够访问到他部署的服务的,假如用户的服务是一个web服务,那你得暴露出用户的web服务端口,这需要我们确定容器的通信方案:

跟宿主机共用一个网络空间

发布一个容器端口,让docker随机选择一个未使用的高位端口

发布一个容器端口,并映射到宿主机上指定端口为外部路由服务

采用docker的'links'来允许容器间通信。 如果一个新容器链接到一个已有容器,新容器将会通过环境变量获得已有容器的链接信息,一个关联的容器将会获得它的对应连接信息,在它处理了那些变量后允许它自动连接。这样就使得同一个宿主机上的容器不需要知道对应服务的端口和地址,就可以直接进行通信

我们简单的CAAS系统暂时还用不到容器间通信,如果跟宿主机共用一个网络空间即--net="host"模式启动的话,那么如果有多个用户上传了镜像,他们的WEB服务端口都是8080,显然宿主机上只能启动一个8080端口,只能有一个用户的容器启动成功,其他的因为端口已经被占用导致启动失败,在这里我们选择第三种模式,选择指定的端口映射来发布容器,这也方便我们后面管理宿主机上的端口资源。OK,启动方式改成下面:

docker run -d -p 25701:8080 docker私服地址/{appId}:{version} 

为了不让某个用户的应用占用过多资源导致影响到整个宿主机上其他的应用,我们稍微对用户的资源进行下限制,比如限制用户应用容器的使用内存和CPU权重

docker run -d -p 25701:8080 -m 512M -c 1024 docker私服地址/{appId}:{version} 

为了能做到水平扩展,容器服务***是无状态的的,这样能更好的实现负载均衡和水平扩容。

应用启动成功,我们可以通过在宿主机上访问25701即可访问容器的8080端口服务

在写代码的时候我们通过来启动卸载容器,具体代码实现就不多说了。

3. 服务发现

容器启动成功后,用户该如何访问到他的容器服务呢,总不能提供宿主机IP给用户直接访问吧,这就需要我们构建一个服务发现组件了

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读