欢迎访问红帽

了解您身边的最新技术讯息

了解全世界红帽客户的最新动态:

容器

什么是 Kubernetes?

Kubernetes,又称为 k8s(首字母为 k、首字母与尾字母之间有 8 个字符、尾字母为 s,所以简称 k8s)或者简称为 “kube” ,是一种可自动实施 Linux 容器操作的开源平台。它可以帮助用户省去应用容器化过程的许多手动部署和扩展操作。也就是说,您可以将运行 Linux 容器的多组主机聚集在一起,由 Kubernetes 帮助您轻松高效地管理这些集群。而且,这些集群可跨公共云、私有云或混合云部署主机。

Kubernetes 最初由来自 Google 的 Joe Beda、Brendan Burns 以及 Craig McLuckie 开发和设计。Google 内部一直使用一个类似平台 Borg 对容器进行管理,他们在此过程中所累积的经验,最终成为催生 Kubernetes 技术的首要动力。Kubernetes 徽标的七个轮辐代表着项目最初的名称“九之七项目” (Project Seven of Nine)。2015 年,Google 将 Kubernetes 项目捐赠给新成立的云原生计算基金会


您为何需要 Kubernetes?

如果您正在部署容器,那么您对 Kubernetes 的需求可以归纳为一个词:编排。通过编排,您可以同时与多组容器交互,规划和实施容器注册表、网络、存储、安全性以及遥测服务。

当然,这取决于您如何在您的环境中使用容器。Linux 容器中的基本应用将它们视作高效、快速的虚拟机。一旦您将其扩展到生产环境和多个应用中,显而易见,您需要多个并列容器来协作,以交付各种服务。此举大幅增加了您环境中的容器数量,随着其数量不断累积,复杂性也不断提高。

Kubernetes 利用容器扩增解决了许多常见问题,将容器归类到一起,形成“容器集” (pod)。容器集为分组容器增加了一个抽象层,可帮助您调用工作负载,并为这些容器提供所需的网络和存储等服务。Kubernetes 的其它部分可帮助您在这些容器集之间达成负载平衡,同时确保运行正确数量的容器,充分支持您的工作负载。

如果能正确实施 Kubernetes,再辅以其它开源项目(例如 Atomic 注册表flannelheapsterOAuth 以及 SELinux),您就能够轻松编排容器基础架构的各个部分。


Kubernetes 有哪些用途?

在您的环境中使用 Kubernetes 优势明显:它为您提供一个便捷有效的平台,让您可以在物理机和虚拟机集群上调用和运行容器。更广泛一点说,它可以帮助您在生产环境中,完全实施并依托基于容器的基础架构运营。由于 Kubernetes 的实质在于实现操作任务自动化,所以您可以将其它应用平台或管理系统分配给您的许多相同任务交给容器来执行。

利用 Kubernetes,您能够达成以下目标:

  • 跨多台主机进行容器编排。
  • 更加充分地利用硬件,最大程度获取运行企业应用所需的资源。
  • 有效管控应用部署和更新,并实现自动化操作。
  • 挂载和增加存储,用于运行有状态的应用。
  • 快速、按需扩展容器化应用及其资源。
  • 利用自动布局、自动重启、自动复制以及自动扩展功能,对应用实施状况检查和自我修复。
  • 利用蓝绿部署,无缝引入和测试新功能。

但是,Kubernetes 需要依赖其它项目来全面提供这些经过编排的服务。因此,借助其它开源项目可以帮助您将 Kubernetes 的全部功用发挥出来。这些功能包括:

  • 容器注册表,通过 Atomic 注册表或 Docker 注册表等项目完成。
  • 网络,通过 flannel、calico 或 weave 等项目实现。
  • 遥测,通过 heapster、kibana 和 elastic 等项目实现。
  • 安全性,通过 LDAP、SELinux 和 OAUTH 等项目实现。

学习 Kubernetes 术语

和其它技术一样,Kubernetes 也会采用的一些专用的词汇,这可能会对初学者理解和掌握这项技术造成一定的障碍。现在,让我们就一些较常用的术语做些说明,以帮助您了解 Kubernetes。

主机(Master): 用于控制 Kubernetes 节点的计算机。所有任务分配都来自于此。

节点(Node):一组通过按组归入容器集的 Linux 容器,来执行请求和分配任务的计算机。由 Kubernetes 主机负责对节点进行控制。

容器集(Pod):被部署在单个节点上的,且包含一个或多个容器的容器组。同一容器集中的所有容器共享同一个 IP 地址、IPC、主机名称及其它资源。容器集始终都在同地协作。

Kubelet:在节点上运行的服务,可读取容器清单(container manifest),确保指定的容器启动并运行。

kubectl:命令行接口,用于向 Kubernetes 集群发送命令。

复制控制器(Replication controller):用于控制应在集群某处运行的完全相同的容器集副本数量。

服务(Service):定义逻辑容器集,以及访问这些容器集的方式。


在基础架构中采用 Kubernetes 的方法简介

Kubernetes 基于操作系统运行(例如红帽企业 Linux Atomic Host),并与在节点上运行的容器集交互。由 Kubernetes 主机接收管理员(或 DevOps 团队)发出的命令,然后将这些指令转发给从属的节点。这种移交操作与多种服务同时作用,自动确定哪个节点最适合执行该任务。然后,分配资源,指定该节点中的容器集来完成请求的工作。

因此,就基础架构这一方面而言,管理容器的方式几乎不变。但您对容器的掌控力得以提升,无需对独立的容器或节点实施微观管理,同时获得更高水平的控制能力。当然,某些工作是必须的,但大部分都是关于分配 Kubernetes 主机、定义节点以及定义容器集。

Docker 是何种情况?

Docker 技术的工作仍然如常当 kubernetes 将容器集调度到一个节点上时,该节点上的 kubelet 会指令 docker 启动指定的容器。kubelet 随后不断从 docker 收集这些容器的状态,并将这些信息汇集至主机。Docker 将容器拉至该节点,并按照常规启动和停止这些容器。不同在于,自动化系统要求 docker 在所有节点上对所有容器执行这些操作,而非要求管理员手动操作。

容器潜力巨大