Kubernetes实际上做了什么?
Kubernetes被认为是一个容器集群“调度器/编排器”,但我不知道这意味着什么。 在阅读了Kubernetes网站和(模糊的)GitHub wiki之后,我能够最清楚地知道哪些虚拟机可用/能够运行Docker容器,然后在那里部署它们。 但是,这只是我的猜测,我没有看到他们的文件中有任何具体的措词来支持这一点。
那么Kubernetes究竟是什么,它解决了哪些具体的问题呢?
Kubernetes的目的是使整个机器组织和安排应用变得更加容易。 在较高的级别上,它是您的群集的操作系统。
基本上,它可以让你不用担心每个应用程序运行在数据中心的特定机器。 此外,它还提供了通用基元,用于在这些机器上进行运行状况检查和复制应用程序,以及将应用程序连接到微服务的服务,以便应用程序中的每个层与其他层分离,以便可以缩放/更新/维护它们独立。
尽pipe在应用程序层中可以做很多这样的事情,但是这样的解决scheme往往是一次性的和脆弱的,分离问题要好得多,编排系统担心如何运行应用程序,而且担心构成您的应用程序的代码。
当你从它的Github页面阅读:
Kubernetes是一个开放源代码系统,用于跨多个主机pipe理集装箱化应用程序,为应用程序的部署,维护和扩展提供基本的机制。
Kubernetes是:
lean: lightweight, simple, accessible portable: public, private, hybrid, multi cloud extensible: modular, pluggable, hookable, composable self-healing: auto-placement, auto-restart, auto-replication
Kubernetesbuild立在Google长达十五年的大规模生产工作经验的基础上,结合社区最佳的创意和实践。
对我来说,Kubernetes是Google的一个容器编排工具。 由于其devise,您可以实现与任何容器引擎的兼容性,但我认为现在它仅限于Docker。 其架构中有一些重要的概念:
Kubernetes使用以下概念:
集群是您的容器build立在其上的计算资源。 Kubernetes可以运行在任何地方! 有关各种服务的说明,请参阅入门指南。
Pods是一个具有共享卷的共同的Docker容器组。 它们是可以用Kubernetes创build,调度和pipe理的最小的可部署单元。 豆荚可以单独创build,但build议您使用一个复制控制器,即使创build一个豆荚。 更多关于豆荚。
复制控制器pipe理Pod的生命周期。 他们通过根据需要创build或者杀死豆荚来确保指定数量的豆荚在任何给定的时间运行。 更多关于复制控制器。
服务为一组吊舱提供一个稳定的名称和地址。 它们充当基本的负载平衡器。 更多关于服务。
标签用于根据键值对组织和select对象组。 更多关于标签。
所以,你有一组机器在你的容器运行时形成一个集群。 你也可以定义一组提供服务的容器,就像你使用其他工具(比如:webapp pod可以是rails服务器和postgres数据库)一样。 您还有其他工具可以确保同时运行一个服务的许多容器/容器,一个键值存储,一种内置的负载均衡器。
如果您对Coreos有所了解,那么这个解决scheme非常类似于Google。 Algo Kubernetes与Google Cloud Engine有很好的整合。
Kubernetes提供了与基础架构即服务API相同的function,但是针对dynamic调度的容器而不是虚拟机,以及平台即服务系统,但具有更大的灵活性,其中包括:
- 安装存储系统,
- 分发秘密,
- 应用健康检查,
- 复制应用程序实例,
- 水平自动缩放,
- 命名和发现,
- 负载均衡,
- 滚动更新,
- 资源监测,
- login访问和摄取,
- 支持自省和debugging,并且
- 身份和授权。
如果您已经使用其他机制来进行服务发现,秘密分发,负载均衡,监控等等,当然您可以继续使用它们,但是我们的目标是通过提供这一function,使现有的IaaS和PaaS系统能够轻松转换到Kubernetesfunction。