Kubernetes被称为容器集群的"调度/编排器",但我不知道这是什么意思。在阅读了Kubernetes网站和(模糊的)GitHub wiki之后,我最好的理解是它会找出哪些虚拟机可以运行您的Docker容器,然后在那里部署它们。但这只是我的猜测,我没有在他们的文档中见到任何具体的措辞支持这一点。
那么Kubernetes确切是什么,以及它解决了哪些具体问题?
Kubernetes被称为容器集群的"调度/编排器",但我不知道这是什么意思。在阅读了Kubernetes网站和(模糊的)GitHub wiki之后,我最好的理解是它会找出哪些虚拟机可以运行您的Docker容器,然后在那里部署它们。但这只是我的猜测,我没有在他们的文档中见到任何具体的措辞支持这一点。
那么Kubernetes确切是什么,以及它解决了哪些具体问题?
Kubernetes的目的是让您更轻松地在一组机器上组织和安排应用程序。从高层次来看,它是集群的操作系统。
基本上,它允许您不必担心数据中心中每个应用程序运行在哪个特定的机器上。此外,它还提供了用于健康检查和复制应用程序的通用基元,在这些机器上以及服务中进行布线,以便将应用程序连接到微服务中,使得应用程序中的每个层与其他层分离,以便您可以独立地扩展/更新/维护它们。
虽然在应用程序层面上也可能做到许多这些事情,但这些解决方案往往是一次性的和脆弱的,最好有关注点分离,其中一个编排系统关注如何运行您的应用程序,而您关注构成应用程序的代码。
正如您从其Github页面所了解的:
Kubernetes是一个开源系统,用于管理跨多个主机的容器化应用程序,并提供部署、维护和扩展应用程序的基本机制。
Kubernetes是:
lean: lightweight, simple, accessible portable: public, private, hybrid, multi cloud extensible: modular, pluggable, hookable, composable self-healing: auto-placement, auto-restart, auto-replication
Kubernetes是基于谷歌在生产环境中运行十多年的经验,结合社区最佳实践和思想,构建而成的容器编排工具。
它可以兼容任何容器引擎,但目前似乎仅限于Docker。其架构中有一些重要的概念:
Kubernetes与以下概念配合使用:
集群是构建您的容器的计算资源。Kubernetes可以在任何地方运行!请查看入门指南,了解各种服务的说明。
Pods是具有共享卷的Docker容器的共同组合体。它们是可创建、调度和管理的最小可部署单元。Pods可以单独创建,但即使创建单个Pod也建议使用复制控制器。更多关于Pods的信息。
复制控制器管理Pods的生命周期。它们通过根据需要创建或销毁Pods,确保指定数量的Pods在任何给定时间运行。更多关于复制控制器的信息。
Services为一组Pod提供单一、稳定的名称和地址。它们作为基本的负载均衡器。更多关于Services的信息。
标签用于基于键值对组织和选择对象组。更多关于标签的信息。
因此,您可以将一组机器形成一个集群,在其中运行您的容器。您还可以定义一组提供服务的容器,类似于其他工具(如fig)(例如:webapp pod可以是rails服务器和postgres数据库)。您还有其他工具来确保同时运行一定数量的容器/ Pod,键值存储,一种内置负载均衡器等。
如果您了解coreos,则它是谷歌提供的非常相似的解决方案。Kubernetes还与Google Cloud Engine良好地集成。
如果您已经使用其他机制进行服务发现、密钥分发、负载均衡、监控等,当然可以继续使用它们,但我们旨在通过提供这些功能,使从现有IaaS和PaaS系统到Kubernetes的过渡变得容易。