我正在尝试学习Kubernetes将我的微服务解决方案推向云中的一些Kubernetes(例如Azure Kubernetes服务等)
作为其中的一部分,我试图理解主要概念,特别是围绕Pods
+ Workers
和(在yml文件中)Pods
+ Services
。为此,我试图将我在docker-compose
文件中的内容与新概念进行比较。
我目前有一个docker-compose.yml文件,其中包含大约10个图像。我已将解决方案分成两个“网络”:frontend
和backend
。 backend
网络包含3个微服务,无法通过浏览器访问。 frontend
网络包含一个反向代理(又名.Traefik,就像nginx),它用于将所有请求路由到适当的backend
微服务和一个简单的SPA Web应用程序。所有的作品100%真棒。
每个后端微服务至少有以下之一:
所以这意味着,如果需要,我可以扩展WebApi主机..但我永远不应该扩展后台任务主机。
这是解决方案的简单图表:
因此,如果SPA应用尝试使用以下路由请求某些数据:
https://api.myapp.com/account/1
这将击中反向代理并匹配规则然后转发到<microservice b>/account/1
所以从这里开始,我正在尝试学习如何基于这些docker-compose概念编写Kubernetes部署文件。
Pod
s放入Node
。例如,后台任务主机应该进入一个Node
,因为它们不应该缩放。此外,该节点的硬件要求非常小。虽然Web Api
应该进入另一个Node
所以他们可以被复制/扩大如果我在上面的理解中走上了正确的道路,那么我会有很多节点和播放器...感觉......很奇怪?
pod是Workload的单元,有一个或多个容器。正好一个容器是正常的。您可以通过更改副本集(或部署)中的Pod副本数来扩展该工作负载。
Pod主要是一种会计结构,与基础泊坞程序没有直接平行。它类似于docker-compose的服务。一个pod在创建后几乎是不可变的。像kubernetes中的每个资源一样,pod是所需状态的声明 - 容器在某处运行。 pod中定义的所有容器一起安排并共享资源(IP,内存限制,磁盘卷等)。
ReplicaSet中的所有Pod都是可替换的和凡人的 - 可以由ReplicaSet中的任何pod提供请求,并且可以随时替换任何pod。每个pod都有自己的IP,但替换pod可能会获得不同的IP。如果你有一个pod的多个副本,他们将拥有不同的IP。您不想管理或跟踪pod IP。 Kubernetes服务提供发现(如何找到这些pod的IP)和路由(连接到任何Ready pod而不关心其身份)和负载平衡(在该组Pod上循环)。
节点是运行内核,kubelet和dockerd的计算机器(VM或物理)。 (这有点简化。存在其他容器运行时而不仅仅是dockerd,而virtual-kubelet项目旨在将这个假设转变为头脑。)
所有pod都在节点上预定。当在节点上安排pod(带容器)时,负责在该节点上运行的kubelet会执行操作。 kubelet与dockerd交谈以启动容器。
在节点上安排后,pod不会移动到另一个节点。然而,节点也是可替代的和凡人的。如果节点出现故障或正在退役,则将逐出/终止/删除该节点。如果该Pod由ReplicaSet(或部署)创建,则ReplicaSet Controller将创建该Pod的新副本,以便在其他位置进行调度。
您通常在同一节点+ kubelet + dockerd上启动许多(1-100)pods +容器。如果你有更多的pod(或者他们需要大量的cpu / ram / io),你需要更多的节点。因此节点也是规模的单位,尽管非常间接地与web-app相关。
您通常不关心安排了哪个节点。你让kubernetes决定。