Minikube、Kubernetes、Docker Compose、Docker Swarm等的区别

18

我对集群容器管理还不够熟悉,这个问题对于所有新手来说都是基础。

我已经阅读了一些文档,但我的理解仍然不太清晰,所以有任何线索可以帮助我理解吗?

  1. 有些地方提到,Minikube 用于在本地运行 Kubernetes。那么,如果我们想要在我四个节点的 Raspberry Pi 上维护集群管理,那么 Minikube 就不是一个选项了吗?
  2. Minikube 只支持单节点系统吗?
  3. Docker Compose 是一组指令和一个 YAML 文件,用于配置和启动多个 Docker 容器。我们可以使用它来启动不同主机上的容器吗?那么,对于简单的编排,我只需要调用第二个主机的容器,就不需要集群管理了,对吗?
  4. Docker Swarm 和 Kubernetes 之间有什么联系?它们都是独立的集群管理。在 Raspberry Pi 上使用 Kubernetes 是否高效?有什么问题吗?因为我被告知,在单个节点上使用 Kubernetes 会占用全部内存和 CPU 使用率,这是真的吗?
  5. 还有其他适用于 Raspberry Pi 的集群管理吗?

我认为这个 4-5 问题集会帮助我更好地了解。


1
Kubernetes和docker-swarm在某些方面相似。 - prisar
6个回答

25

假设您的目标是在多个基于Raspberry Pi的节点上运行一组容器:

  • Minikube并不适合。它在Windows、MacOS或Linux上启动一个单独的虚拟机,并在其中安装Kubernetes集群。它通常由开发人员用于在笔记本电脑或台式机上快速启动集群以进行开发和测试。

  • Docker Compose 是一种管理相关容器集合的系统。例如,如果您有一个Web服务器和数据库需要一起管理,可以将它们放在一个Docker Compose文件中。

  • Docker Swarm是一种跨多个主机管理容器集合的系统。它本质上是Kubernetes的替代方案。它比Kubernetes功能少,但设置更简单。

如果您想要一个真正简单的多节点容器集群,我会说Docker Swarm是一个合理的选择。如果您明确想要尝试Kubernetes,在这里我会建议使用kubeadm。总体而言,Kubernetes的资源需求比Docker Swarm更高,因此可能不太适合它,尽管我知道有人成功地在Raspberry Pi上运行了Kubernetes集群。


1
如果我只想使用一个树莓派节点,性能趋势如何? - stackjohnny
如果你只是打算使用一个节点,除了用于学习目的外,使用Swarm或K8s没有太大意义(您不需要它们的编排能力)。我还没有尝试过,但我猜想k8s在单个Pi上可能会有问题,Swarm应该可以胜任。 - Rory McCune
哦,如果你只是想练习K8s,你可以在https://labs.play-with-k8s.com/上运行免费实例,并在https://labs.play-with-docker.com/上使用Swarm。 - Rory McCune
1
仅供参考,单实例Swarm相比于“标准docker或docker-compose”有许多好处:https://github.com/BretFisher/ama/issues/8 - Bret Fisher

14

Docker Compose Docker Compose是一个实用程序,可使用单个docker-compose up单个主机上启动多个docker容器。这使得一次启动多个容器变得更加容易,而不必执行多个docker run命令。

Docker swarm Docker swarm是Docker的原生容器编排器。 Docker swarm允许您在多台计算机上运行的docker容器集群中创建一个集群。它提供了诸如复制、扩展、自我修复(即当一个容器死掉时启动一个新容器)等功能。

Kubernetes 也是一个容器编排器。 Kubernetes和Docker swarm可以互相替代。他们都试图处理在集群中启动容器的管理。

Minikube 创建一个真正的Kubernetes集群需要有多个物理机或云平台机器。 如果某人只是想通过玩耍Kubernetes来学习,那么这并不总是方便。 为解决这个问题,Minikube允许您启动一个非常基本的Kubernetes集群,该集群由您机器上的单个VM组成,您可以使用它来玩耍Kubernetes。

Minikube不适用于生产或多节点集群。有许多工具可用于创建多节点Kubernetes集群,例如kubeadm


此外,有许多关于如何在树莓派上创建 Kubernetes 集群的教程和博客文章。例如:https://kubecloud.io/setup-a-kubernetes-1-9-0-raspberry-pi-cluster-on-raspbian-using-kubeadm-f8b3b85bc2d1 - yamenk
在树莓派上的单节点,哪个更好?有没有关于树莓派单节点的比较?Docker Swarm 还是 K8? - stackjohnny

5

容器是应用部署的未来。在Docker中,容器是最小的部署单位。Docker有三个组件:docker引擎用于运行单个容器,docker-compose用于在单个主机上运行多容器应用程序,docker-swarm用于在多台主机上运行多容器应用程序,它也是一个编排工具。

在Kubernetes中,最小的部署单位是Pod(由多个容器组成)。 Minikube是一个单节点集群,您可以在本地安装并尝试,测试和感受Kubernetes的功能。但是,您不能将其扩展到多台计算机。 Kubernetes是一个类似于Docker Swarm的编排工具,但与Docker Swarm相比在功能、扩展性、弹性和安全方面更为突出。

您可以分析并考虑哪种工具适合您的要求。每个工具都有其优点或缺点,例如Docker Swarm非常适合管理小型集群,而Kubernetes更适合大型集群。还有另一个编排工具Mesos,它也很受欢迎,并在最大规模的集群中使用。
看看这个,选择您的冒险,但这只是一个通用的比喻,仅用于理解,因为所有三种技术都在快速发展。


1
Apache YARN和Hashicorp Nomad也存在于Docker调度器领域。 - OneCricketeer

3

我感觉你主要是在寻求确认,如果可以的话,我很乐意帮助你。

  1. 是的,minikube只能在本地使用。
  2. 是的,minikube旨在作为单节点使用。
  3. Docker-compose并不像swarm和Kubernetes一样是一个编排系统。它有助于在单个主机上运行相关容器,但不用于多主机。
  4. Kubernetes和Docker Swarm都是容器编排系统。这些系统擅长管理扩展,但它们有与之相关的开销,因此更适合于多节点。
  5. 我不知道树莓派的编排选项范围,但是有一些Kubernetes示例,例如使用Kubernetes和一些树莓派构建自己的云

1
对于树莓派,您可以在一个或多个树莓派上使用Docker Swarm模式。您甚至可以在Docker for Windows / Mac上运行ARM仿真进行测试,然后再尝试直接在树莓派上运行它。Kubernetes也一样,因为它现在内置在Docker for Windows / Mac中(不需要minikube)。
Alex Ellis有一个关于树莓派和Docker的好博客,链接1,这篇文章也可能有所帮助链接2

0
  1. minikube 是一个选项吗?

在树莓派上进行集群管理的主要选择是:Docker Swarm k3smicrok8s。我发现使用 RPi 3Bs,Docker Swarm 最容易设置和使用,并且对我的目的来说足够了。Kubernetes 选项也相当简单。

设置指南:

Docker Swarm

k3s

microk8s

  1. Minikube是否只支持单节点系统?

不确定。

  1. 我们可以使用Docker Compose YAML文件来启动不同主机上的容器吗?

是的,Docker Swarm stack/stack-deploy 是在多个主机上运行服务的一种方式:

当在集群模式下运行Docker Engine时,您可以使用docker stack deploy将完整的应用程序堆栈部署到群集中。deploy命令接受以Compose文件形式的堆栈描述。

  1. Docker Swarm和Kubernetes之间有什么联系?

根据Docker文档:

Kubernetes服务和Swarm服务非常不同!尽管名称相似,但这两个编排器对“服务”一词的含义有着非常不同的理解。在Swarm中,服务提供调度和网络设施,创建容器并提供工具来将流量路由到它们。在Kubernetes中,调度和网络是分别处理的:部署(或其他控制器)处理容器作为Pod的调度,而服务仅负责为这些Pod添加网络功能。
5. 树莓派是否有其他集群管理方式?
请参见问题1。还有另一种“原始”的方法,即创建一个脚本,将dockerfiles复制到目标主机,然后依次通过ssh连接到主机并运行它们。

树莓派的Watch-it:

我发现我需要安装额外模块(在Ubuntu,3B上)才能使群集模式无缝工作:

sudo apt install linux-modules-extra-raspi


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接