Microservices in Golang - Part7
内容提要:Kubernetes
原作者:Ewan Valentine
原文链接:https://ewanvalentine.io/microservices-in-golang-part-8/
引言
前文中,我们使用了 micro 工具包中的 RPC 代理网关,使得从外部调用 RPC 方法成为可能,以此为基础,我们构建了一个简单的 web 端用户界面
在原本系列的第七章中,作者介绍了如何使用 Terraform 对 IaaS ( 如 Google Cloud 等) 上的实例进行编排管理,不过由于译者日常使用的是服务器的集群,且考虑到网络和费用状况,这章的内容其实帮助不大,有兴趣的可以参考原文。
综上,直接进入系列第八章的内容 —— 将服务迁移到 Kubernetes。这其实也是译者学习与翻译此系列文章的出发点。
Kubernetes
Kubernetes 是一个开源的容器编排框架,它与平台无关,这意味着你可以在本地机器上、AWS 上、谷歌云上或者其他任何地方运行。Kubernetes 使用户可以通过声明式的配置方法控制容器组并定义它们的网络规则。
你只需要写一个 yaml 或 json 文件就可以 描述一个容器运行的状态与运行的位置。你可以定义网络规则,比如说通过哪个端口转发消息。同样的,Kubernetes 还为我们提供了服务发现的功能。
Kubernetes 是云计算场景中最重要的补充之一,它迅速发展成为容器编排领域的事实选择。所以,这一点是很好理解的。
安装
译者:
不管是在
gcloud
还是阿里云
上,云服务厂商都提供了完善的 Kubernetes 集群解决方案。与作者不同的是,译者采用kubeadm
在自己的服务集群上完成部署,可以参见此文。由于采取的方案不同,在翻译过程中会对原文进行相应的修改。
这时运行:
1 | $ kubectl get pods |
你会发现 No resources found
,这是由于目前我们尚未部署任何容器。首先考虑到的应该是安装一个 MongoDB 的实例。一般来讲,你最好为每个服务分别部署一个 MongoDB 实例或者其他数据库应用实例,以做到服务层级的隔离。
但是在这个例子中,我们稍稍违背一下这个原则,使用一个数据库作为数据中心实例。当然了,在实际的应用场景中,单点应用总是面临不可用的风险,你可能考虑将你的数据库实例拆分出来,使之更加符合你的服务,这也是可以的。
接下来考虑的就是部署我们的服务了,vessel-service
, user-service
, consignment-service
, email-service
这些就已经足够了。
服务部署
首先以 MongDB 作为第一个部署的服务,deployment 文件会放在 shippy-infrasturcture 的仓库中,我没有将这些文件上传到 Github 上,因为里面包含了很多隐私数据 :( 不过我会给你们完整的 deployment 文件的。
首先我们需要
总结
好的,这就是第七节的所有内容了!
任何漏洞,错误或者反馈,欢迎你通过邮件[告诉我](mailto: ewan.valentine89@gmail.com)。
觉得这系列文章对您有帮助,可以请原作者喝杯咖啡,Cheers! https://monzo.me/ewanvalentine.
或者通过 Patreon 来支持原作者。