您一定听说过 Kubernetes,但它到底是什么?您能否向上司解释清楚它是什么?或者向您的同事?或者向您的小狗?
Kubernetes 是 Google 开发的一个开源容器管理工具(可在 GitHub 中获取源代码),人们使用它已有 15 年。但这意味着什么?为什么您应该关注它?
我们首先列出在容器集群中运行应用程序的一些问题。然后展示 Kubernetes 不是什么。最后,展示 Kubernetes 如何解决前面提出的问题。
完成学习后,您应该能够清楚地解释 Kubernetes,让您的上司和同事对您佩服到五体投地。
问题
本节将介绍在集群化环境中运行基于容器的应用程序时您将面临的 3 个问题。任何解决方案都需要解决这些问题(剧透一下:Kubernetes 可以做到!)。
调度
您已经获得了这个卓越的基于容器的应用程序?太棒了!现在您需要确保它在计划的正确的时间和位置运行。让您的应用程序在集群中正确的机器上运行很重要,但集群中的所有机器不一定都是一样的。
负载平衡
您的应用程序在正常运行。很好!现在,您需要确保客户端的负载均衡地分布在集群中的节点上。应用程序要以最佳的方式使用每个主机上的资源来处理客户端负载,这很重要。您也不想让一些容器全速运行,而其他容器却坐视不管吧。
应用程序扩展
您的容器正在运行,而且客户端负载在它们之间得到了很好的平衡。太好了!现在,您需要能让一些容器上线来处理负载(和需求高峰),并在不再需要它们时终止它们。能够根据客户端的需求来处理负载高峰是非常重要的。
集群管理和监控
现在,您的应用程序正在这个巨大的集群上高效运行,您需要管理它。您需要定义、启动、扩展、平衡负载和监控正在运行的容器的健康情况。这不是一项轻松的任务。
Kubernetes 不是什么
平台即服务 (PaaS)
尽管 Kubernetes 具有 PaaS 产品所拥有的许多功能,比如存储管理和集群日志记录和监控。但是,Kubernetes 不是真正的 PaaS 产品,因为它没有提供像操作系统这样的组件,也没有提供 Java 和 Docker 等支持工具。但是,Kubernetes 能与 PaaS 产品(比如 Bluemix 和OpenShift)紧密集成。
一个数据处理框架
Kubernetes 是一个绝对适合运行大数据应用程序的框架,但不会执行(或提供服务来执行)与像 Apache Spark 和 Hadoop Map/Reduce 这样的数据处理框架相同的功能。但是,Kubernetes 能与 Spark 和 Hadoop 紧密集成(仅列举了两个例子)。
持续集成
Kubernetes 不会像 Jenkins 和其他 CI 工具一样构建应用程序的容器,但它能与 CI 紧密结合(让人惊喜!),帮助管理应用程序在其生命周期中演化的更新。
解决方案
Kubernetes 解决了上面列出的所有问题(您没有感到震惊,对吗?)在下一节中,我将介绍如何解决这些问题,在此过程中还会介绍一些 Kubernetes 术语。
调度
Kubernetes Pod 是一组容器,它们协同执行一个应用程序功能(或一组功能),是Kubernetes 中的调度单元。
创建一个 Pod 时,调度程序会查找最合适运行它的节点(集群中的主机)。这由 kube-scheduler 组件处理,该组件会选择集群中的候选节点,确保该节点提供的资源与该 Pod 中的容器所需的资源相匹配。
负载平衡
Kubernetes 服务是对提供了相同功能的 Pod(称为副本)的逻辑分组,用于将 Pod 副本与它们的客户端解耦。
在 Kubernetes 中,负载平衡默认情况下由服务处理。对于每个服务,您可以提供一个标签选择器来识别 Pod 的副本。因为副本的物理位置无关紧要,所以需要其功能的客户端既不知道也不关心它们实际在何处运行。调度程序使用标签选择器为请求选择正确的服务,确保客户端负载始终得到平衡。
在一些受支持的云环境中,比如 IBM Bluemix Container 服务、Google Compute Engine (GCE) 和 Amazon Web Services (AWS),可通过将服务类型指定为 LoadBalancer,将一个服务配置为使用云提供商的负载平衡器。
应用程序扩展
Kubernetes 副本控制器可确保指定数量的 Pod 副本始终在集群中运行。
副本控制器会处理应用程序的扩展,确保您想要运行的副本数量实际上始终在运行。如果副本数量太少(可能有一两个副本因为某种原因而终止了),副本控制器会启动更多副本,直到达到目标数量。如果运行的副本太多(在自动扩展的情况下),副本控制器会结束一些副本。
集群管理和监控
Kubernetes 仪表板是一个用于监控的基于 Web 的 UI,您可在其中的屏幕中管理正在运行的Pod,查看 CPU 和内存使用情况等指标。默认情况下没有部署该仪表板,但借助 kubectl 命令,可以部署并开始使用它:
kubectl create -f https://rawgit.com/kubernetes/dashboard/master/src/deploy/kubernetes-dashboard.yaml
结束语
您应该对 Kubernetes 解决的问题和它解决问题的方式有了更好的了解。
在下一次员工会议中,您对 Kubernetes 的(深入)理解一定会让上司和同事们钦佩不已。如果在您解释之后,他们没有对您佩服的五体投地,或许您需要换一份新工作了。但至少您的小狗仍会喜欢您。
参考资料和其他 Kubernetes 资源
在整篇文章中,我提供了一些链接来帮助您进一步了解 Kubernetes,但是我还想在这里提供一些更有概述性的文章链接。请尽情的阅读吧!
来源:https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/
IBM Bluemix Container 服务 – 一种用于快速构建认知应用程序的高度安全、原生的Kubernetes 体验
扩展容器:容器集群基础指南
Kubernetes 和 IBM Bluemix:如何部署、管理和保护基于容器的工作负载
比较其他容器集群管理工具
K8s 调度程序
CIO之家 www.ciozj.com 公众号:imciow