docker - 试图了解 Kubernetes 工作节点和 Pod 与 Docker 的比较 "Service"

标签 docker kubernetes microservices

我正在尝试学习 Kubernetes 以将我的微服务解决方案推送到云中的某些 Kubernetes(例如 Azure Kubernetes 服务等)

作为其中的一部分,我试图理解主要概念,特别是关于 Pods 的概念。 + Workers和(在 yml 文件中)Pods + Services .为此,我尝试比较我的 docker-compose 中的内容。反对新概念的文件。

上下文

我目前有一个包含大约 10 个图像的 docker-compose.yml 文件。我已将解决方案分成两个“网络”:frontendbackend . backend网络包含 3 个微服务,根本无法通过浏览器访问。 frontend网络包含一个反向代理(又名 Traefik,就像 nginx),用于将所有请求路由到适当的 backend微服务和一个简单的 SPA Web 应用程序。所有作品都 100% 棒极了。

每个后端微服务至少有以下之一:

  • Web API 主机
  • 后台任务主持

所以这意味着,如果需要,我可以扩展 WebApi 主机......但我永远不应该扩展后台任务主机。

这是解决方案的简单图表:

enter image description here

因此,如果 SPA 应用尝试使用以下路径请求一些数据:

https://api.myapp.com/account/1这将命中反向代理并匹配规则然后转发到 <microservice b>/account/1

所以从这里开始,我正在尝试学习如何根据这些 docker-compose 概念编写 Kubernetes 部署文件。

问题

  • 每个“Pod”都有自己的 IP,因此我应该为每个容器创建一个 Pod。 (是的,一个 Pod 可以有多个容器,对我来说,这就像在说“在同一台机器上安装这些软件产品”)
  • “工作节点”是我们复制/扩展的对象,因此我们应该将 Pod进入 Node基于缩放场景。例如,后台任务主机应该进入一个 Node因为它们不应该被缩放。此外,该节点的硬件要求非常小。而 Web Api的应该进入另一个Node这样它们就可以被复制/扩展

如果我按照上面的理解走在正确的道路上,那么我将有很多节点和 pod...这感觉...很奇怪?

最佳答案

pod是Workload的单位,有一个或多个container。恰好一个容器是正常的。您可以通过更改 ReplicaSet(或 Deployment)中的 Pod 副本数量来扩展该工作负载。

Pod 主要是一种会计结构,与基础 docker 没有直接的平行关系。类似于docker-compose的Service。 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 将被逐出/终止/删除。如果该 pod 是由 ReplicaSet(或 Deployment)创建的,那么 ReplicaSet Controller 将创建该 pod 的新副本以安排在其他地方。

您通常会在同一个节点+kubelet+dockerd 上启动许多 (1-100) 个 pod+容器。如果你有比这更多的 pod(或者它们需要大量的 cpu/ram/io),你需要更多的节点。因此,节点也是一个规模单位,尽管对于网络应用来说是非常间接的。

您通常不关心 pod 被安排在哪个节点上。你让 kubernetes 决定。

关于docker - 试图了解 Kubernetes 工作节点和 Pod 与 Docker 的比较 "Service",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55778449/

相关文章:

python - Docker组成了没有此类文件或目录的错误。用于Ubuntu中的.sh文件

android - ionic cordova android构建失败,通过说 “Gradle build daemon got exited”在大厅ci

dns - 对kube-dns pod进行故障排除:WAITING初始化的超时

kubernetes - 带有入口示例的 Minikube 不起作用

spring - 通过 Eureka Server 访问微服务

docker - Gitlab CI with docker+machine - 使用多个容器来测试应用程序

cassandra - 在 Kubernetes 上备份和恢复 Cassandra

c# - Ocelot API网关错误: No connection could be made because the target machine actively refused it

mysql - 如何在不在主机上发布端口的情况下访问在 docker 容器(由 Rancher 管理)中运行的 MySQL?

docker - 尝试与主机共享卷时出现docker错误