主页 topics kubernetes 什么是 Kubernetes?
深入了解 IBM 的 Kubernetes 解决方案 订阅有关云计算的最新消息
电脑显示器、服务器、云、点拼贴插图

发布日期:2024 年 3 月 11 日
撰稿人:Stephanie Susnjara、Ian Smalley

什么是 Kubernetes?

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

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

Kubernetes 一词源于希腊语,意为舵手领航员,因此 Kubernetes 徽标(ibm.com 外部链接)中以船舵为象征。

利用 DaaS 实现工作场所灵活性

了解“桌面即服务 (DaaS)”如何帮助企业实现与本地部署应用程序水平相当的性能和安全性。

相关内容

注册并获取有关混合云的指南

背景:容器、Docker 和 Kubernetes
什么是容器?

容器是轻量级可执行应用程序组件,将源代码与在任何环境中运行代码所需的所有操作系统 (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% 的市场份额(ibm.com 外部链接)。

使用 Kubernetes 进行容器编排

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

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

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

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

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

Kubernetes (K8s) 有何功能?

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

部署

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

发布

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

服务发现

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

存储配置

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

负载均衡

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

自动扩展

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

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

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

Kubernetes 架构和组件

部署 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 概念和术语
  • ReplicaSet:ReplicaSet 为特定工作负载维护一组稳定的副本 Pod。

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

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

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

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

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

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

托管 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)(ibm.com 外部链接)管理。

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

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

Kubernetes 用例

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

微服务架构或云原生开发

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

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

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

混合多云环境

混合云结合并统一了公有云、私有云和本地数据中心基础架构,以创建单一、灵活、成本最优的 IT 基础架构。如今,混合云已经与来自多个云供应商的多云、公有云服务相融合,创建了混合多云环境。

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

大规模部署应用程序

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

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

应用程序现代化

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

开发运维实践

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

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

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

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

Kubernetes (K8s)教程
相关解决方案
Red Hat OpenShift on IBM Cloud

借助 Red Hat OpenShift on IBM Cloud,OpenShift 开发者可以快速安全地在 Kubernetes (K8s) 集群中容器化和部署企业工作量。

探索 Red Hat OpenShift
IBM® Cloud Kubernetes Service

在原生 Kubernetes 体验中部署安全且高度可用的集群。

探索 IBM Cloud Kubernetes Service
IBM® Cloud Pak for Applications

提供随业务而变化的应用程序环境。无论您是构建新的云原生服务和应用程序,还是对现有应用程序进行重构或重新构建平台,IBM Cloud Pak for Applications 都能提供终极灵活性。

深入了解 IBM Cloud Pak for Applications
IBM® Cloud Satellite

使用一套通用的云服务(包括工具链、数据库和 AI),在任何云供应商的基础上,一致地在本地、边缘计算和公有云环境中部署和运行应用程序。

深入了解 IBM Cloud Satellite 解决方案
IBM® Cloud Code Engine

IBM Cloud Code Engine 是一个完全托管的无服务器平台,可让您在完全托管的容器运行时上运行容器、应用程序代码或批处理作业。

深入了解 Code Engine
资源 企业中的容器

据 IBM® Research 记录,容器和 Kubernetes 的采用率增长势头强劲。

为混合云提供灵活、有弹性、安全的 IT

容器是混合云策略的一部分,支持企业从任何地方构建和管理工作负载。

什么是无服务器?

无服务器是一种云应用程序开发和执行模型,允许开发人员构建和运行代码,无需管理服务器和为闲置的云基础架构付费。

Kubernetes (K8s) 中的 YAML 基础知识

在 Kubernetes (K8s) 中使用 YAML 文件的示例。

什么是容器?

容器是软件的可执行单元,其中以常见方式打包应用程序代码及其库和依赖项,以便代码可以在任何地方运行,无论是在桌面、传统 IT 还是云上。

什么是 Docker?

Docker 是一个开源平台,开发人员可以使用该平台构建、部署、运行、更新和管理容器,容器是标准化的可执行组件,它将应用程序源代码与在任何环境中运行该代码所需的操作系统库和依赖项合并在一起。

采取后续步骤

借助 Red Hat OpenShift on IBM Cloud,开发人员能够以快速、安全的方式在 Kubernetes 集群中构建和部署容器化工作负载。减少涉及安全管理、合规性管理、部署管理和持续生命周期管理的繁琐、重复性任务。

深入了解 Red Hat OpenShift on IBM Cloud 免费试用