1.4.1 微服务打包和部署
当使用基于微服务的架构时,你将拥有许多微服务。通常,这些微服务可以独立开发、独立部署。打包机制就是封装成容器,每个微服务都会有一个Dockerfile,生成的镜像表示该微服务的部署单元。在Kubernetes中,你的微服务镜像将在Pod内运行(可能与其他容器一起)。但是,在节点上隔离运行的Pod的弹性并不是很高。如果节点上的kubelet进程崩溃,它会重新启动Pod的容器,但是如果节点本身发生故障,那么Pod就会消失。Kubernetes通过基于Pod实现的抽象和资源来解决这些问题。
ReplicaSet是具有一定数量副本的Pod集合。创建ReplicaSet时,Kubernetes将确保始终有指定数量的Pod在集群中运行。部署资源会进一步提供和你考虑微服务时的方式完全一致的抽象。当你准备好新版本的微服务时,需要对其进行部署。如下是一个Kubernetes部署清单:
这是一个YAML文件(https://yaml.org/),其中包含一些Kubernetes资源的通用字段以及某些特定于部署的字段,接下来让我们逐一查看。这里介绍的所有内容几乎都适用于其他Kubernetes资源。
·apiVersion字段标记Kubernetes资源版本。Kubernetes API服务器的特定版本(例如V1.13.0)可以与不同资源的不同版本一起使用。资源版本包括两部分:API组(在本例中为apps)和版本号(v1),版本号可能包含alpha或beta字样:
·kind字段指定我们要处理的资源或API对象,你将在本章及后面的章节中遇到许多不同类型的资源:
·metadata部分包含资源名称(nginx)和标签(字符串键值对)。该名称用于引用此特定资源。标签允许Kubernetes对共享相同标签的一组资源进行操作,它非常有用且可以灵活管理。在示例中只有一个标签(app:nginx):
·接下来是spec字段,这是一个ReplicaSet的spec规约。你可以直接创建一个ReplicaSet,但那样的话它就变成了静态的,而使用部署的目的就是动态地管理副本集。ReplicaSet规格中包含副本数(示例中是3)、一个带有matchLabels的选择器(也是app:nginx),以及一个Pod模板。ReplicaSet将管理具有与matchLabels匹配的标签的容器:
·最后看一下Pod模板。该模板分为两部分:metadata和spec,metadata是你指定标签的地方,spec描述了Pod中的容器containers。Pod中可能会有一个或多个容器,示例中的Pod仅包含一个容器。容器的关键字段是镜像(通常是Docker镜像),微服务一般就打包在该镜像中,也是我们要运行的代码。此外,还有一个名称(nginx)和一组端口:
Kubernetes还提供更多可选字段。如果你想更深入地了解,请参考部署的API链接:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/#deployment-v1-apps。