概述
Kubernetes(也称 k8s 或 “kube”)是一 个开源的容器编排平台,可以自动完成在部署、管理和扩展容器化应用过程中涉及的许多手动操作。
什么是 Kubernetes 集群?
您可以将运行 Linux® 容器的多组主机聚集在一起,由 Kubernetes 帮助您轻松高效地管理这些集群。
Kubernetes 集群可跨本地、公共云、私有云或混合云部署主机。因此,对于要求快速扩展的云原生应用而言(例如借助 Apache Kafka 进行的实时数据流处理),Kubernetes 是理想的托管平台。
Kubernetes 的贡献者
Kubernetes 最初由 Google 的工程师开发和设计。Google 是最早研发 Linux 容器技术的企业之一,曾公开分享 Google 如何将一切都运行于容器之中。(这是在 Google 云服务背后的技术。)
Google 每周产生超过 20 亿个容器部署,全都由内部平台 Borg 支撑。Borg 是 Kubernetes 的前身,多年来开发 Borg 的经验教训成了影响 Kubernetes 中许多技术的主要因素。
趣闻:Kubernetes 徽标的七个轮辐代表着项目最初的名称"九之七项目"(Project Seven of Nine)。
红帽是第一批与 Google 合作研发 Kubernetes 的公司之一,作为 Kubernetes 上游项目的第二大贡献者,我们甚至在这个项目启动之前就已参与其中。2015 年,Google 将 Kubernetes 项目捐赠给新成立的云原生计算基金会(CNCF)。
Kubernetes 伴您未来?点击这里开始。
Kubernetes 的功能和优势是什么?
在生产环境中(尤其是当您要面向云优化应用开发时)使用 Kubernetes 的主要优势在于,它提供了一个便捷有效的平台,让您可以在物理机和虚拟机(VM)集群上调度和运行容器。
更广泛一点说,它可以帮助您在生产环境中,完全实施并依赖基于容器的基础架构。由于 Kubernetes 的实质在于实现运维任务自动化,所以您可以将其它应用平台或管理系统分配给您的许多相同任务交给容器来执行。
借助 Kubernetes 模式,开发人员可以使用 Kubernetes 作为运行时平台来创建云原生应用。模式是 Kubernetes 开发人员在构建基于容器的应用和服务时所需的工具。
有了 Kubernetes,您可以:
- 跨多个主机编排容器。
- 更充分地利用硬件,最大化企业应用运行所需资源的效用。
- 控制和自动化应用的部署与更新。
- 挂载和添加运行有状态应用所需的存储。
- 动态扩展容器化应用及其资源。
- 对服务进行声明式管理,保证所部署的应用始终按照您期望的方式运行。
- 应用健康检查和自我修复,以及自动放置、自动启动、启动复制和自动扩展。
但是,Kubernetes 需要依赖其它项目来全面提供这些经过编排的服务。增添了其他开源项目后,您就能全面发挥 Kubernetes 的潜力。这些必要的部分包括(还有更多):
- 注册表,通过 Docker 注册表等项目实现。
- 网络,通过 OpenvSwitch 等项目和智能边缘路由来实现。
- 遥测,通过 Kibana、Hawkularz 和 Elastic 等项目实现。
- 安全性,通过 LDAP、SELinux、RBAC 和 OAUTH 等项目以及多租户层来实现。
- 自动化,通过添加 Ansible playbook 来进行安装和集群生命周期管理。
- 服务,通过常用应用模式的丰富目录来提供。
简要了解 Linux 容器和容器编排技术在这个点播课程中,您将了解如何实现应用和服务的容器化,如何使用 Docker 对其进行测试,并使用红帽® OpenShift® 在 Kubernetes 集群上部署应用和服务。
Kubernetes 常用术语盘点
与大多数技术一样,特定于 Kubernetes 的语言或可成为有碍入门的绊脚石。为了帮助您更好地了解 Kubernetes,我们在下面来解释一些常用术语。
控制平面(Control Plane):控制 Kubernetes 节点的进程的集合。所有任务分配都来自于此。
节点(Node):这些机器负责执行由控制平面分配的请求任务。
容器集(Pod):部署在单个节点上的一个或多个容器组成的容器组。同一容器集中的所有容器共享同一个 IP 地址、IPC、主机名称及其它资源。容器集会将网络和存储从底层容器中抽象出来。这样,您就能更加轻松地在集群中移动容器。
复制控制器(Replication controller):用于控制容器集在集群上运行的实例数量。
服务(Service):将工作定义与容器集分离。Kubernetes 服务代理会自动将服务请求分发到正确的容器集——无论这个容器集会移到集群中的哪个位置,甚至可以被替换掉。
Kubelet:运行在节点上的服务,可读取容器清单(container manifest),确保指定的容器启动并运行。
kubectl:Kubernetes 的命令行配置工具。
Kubernetes 如何发挥作用?
我们把一个有效的 Kubernetes 部署称为集群。您可以将 Kubernetes 集群可视化为两个部分:控制平面与计算设备(或称为节点)。
每个节点都是其自己的 Linux® 环境,可以是物理机也可以是虚拟机。每个节点都运行由若干容器组成的容器集。
控制平面负责维护集群的预期状态,例如运行哪个应用以及使用哪个容器镜像。计算机则负责应用和工作负载的实际运行。
Kubernetes 在操作系统(例如,红帽® 企业 Linux®)之上运行,并与节点上运行的容器集交互。
Kubernetes 控制平面接受来自管理员(或 DevOps 团队)的命令,并将这些指令转发给计算机。
此交接将与许多服务协同,以自动决定哪一个节点最适合执行该任务。然后,它将在该节点分配资源,并指派容器集来完成任务请求。
Kubernetes 集群的预期状态定义了应运行哪些应用或其他工作负载、应使用哪些镜像、应提供哪些资源,以及其他配置详情。
就基础架构而言,管理容器的方式基本不变。但您对容器的掌控得到提升,无需对独立的容器或节点实施微观管理,就能更好地控制容器。
您的工作包括配置 Kubernetes,以及定义节点、容器集以及其中的容器。Kubernetes 负责编排这些容器。
您可以自己决定具体在哪里运行 Kubernetes。可以是裸机服务器、虚拟机、公共云提供商、私有云和混合云环境。Kubernetes 的一大优势就是它可以在许多不同类型的基础架构上运行。
Kubernetes 与 Docker 的关系是什么?
Docker 可被用作由 Kubernetes 编排的容器运行时。当 Kubernetes 将容器集调度到节点上时,该节点上的 kubelet 会指示 Docker 启动指定的容器。
然后,kubelet 持续从 Docker 收集这些容器的状态,并将该信息聚合到控制平面中。Docker 将容器拉到该节点上,并且启动和停止这些容器。
将 Kubernetes 与 Docker 搭配使用带来的区别在于,自动化系统要求 Docker 在所有节点上对所有容器执行这些操作,而非要求管理员手动操作。
什么是 Kubernetes 原生基础架构?
如今,本地 Kubernetes 部署大多在现有虚拟基础架构上运行,同时裸机服务器上的部署变得越来越多。这是数据中心的自然演变。Kubernetes 充当容器化应用的部署和生命周期管理工具,而基础架构资源的管理则要使用另外的工具。
不过,倘若数据中心从一开始便设计为支持容器,并且包括基础架构层,又该如何?
您一开始就有了裸机服务器和软件定义存储,并且由 Kubernetes 进行部署和管理,让基础架构与容器一样享受自我安装、自我扩展和自我修复的好处。这是 Kubernetes 原生基础架构的愿景。
Kubernetes 原生基础架构有什么优势?
公共云敏捷性和本地简易性,减少开发人员和 IT 运维之间的摩擦
较高的成本效益,省却利用独立虚拟机监控程序层运行虚拟机的需求
开发人员灵活性,从 Kubernetes 部署容器、无服务器应用和虚拟机,应用和基础架构皆能扩展
混合云扩展性,将 Kubernetes 用作本地部署和公共云之间的通用层
红帽如何让 Kubernetes 原生基础架构变为现实?
红帽 OpenShift
红帽 OpenShift 提供全堆栈自动化及 Kubernetes Operator,实现非 Kubernetes 原生基础架构中安装和生命周期管理的自动化。
红帽 OpenShift 数据基础
红帽 OpenShift 数据基础通过使用面向 Kubernetes 的 Rook 存储 operator,提供动态置备的存储。
容器原生虚拟化
红帽 OpenShift 中的容器原生虚拟化实现了在 Kubernetes 上运行虚拟机。它基于一个名为 KubeVirt 的上游开源社区项目。
Metal3
Metal3 是一个上游项目,可以借助 Kubernetes 全面实现裸机服务器部署和生命周期管理的自动化。
为什么选择 Kubernetes?
Kubernetes 可以帮助您交付和管理容器化、传统和云原生应用,以及重构为微服务的应用。
为了满足日新月异的业务需求,开发团队需要能够快速构建新的应用和服务。云原生开发模式从容器内微服务开始,不仅可以加快开发速度,同时能够更轻松地转换和优化现有应用。
观看本网络培训课堂系列,获取帮助您在需要构建、运行、部署和现代化应用的企业 Kubernetes 上建立数据平台的专家视角。
生产应用跨越多个容器,而这些容器必须部署到多个服务器主机上。Kubernetes 可以提供所需的编排和管理功能,以便您针对这些工作负载大规模部署容器。
借助 Kubernetes 编排功能,您可以构建跨多个容器的应用服务、跨集群调度、扩展这些容器,并长期持续管理这些容器的健康状况。有了 Kubernetes,您便可切实采取一些措施来提高 IT 安全性。
Kubernetes 还需要与联网、存储、安全性、遥测和其他服务整合,以提供全面的容器基础架构。
一旦把它部署到生产环境和扩展为多个应用,您显然需要许多托管在相同位置的容器来协同提供各种服务。
Linux 容器可为基于微服务的应用提供理想的应用部署单元和独立的执行环境。通过将微服务放入容器,就能更加轻松地编排各种服务(包括存储、网络和安全防护)。
随着这些容器的累积,环境中容器的数量会急剧增加,复杂度也随之增长。
Kubernetes 通过将容器分类组成 "容器集" (pod),解决了容器激增带来的许多常见问题。容器集为分组容器增加了一个抽象层,可帮助您调度工作负载,并为这些容器提供所需的服务,如联网和存储等。
Kubernetes 的其他部分可帮助您在这些容器集之间平衡负载,同时确保运行正确数量的容器,充分支持您的工作负载。
如果能正确实施 Kubernetes,再辅以其他开源项目(例如 Open vSwitch、OAuth 和 SELinux),您就能够轻松编排容器基础架构的各个部分。
用例:构建云平台,拥抱银行业创新
Emirates NBD 是阿拉伯联合酋长国(UAE)最大的银行之一,需要一个可扩展、有弹性的根基来实施数字化转型。该银行一直饱受置备速度缓慢、IT 环境复杂之苦。设置一台服务器可能耗费 2 个月,而更改大型单体式应用更是需要 6 个月以上。
该银行利用红帽 OpenShift 容器平台进行容器编排、集成和管理,创造了中东地区第一个由银行大规模运行的私有云:Sahab。Sahab 通过"即服务"模式提供端对端开发所需的应用、系统和其他资源,囊括从置备到生产整个过程。
借助全新的平台,Emirates NBD 利用应用编程接口(API)和微服务改进了内部团队之间以及与合作伙伴的协作情况。此外,该银行通过采用敏捷方法和 DevOps 开发实践,缩短了应用的发布和更新周期。
巧"容"万象,赋能利"器"。
利用 Kubernetes 来支持 DevOps 方法
现代应用程序的开发流程不同于以往。DevOps 可以加快一个想法从提出到部署的整个过程。
DevOps 的核心在于,在应用的整个生命周期中,都要确保日常运维任务自动化和环境的标准化。容器使得开发、交付和自动化能在一个统一环境中进行,也让应用在开发、测试和生产环境中轻松迁移。
持续集成和持续部署管道(CI/CD)是实施 DevOps 的一大重要成果。CI/CD 可帮助您频繁地向客户交付应用并检验软件质量,而且只需极少的人工干预。
利用 Kubernetes 和 DevOps 方法管理容器生命周期,能够使软件开发和 IT 运维齐头并行,从而助力 CI/CD 管道的顺畅运行。
选用合适的平台并兼顾容器的内部和外部,您就可以充分利用已经实施的文化和流程变革。
在生产中使用 Kubernetes
Kubernetes 是开源的,因此没有正式的技术支持结构与之相关,至少没有您的业务能够信赖的支持。
如果在生产环境中运行时 Kubernetes 出现实施问题,您一定会感到非常担心,您的客户同样也会担心。
Kubernetes 可以比作汽车发动机。发动机可以单独运转,但当与变速箱、车轴和车轮组合在一起时,它就变成了一辆能行驶的汽车的一部分。只是安装 Kubernetes 还不能得到一个生产级平台。
Kubernetes 需要其他组件才能发挥完整功用。您需要添加身份验证、网络、安全防护、监控、日志管理以及其他工具。
于是,红帽 OpenShift 应运而生,它是一台完整的汽车。
红帽 OpenShift 是企业级的 Kubernetes。汇集了所有相关的先进技术,旨在将 Kubernetes 打造成为可供企业使用的强大平台,这些技术包括:镜像仓库、联网、遥测、安全防护、自动化和服务。
红帽 OpenShift 包含 Kubernetes 作为该平台的一个核心组件,它也是经过 CNCF 认证的 Kubernetes 产品。
借助红帽 OpenShift 容器平台的可扩展性以及控制和编排功能,开发人员可以构建新的容器化应用、对其进行托管并在云端加以部署,从而轻松快速地将各种奇思妙想转变为新业务。
您可以利用 60 天免费试用期,尝试用红帽 OpenShift 来自动化您的容器运维。