加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 移动互联 > 评测 > 正文

微服务架构在Kubernetes上的实现

发布时间:2019-07-17 11:16:08 所属栏目:评测 来源:新牛哥
导读:【编者的话】本文是微服务网格系列的第二部分,通过Kubernetes这个当前最流行的微服务部署平台,来具体讲解微服务的部署过程,让用户对微服务有具体认知,同时为后续结合Istio部署更复杂服务打下基
副标题[/!--empirenews.page--]

【编者的话】本文是微服务网格系列的第二部分,通过Kubernetes这个当前最流行的微服务部署平台,来具体讲解微服务的部署过程,让用户对微服务有具体认知,同时为后续结合Istio部署更复杂服务打下基础。

在上一篇文章中,我们讨论了最近的微服务趋势,以及伴随微服务架构可能出现的一些复杂问题。在接下来的几周内,我们将深入探讨这个问题。我们将探讨不同设计选择中固有的权衡,以及可以采取哪些措施来缓解这些问题。

微服务架构在Kubernetes上的实现

然而,在深入之前,我认为花一点时间来了解当今微服务中的最新技术状态是有意义的。我们首先回顾一下领先的容器管理和服务编排框架Kubernetes。 如今,Kubernetes和微服务几乎是同义词,所以最好彻底了解它们是如何组合在一起的。

Kubernetes

与微服务本身非常相似,容器近年来已成为现代可扩展架构中不可或缺的一部分。与微服务一样,容器已经流行起来,因为它们为开发过程提供了真正的好处:它们可靠,易于扩展,并提供了一个很好的抽象,隔离了Web服务的核心组件。如果你想和更多Kubernetes技术专家交流,可以加我微信liyingjiese,备注『加群』。群里每周都有全球各大公司的最佳实践以及行业最新动态。

特别是,一种容器化技术已远远超过其他技术。 这是正确的,我们的微服务之旅的下一站是看看Kubernetes和Docker,它是现代微服务设施的主力。简单地说,Kubernetes是现代基于容器的DevOps和微服务以及容器携手并进的黄金标准。

02.png

随着容器化技术的兴起,有几种竞争技术可用于管理大型Docker部署和基于容器的服务。你可能还记得其中一些退役的解决方案:Docker Swarm,Apache Mesos,OpenStack Magnum等。然而,现在Kubernetes已经淘汰了竞争对手。它是唯一的AWS,Azure,Google Cloud原生自带,同时RedHat和Pivotal等许多私有云供应商也提供的容器化解决方案。

Kubernetes能够如此迅速地获得如此多的优势,根因在于它能够将配置与编排分开。这种复杂程度应该不足为奇,因为Kubernetes来自谷歌的内部项目Borg,它是谷歌在分布式系统上的数十年经验总结。使用Kubernetes,你可以指定服务的外观,实例数,冗余类型,服务所在位置。然后,该工具自动计算从现状到创建该服务需要进行哪些更改。可以把它想象成SQL,你没有指定数据库如何添加或转换每个行。你可以指定数据的外观,数据库会指出如何实现数据。 Kubernetes也是一样的。

Kubernetes特点

Kubernetes提供的是将容器视为服务定义的能力。Kubernetes可以处理纯容器。即使你想在不进入微服务领域的情况下只部署容器,Kubernetes在管理和部署方面也能为你提供很多帮助。你在群集中的服务器上安装Kubernetes软件,Kubernetes主进程将自动部署你的软件。

除了基本的容器外,Kubernetes还可以使用它所称的Pod。 Pod是由一个或多个服务组成的单独定义。 Pod可以包含从单独运行的单个服务器到完整的多容器服务,例如数据库容器与键值存储和一个包含在一起的http服务器相结合。 Pod是Kubernetes的基本构建块。

最后一个元素是服务。在Kubernetes中,服务就像是将Pod组合到应用程序中的配方。虽然Pod是具有生命周期的具体部署,但服务更抽象。它描述了一个单独的组件,如后端或数据库。

结合所有这些能力的是Kubernetes命令行工具kubectl。虽然Kubernetes提供的抽象很棒,但命令行工具非常强大,允许你使用kubectl命令描述对架构的复杂更改。总而言之,kubectl CLI工具包含近50种不同的命令,用于处理在修改基于容器的微服务部署过程中出现的所有情况(你总会出现出错的时候)。

动手实践一番

虽然高层次描述很有帮助,但实际上没有什么比实际部署Kubernetes服务能更好的理解它的了。我们在这里没有做任何高深的东西,只是展示如何部署一个简单的“Hello World”服务,但它应该是有益的。

我们在Go中编写了一个简单的服务器,用“Hello World”响应http请求。代码非常简单:

  1. package main 
  2. import ( 
  3. "fmt" 
  4. "log" 
  5. "net/http" 
  6. "os" 
  7. func handler(w http.ResponseWriter, r *http.Request) { 
  8. log.Print("Hello world received a request.") 
  9. version := os.Getenv("VERSION") 
  10. if version == "" { 
  11.   version = "v1" 
  12. log.Println(version) 
  13. fmt.Fprintf(w, "Hello world %sn",version) 
  14. func main() { 
  15. log.Print("Hello world sample started.") 
  16. http.HandleFunc("/api/hello", handler) 
  17. port := os.Getenv("PORT") 
  18. if port == "" { 
  19. port = "8080" 
  20. log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil)) 
  21. }  

运行它的第一步是将其构建到Docker容器中。为此,我们从基础Go Docker镜像开始构建以下Dockerfile。

  1. # Use the official Golang image to create a build artifact. 
  2. # https://hub.docker.com/_/golang 
  3. FROM golang as builder 
  4. # Copy local code to the container image. 
  5. WORKDIR /go/src/github.com/haseebh/hello-world 
  6. COPY . . 
  7. RUN go build -o helloworld-v1 main/helloworld-v1.go 
  8. # Use a Docker multi-stage build to create a lean production image. 
  9. # https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds 
  10. FROM alpine 
  11. COPY --from=builder /go/src/github.com/haseebh/hello-world-v1 /helloworld-v1 
  12. ENV PORT 8080 
  13. # Run the web service on container startup. 
  14. CMD ["/helloworld-v1"] 

(编辑:威海站长网)

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

热点阅读