发布日期:2024 年 3 月 11 日
撰稿人:Stephanie Susnjara、Ian Smalley
Kubernetes 也称为 k8s 或 kube,是一个开源容器编排平台,用于调度和自动执行容器化应用程序的部署、管理和扩展。
如今,Kubernetes 和更广泛的容器相关技术生态系统已经合并,构成了现代云基础架构的构建块。该生态系统使组织能够提供高效的混合多云计算环境,以执行与基础架构和运营相关的复杂任务。它还通过采用“一次构建,随处部署”方法来构建应用程序,支持云原生开发。
Kubernetes 一词源于希腊语,意为舵手或领航员,因此 Kubernetes 徽标(ibm.com 外部链接)中以船舵为象征。
了解“桌面即服务 (DaaS)”如何帮助企业实现与本地部署应用程序水平相当的性能和安全性。
注册并获取有关混合云的指南
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 基于 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 在应用程序生命周期中调度和自动执行与容器相关的任务,包括以下内容。
将指定数量的容器部署到指定主机,并使它们保持在所需状态下运行。
发布是对部署的更改。Kubernetes 可用于启动、暂停、恢复或回滚发布。
Kubernetes 可以使用域名系统 (DNS) 名称或 IP 地址自动将容器暴露给互联网或其他容器。
将 Kubernetes 设置为根据需要为容器安装持久性本地存储或云存储。
根据 CPU 使用率或自定义指标,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 的变化。
如今,已有超过 90 种经过认证的 Kubernetes 产品/服务(ibm.com 外部链接),包括企业级管理平台,这些平台提供工具、升级和附加功能,可加速容器化应用程序的开发和交付。
虽然 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 监控解决方案包括用于应用性能管理 (APM)、可观察性、应用资源管理 (ARM) 等的自动化工具。
Kubernetes 能够部署和扩展 Pod,但无法管理或自动化 Pod 之间的路由,并且不提供监控、保护或调试这些连接的工具。
随着集群中容器数量的增长,它们之间可能的连接路径的数量也呈指数级增长。例如,两个容器有两个潜在的连接路径,但 10 个 Pod 有 90 个,从而导致配置和管理方面的困扰。
Istio 是一个可配置的开源服务网格层,通过连接、监控和保护 Kubernetes 集群中的容器来提供解决方案。其他显著的优势包括改进的调试功能和仪表板,开发运维团队和管理员可以使用它来监控延迟、服务时间错误和容器之间连接的其他特征。
Tekton 是一个供应商中立的开源框架,用于创建持续集成和交付 (CI/CD) 系统,该系统由持续交付基金会 (CDF)(ibm.com 外部链接)管理。
作为 Kubernetes 框架,Tekton 通过提供管道、工作流和其他构建块的行业规范来帮助实现持续交付现代化,从而使跨多个云供应商或混合环境的部署更快速、更轻松。
值得注意的是,Tekton 是 Knative Build 的后续版本,在某些 Knative 发行版中仍然受支持。Tekton 管道已成为在 Kubernetes 环境中构建容器映像并将其部署到容器注册表中的标准。
企业组织使用 Kubernetes 来支持以下用例,这些用例在构成现代 IT 基础架构方面都起着至关重要的作用。
云原生是一种用于构建、部署和管理基于云的应用程序的软件开发方法。云原生的主要优势在于,它允许开发运维和其他团队只需编写一次代码,即可在任何云服务提供商的任何云基础架构上进行部署。
这种现代开发过程依赖于微服务,在这种方法中,单个应用程序由许多松散耦合且可独立部署的较小组件或服务组成,这些组件或服务部署在由 Kubernetes 管理的容器中。
Kubernetes 有助于确保每个微服务拥有有效运行所需的资源,同时最大限度地减少与手动管理多个容器相关的运营开销。
混合云结合并统一了公有云、私有云和本地数据中心基础架构,以创建单一、灵活、成本最优的 IT 基础架构。如今,混合云已经与来自多个云供应商的多云、公有云服务相融合,创建了混合多云环境。
混合多云方法具有更大的灵活性,可减少组织对一家供应商的依赖,防止被供应商锁定。由于 Kubernetes 为云原生开发奠定了基础,因此它是采用混合多云的关键。
Kubernetes 支持通过自动扩展实现大规模云应用程序部署。此过程允许应用程序扩大或缩小规模,自动适应需求变化,具有速度、效率和最少的停机时间。
Kubernetes 部署的弹性可扩展性意味着可以根据用户流量的变化(例如零售网站上的限时抢购)添加或删除资源。
Kubernetes 提供支持应用程序现代化所需的现代云平台,可将传统的单体式应用程序迁移和转换为基于微服务架构的云应用程序。
自动化是开发运维的核心,它通过结合和自动化软件开发和 IT 运营团队的工作来加快更高质量软件的交付速度。
Kubernetes 通过自动配置和部署应用程序帮助开发运维团队快速构建和更新应用程序。
ML 模型和大型语言模型 (LLM)(支持 AI)包括单独管理时很困难且耗时的组件。通过自动化云环境中的配置、部署和可扩展性,Kubernetes 有助于提供训练、测试和部署这些复杂模型所需的敏捷性和灵活性。
如果您准备开始使用 Kubernetes,或想培养使用 Kubernetes 和 Kubernetes 生态系统工具的技能,请试试这些教程:
借助 Red Hat OpenShift on IBM Cloud,OpenShift 开发者可以快速安全地在 Kubernetes (K8s) 集群中容器化和部署企业工作量。
在原生 Kubernetes 体验中部署安全且高度可用的集群。
提供随业务而变化的应用程序环境。无论您是构建新的云原生服务和应用程序,还是对现有应用程序进行重构或重新构建平台,IBM Cloud Pak for Applications 都能提供终极灵活性。
使用一套通用的云服务(包括工具链、数据库和 AI),在任何云供应商的基础上,一致地在本地、边缘计算和公有云环境中部署和运行应用程序。
IBM Cloud Code Engine 是一个完全托管的无服务器平台,可让您在完全托管的容器运行时上运行容器、应用程序代码或批处理作业。
据 IBM® Research 记录,容器和 Kubernetes 的采用率增长势头强劲。
容器是混合云策略的一部分,支持企业从任何地方构建和管理工作负载。
无服务器是一种云应用程序开发和执行模型,允许开发人员构建和运行代码,无需管理服务器和为闲置的云基础架构付费。
在 Kubernetes (K8s) 中使用 YAML 文件的示例。
容器是软件的可执行单元,其中以常见方式打包应用程序代码及其库和依赖项,以便代码可以在任何地方运行,无论是在桌面、传统 IT 还是云上。
Docker 是一个开源平台,开发人员可以使用该平台构建、部署、运行、更新和管理容器,容器是标准化的可执行组件,它将应用程序源代码与在任何环境中运行该代码所需的操作系统库和依赖项合并在一起。