什么是 Kubernetes (k8s)?

日落时的现代摩天大楼

作者

Stephanie Susnjara

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

什么是 Kubernetes (k8s)?

Kubernetes 也称为 k8s 或 kube,是一个开源容器编排平台,用于调度和自动执行容器化应用程序的部署、管理和扩展。

如今,Kubernetes 和更广泛的容器相关技术生态系统已经合并,构成了现代云基础架构的构建块。该生态系统使组织能够提供高效的混合多云计算环境, 以执行与基础架构和运营相关的复杂任务。它还通过采用“一次构建,随处部署”方法来构建应用程序,支持云原生 开发。

Kubernetes 一词源于希腊语,意为 舵手 或 领航员,因此 Kubernetes 徽标中以船舵为象征。

背景:容器、Docker 和 Kubernetes (K8s) 

什么是容器?

容器 是轻量级可执行应用程序组件,将源代码与在任何环境中运行代码所需的所有操作系统 (OS) 库和依赖关系相结合。

容器利用操作系统 虚拟化 形式,通过隔离进程并控制进程可以访问的 CPU、内存和磁盘量,实现多个应用程序共享单个操作系统实例。容器比 虚拟机 (VM) 更小、资源效率更高、更便携,已成为现代 云原生应用程序 事实上 的计算单元。容器的资源效率也更高。它们允许您在更少的机器(虚拟服务器和物理服务器)上使用更少的操作系统实例运行更多的应用程序。

由于容器可以在随时随地一致地运行,因此它们对于支持混合多云环境的底层架构至关重要, 混合 多云 环境是本地、 私有云、 公有云 和来自多个云供应商的多个云服务的组合。

什么是 Docker?

Docker 是创建和运行 Linux 容器的最流行工具。虽然数十年前人们就已经引入早期形式的容器(使用 FreeBSD Jails 和 AIX Workload Partitions 等技术),但在 2013 年,Docker 通过一种新的开发者友好和云友好的实现,使容器变得大众化。

Docker 最初是一个开源项目,但今天,它也指 Docker Inc.,该公司生产 Docker(一个建立在开源项目基础上的商业容器工具包)并将这些改进回馈开源社区。

Docker 基于传统的 Linux 容器技术构建,但支持更精细的 Linux 内核进程虚拟化,并添加了一些功能,助力开发人员更轻松地构建、部署、管理和保护容器。

尽管如今存在替代的容器运行时平台,例如开放容器计划 (OCI)、CoreOS 和 Canonical (Ubuntu) LXD,但 Docker 仍然是主导选择。此外,Docker 已成为容器的代名词,有时会被误认为与 Kubernetes 等互补技术相互竞争

如今,Docker 和 Kubernetes 是领先的容器化工具,其中 Docker 占据 82% 的市场份额,而 Kubernetes 在 2024 年控制 11.52% 的市场份额

使用 Kubernetes  (K8s) 进行容器编排

随着容器的广泛应用,如今一个组织可能拥有数百甚至数千个容器。运维团队需要针对容器部署、 联网 、可扩展性和可用性进行调度和自动化。容器编排市场应运而生。

Kubernetes 基于 Google 内部容器编排平台 Borg,于 2014 年作为开源工具向公众推出,Microsoft、Red Hat、IBM 和其他主要技术公司均已加入,成为 Kubernetes 社区的早期成员。2015 年,Google 将 Kubernetes 捐赠给了  Cloud Native Computing Foundation (CNCF) 9,这是一个开源、供应商中立的 云原生 计算中心。

Kubernetes 于 2016 年 3 月成为 CNCF 的第一个托管项目。从那时起,Kubernetes 已成为全球运行基于容器的工作负载时使用最为广泛的容器编排工具。根据 CNCF的一份报告9,Kubernetes 是全球第二大 开源 项目(仅次于 Linux),也是 71% 的财富 100 强公司的主要容器编排工具。

2018 年,Kubernetes 作为 CNCF 第一个毕业项目,成为历史上发展最快的开源项目之一。虽然其他容器编排选项(最著名的是 Docker Swarm 和 Apache Mesos)在早期获得了一些关注,但 Kubernetes 迅速成为最广泛采用的的技术。

自 Kubernetes 于 2016 年加入 CNCF 以来,贡献者数量 已增长到 8,012,增幅为 996%。截至撰写本文时,贡献者已向 GitHub 上的 Kubernetes 存储库添加超过 123,000 条提交内容。

辅以专家洞察分析的最新科技新闻

通过 Think 时事通讯,了解有关 AI、自动化、数据等方面最重要且最有趣的行业趋势。请参阅 IBM 隐私声明

谢谢!您已订阅。

您的订阅将以英语提供。您会在每份时事通讯中找到一个取消订阅链接。您可以在此管理您的订阅或取消订阅。更多相关信息,请参阅我们的《IBM 隐私声明》。

Kubernetes (K8s) 有何功能?

Kubernetes 在应用程序生命周期中调度和自动执行与容器相关的任务,包括以下内容。

部署

将指定数量的容器部署到指定主机,并使它们保持在所需状态下运行。

发布

发布是对部署的更改。Kubernetes 可用于启动、暂停、恢复或回滚发布。

服务发现

Kubernetes 可以使用域名系统 (DNS) 名称或 IP 地址自动将容器暴露给互联网或其他容器。

存储配置

将 Kubernetes 设置为根据需要为容器安装持久性本地存储或云存储。

负载均衡

根据 CPU 使用率或自定义指标,Kubernetes 的 负载均衡功能 可以在网络中分配工作负载,以保持性能和稳定性。

自动扩展

当流量激增时,Kubernetes 的自动缩放功能可以根据需要启动新集群以处理额外的工作负载。

自我修复,以实现高可用性

容器发生故障时,Kubernetes 可以自动重启或替换容器,以防止停机。Kubernetes 还可以删除不符合运行状况检查要求的容器。

OpenShift

看看容器如何通过 OpenShift 在云端运行

容器让在不同环境中构建、运行和迁移应用程序变得更加容易。此视频展示了 OpenShift on IBM Cloud 如何帮助团队高效管理容器化应用程序,从而使云开发变得更快速、更可靠。

Kubernetes (K8s) 架构和组件

部署 Kubernetes 涉及集群,即 Kubernetes 架构的构建块。集群由节点组成,每个节点代表一个计算主机,可以是物理机(裸机服务器),也可以是虚拟机。

Kubernetes 架构由两个主要部分组成:控制平面组件和管理各个节点的组件。

一个节点由多个 Pod 组成。Pod 是共享相同计算资源和相同网络的容器组。它们也是 Kubernetes 中的可扩展性单位。如果 Pod 中的容器获得的流量超出其处理能力,Kubernetes 会将该 Pod 复制到集群中的其他节点。

控制平面会自动处理集群中节点之间的 Pod 调度。

控制平面组件

每个集群都有一个主节点,用于处理集群的控制平面。主节点运行一个调度服务,根据开发人员设定的部署要求和可用计算能力,自动决定容器部署的时间和地点。

Kubernetes 集群中的主要组件是 kube-apiserver、etcd、kube-scheduler、kube-controller-manager 和 cloud-controller-manager:

API 服务器:
 Kubernetes 中的应用程序编程接口 (API) 服务器公开 Kubernetes API (用于管理、创建和配置 Kubernetes 集群的接口),并充当所有命令和查询的入口点。

etcd
etcd 是一个开源的分布式键值存储,用于保存和管理分布式系统保持运行所需的关键信息。 在 Kubernetes 中,etcd 管理配置数据、状态数据和元数据。

调度程序: 
此组件跟踪新创建的 Pod 并选择它们运行的节点。 调度程序会考虑资源可用性和分配限制、硬件和软件要求等因素。

控制器管理器: 
一组内置控制器,Kubernetes 控制器管理器运行一个控制循环,监控集群的共享状态并与 API 服务器通信,以管理资源、Pod 或服务端点。控制器管理器由捆绑在一起的独立进程组成,以降低复杂性并在一个进程中运行。

云控制器管理器: 
此组件的功能与控制器管理器链接类似。它链接到云提供商的  API,并将与该云平台交互的组件与仅在集群内交互的组件分开。

节点组件

工作节点负责部署、运行和管理容器化应用程序:

Kubelet:
Kubelet 是一个软件代理,它接收并运行来自主节点的命令,并帮助确保容器在 Pod 中运行。

Kube-proxy:
kube-proxy 安装在集群中的每个节点上, 用于维护主机上的网络规则并监控服务和 Pod 的变化。

其他 Kubernetes (K8s) 概念和术语

  • ReplicaSet:ReplicaSet 为特定工作负载维护一组稳定的副本 Pod。

  • 部署: 部署控制容器化应用程序的创建和状态并保持应用程序的运行。它确定集群上应运行的 Pod 副本数量。如果 Pod 故障,部署将创建一个新的 Pod。

  • kubectl: 开发人员使用 kubectl 管理集群操作,kubectl 是一种开发人员工具,由直接与 Kubernetes API 通信的命令行界面 (CLI) 组成。

  • DaemonSet: DaemonSet 负责帮助确保在集群中的每个节点上创建一个 Pod。

  • 附加组件: Kubernetes 附加组件扩展了功能,包括集群 DNS(向 Kubernetes 提供 DNS 记录的 DNS 服务器)、Web UI(用于管理集群的 Kubernetes 仪表板)等。

  • 服务: Kubernetes Service 是一个抽象层,它定义了 Pod 的逻辑集合以及如何访问它们。服务会公开在集群中一个或多个 Pod 上运行的网络应用程序。它提供了一种对 Pod 进行 负载平衡 的抽象方法。

Kubernetes (K8s) 生态系统

如今,已有  超过 90 种经过认证的 Kubernetes 产品/服务,包括企业级管理平台,这些平台提供工具、升级和附加功能,可加速容器化应用程序的开发和交付。

托管 Kubernetes 服务

虽然 Kubernetes 是编排基于容器的云应用程序的首选技术,但它还需要依赖其他组件,包括 网络入口、负载均衡、存储、持续集成持续交付 (CI/CD) 等,才能完全发挥作用。

虽然可以在基于云的环境中自托管 Kubernetes 集群,但对于企业组织来说,设置和管理可能很复杂。这就是托管 Kubernetes 服务的用武之地。

借助托管的 Kubernetes 服务,提供商通常可以管理 Kubernetes 控制平面组件。托管服务提供商帮助自动执行更新、负载均衡、扩展和监控的常规流程。例如,Red Hat OpenShift 是一个 Kubernetes 服务,可以在任何环境和所有主要公有云上部署,包括 Amazon Web Services (AWS)、Microsoft Azure、Google Cloud 和 IBM® Cloud。许多云供应商还提供自己的托管 Kubernetes 服务。

Kubernetes 监控工具

Kubernetes 监控是指收集和分析与 Kubernetes 集群内运行的容器化应用程序的运行状况、性能和成本特征相关的数据。

通过监控 Kubernetes 集群,管理员和用户可以跟踪运行时间、集群资源的使用情况以及集群组件之间的交互。监控有助于快速识别资源不足、故障和无法加入集群的节点等问题。当今的 Kubernetes 监控解决方案包括用于应用性能管理 (APM)可观察性、应用资源管理 (ARM) 等的自动化工具。

Istio 服务网格

Kubernetes 能够部署和扩展 Pod,但无法管理或自动化 Pod 之间的路由,并且不提供监控、保护或调试这些连接的工具。

随着集群中容器数量的增长,它们之间可能的连接路径的数量也呈指数级增长。例如,两个容器有两个潜在的连接路径,但 10 个 Pod 有 90 个,从而导致配置和管理方面的困扰。

Istio 是一个可配置的开源服务网格层,通过连接、监控和保护 Kubernetes 集群中的容器来提供解决方案。其他显著的优势包括改进的调试功能和仪表板,开发运维团队和管理员可以使用它来监控延迟、服务时间错误和容器之间连接的其他特征。

Knative 和无服务器计算

Knative (发音为“kay-native”)是一个开源平台,为 无服务器计算提供一个简单的入口,无服务器计算是一种云计算应用程序开发和执行模型,使开发人员能够构建和运行应用程序代码,而无需配置或管理服务器或后端基础架构。

无服务器并非部署在等待请求时处于空闲状态的持续代码实例,而是在需要时启动代码,并根据需求波动进行扩缩,然后在不使用时关闭代码。无服务器计算可防止浪费计算容量和电力,并降低成本,因为您只需在代码实际运行时付费。

Tekton

Tekton 是一个供应商中立的开源框架,用于创建持续集成和交付 (CI/CD) 系统,该系统由  持续交付基金会 (CDF) 管理。

作为 Kubernetes 框架,Tekton 通过提供管道、工作流和其他构建块的行业规范来帮助实现持续交付现代化,从而使跨多个云供应商或混合环境的部署更快速、更轻松。

值得注意的是,Tekton 是 Knative Build 的后续版本,在某些 Knative 发行版中仍然受支持。Tekton 管道已成为在 Kubernetes 环境中构建容器映像并将其部署到容器注册表中的标准。

Kubernetes  (K8s) 用例

企业组织使用 Kubernetes 来支持以下用例,这些用例在构成现代 IT 基础架构方面都起着至关重要的 作用。

微服务架构或云原生开发

云原生是一种用于构建、部署和管理基于云的应用程序的软件开发方法。云原生的主要优势在于,它允许开发运维和其他团队只需编写一次代码,即可在任何云服务提供商的任何云基础架构上进行部署。

这种现代开发过程依赖于 微服务,在这种方法中,单个应用程序由许多松散耦合且可独立部署的较小组件或服务组成,这些组件或服务部署在由 Kubernetes 管理的容器中。

Kubernetes 有助于确保每个微服务拥有有效运行所需的资源,同时最大限度地减少与手动管理多个容器相关的运营开销。

混合多云环境

混合云结合并统一了公有云、私有云和本地 数据中心 基础架构,以创建单一、灵活、成本最优的 IT 基础架构。

如今,混合云已经与来自多个云供应商的多云、公有云服务相融合,创建了混合多云环境。

混合多云方法具有更大的灵活性,可减少组织对一家供应商的依赖,防止被供应商锁定。由于 Kubernetes 为云原生开发奠定了基础,因此它是采用混合多云的关键。

大规模部署应用程序

Kubernetes 支持通过自动扩展实现大规模云应用程序部署。此过程允许应用程序扩大或缩小规模,自动适应需求变化,具有速度、效率和最少的停机时间。

Kubernetes 部署的弹性可扩展性意味着可以根据用户流量的变化(例如零售网站上的限时抢购)添加或删除资源。

应用程序现代化

Kubernetes 提供支持应用程序现代化所需的现代云平台,可将传统的单体式应用程序迁移和转换为基于微服务架构的云应用程序。

开发运维实践

自动化是开发运维的核心,它通过结合和自动化软件开发和 IT 运营团队的工作来加快更高质量软件的交付速度。

Kubernetes 通过自动配置和部署应用程序帮助开发运维团队快速构建和更新应用程序。

人工智能 (AI) 和机器学习 (ML)

ML 模型和 大语言模型 (LLM)(支持 AI )包括单独管理时很困难且耗时的组件。通过自动化云环境中的配置、部署和可扩展性, Kubernetes 有助于提供训练、测试和部署这些复杂模型所需的敏捷性和灵活性。

Kubernetes (K8s)教程

相关解决方案
IBM Red Hat OpenShift

Red Hat OpenShift on IBM Cloud 是一个完全托管的 OpenShift 容器平台 (OCP)。

探索 Red Hat OpenShift
容器解决方案

容器解决方案能够运行和扩展容器化工作负载,并实现安全性、开源创新和快速部署。

深入了解容器
云咨询服务

利用 IBM 的云咨询服务发掘新功能并提升业务敏捷性。了解如何通过混合云战略和专家合作共同制定解决方案、加快数字化转型并优化性能。

云服务
采取后续步骤

使用 IBM 的容器解决方案实现基础架构现代化。通过使用 IBM 的综合容器平台,跨环境灵活、安全、高效地运行、扩展和管理容器化工作负载。

深入了解容器解决方案 创建免费 IBM Cloud 帐户