Kubernetes 部署策略:为您的应用选择合适的方法

人们聚在电脑前

作者

Stephanie Susnjara

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

Kubernetes 部署策略

组织选择的部署策略可能决定软件应用的成功或失败。在 Kubernetes 环境中,此决策直接影响应用程序可用性、开发速度和运营成本。

顺利发布与部署灾难之间的差别,往往取决于是否为特定应用的需求和风险承受能力选择了合适的方法。

随着 Kubernetes 的采用持续增长,战略性部署选择对 DevOps 开发运维团队和业务成果都变得日益重要。

云原生计算基金会 (CNCF) 的一项调查发现,93% 的组织正在使用、试用或评估 Kubernetes。 1 每种 Kubernetes 云原生部署战略都在速度、安全和资源使用之间进行了不同的权衡。

什么是 Kubernetes 部署?

Kubernetes 部署是一种高级资源,用于管理 Kubernetes 聚类中无状态应用的生命周期。它提供了一种声明性的方式来定义应用程序的预期状态,包括副本数量、容器镜像和更新处理。

部署不是管理单个容器或 Pod,而是为团队提供了一层管理层,处理保持应用可靠运行所需的复杂编排工作。

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

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

谢谢!您已订阅。

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

Kubernetes 概述

Kubernetes 是事实上的开源容器编排平台,它从根本上改变了组织对应用程序部署的看法。在云迁移期间,随着公司从简单的单一应用程序转向复杂的分布式架构,传统的部署方法变得不切实际且成本高昂。

Kubernetes 最初由谷歌开发,并于 2015 年捐赠给 CNCF,为大多数财富 500 强公司提供必要的 IT 基础设施。Kubernetes 实现了跨机器聚类的部署、扩展和管理自动化,使团队能够每天多次更新应用,而不是将部署视为高风险、低频的事件。

在 Kubernetes 出现之前,应用程序通常在专用服务器或虚拟机 (VM) 上运行,这使得扩展成本高昂且耗时。虽然 Docker 使容器流行起来,但 Kubernetes 提供了容器编排层,用于大规模管理这些容器,并将它们组织成 Pod(最小的可部署单元)。

这些 pod 在聚类内的工作节点上运行,而控制平面协调所有操作。

这种云原生架构支持现代容器化应用所需的复杂部署策略。从逐步部署到使用负载平衡的即时流量切换,每种方法都能处理不同的风险状况和运营要求。Kubernetes Services 为 Pod 组提供稳定的网络标识和基于 DNS 的发现功能,即使在更新或替换单个实例时也能实现可靠的通信模式。

OpenShift

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

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

Kubernetes 是如何工作的?

Kubernetes 部署通过维持预期的 Pod 数量、处理更新以及利用自愈能力替换容器,自动管理应用的生命周期。

更新应用程序时,团队会在 YAML 文件中定义新版本的外观。随后,Kubernetes 会处理实现聚类预期状态所需的复杂编排,在管理从先前版本过渡的同时创建新的 Pod。

团队通过 Kubernetes 聚类的命令行界面 kubectl 与部署进行交互。他们会应用 YAML 配置文件(例如 deployment.yaml),在其中指定部署的 API 版本、元数据以及在 spec 部分中定义的状态。

这些声明式配置文件使版本控制成为可能,并能在不同环境中实现可重复的部署。部署控制器根据这些规范持续监控和管理部署生命周期。

五个基本的 Kubernetes 部署组件

Kubernetes 的自动化流程依赖于五个基本组件的协同工作,其中 Kubernetes 网络支持 Pod 之间的通信:

  1. Pod 模板规范:Pod 模板规范定义了创建 Pod 的蓝图,包括容器镜像、资源需求、环境变量、卷挂载、容器端口和网络配置。此模板可确保所有应用程序实例之间的一致性。

  2. 副本数量:副本数量指定同时运行的实例数量。用户可以手动调整此设置,或通过水平 Pod 自动伸缩器 (Horizontal Pod Autoscalers) 基于 Kubernetes 监控指标(如 CPU 使用率、内存消耗或自定义业务指标)自动调整。团队可以通过 kubectl rollout 命令或 kubectl get 来监控发布状态,以检查部署情况,并确保在更新过程中运行的 Pod 数量正确。

  3. 选择器标签:选择器标签通过基于标签的匹配,在部署与其管理的 Pod 之间建立关联。这些选择器确保部署能够管理其负责的 Pod,从而在复杂环境中防止配置冲突。

  4. 更新策略配置:更新策略配置控制如何推出应用程序的新版本。它包括更新过程中最大不可用 Pod 的设置、蓝绿部署场景下的突增容量,以及用于自动故障恢复的回滚触发器。

  5. 资源管理设置:资源管理设置定义了容器的 CPU 和内存请求与限制,以确保整个聚类的资源得到最佳分配,同时防止资源争用,这在多租户环境中尤为关键。

Kubernetes 部署的用例

组织在多种不同环境中使用 Kubernetes 部署,每种环境都能从自动化生命周期管理和灵活的更新策略中受益:

  • Web 应用程序和 API
  • 微服务
  • 批处理工作量
  • 多环境工作流
  • CI/CD 管道

Web 应用程序和 API

Web 应用程序和 API 在更新期间保持可用性,同时根据流量需求进行扩展。电子商务平台和内容管理系统尤其受益于能够在不影响用户的情况下更新功能的能力。

处理数据或业务逻辑的后端服务可以独立于前端应用部署,Kubernetes Ingress 控制器负责流量路由,负载均衡则在各服务实例间分配流量。

微服务

微服务架构在不影响整个系统的情况下协调数百个独立服务的更新。此能力使团队能够按照不同的时间表部署各个组件,同时保持整体系统稳定性。

Helm Charts 通过标准化配置和依赖关系管理简化了复杂的微服务部署的管理。

批处理工作负载

批处理工作量确保数据处理任务的资源分配一致,并具备自动重启能力。部署抽象层简化了复杂处理管道的管理,能够从容处理各类故障。

多环境工作流

多环境工作流在开发、预发布和生产环境之间保持一致性,同时应用特定环境的配置。团队可以在不同环境中使用相同的部署定义,只调整副本数量、资源限制或功能标记,并通过命名空间组织应用,以实现逻辑隔离和资源独立。

CI/CD 管道

CI/CD 管道使用部署实现整个软件交付流程的自动化,从代码提交到生产发布,通过持续部署实现。

部署可以与持续整合工具和 GitHub 等平台无缝集成,实现基于代码变更、拉取请求或定时发布的自动化测试、构建和部署。

Kubernetes 部署策略类型

部署策略的核心是管理软件更新过程中的风险。过去,传统方法通常需要安排维护窗口并将系统下线,这虽然安全,但速度较慢。Kubernetes 能够在不停机的情况下更新应用程序,部署得更频繁,并减轻协调负担。

不同的 Kubernetes 部署策略以不同的方式处理更新风险。选择取决于应用程序的功能、团队可以管理的内容以及业务需求。

Kubernetes 部署策略类型的示例包括:

  • 重新创建部署
  • 滚动更新部署
  • 蓝绿部署
  • 金丝雀部署
  • 影子部署
  • A/B 测试部署

重新创建部署

重新创建部署会在启动新实例之前关闭所有现有实例。此功能会造成短暂的停机时间,但可以避免版本兼容性问题和资源冲突。

这种方法非常适用于批处理系统、传统应用以及以操作简便性优先于系统可用性的开发环境。当团队可以接受短暂的停机时间以换取可预测的行为时,他们会选择重新创建部署。

滚动更新部署

滚动更新会逐渐替换实例,同时保持应用程序可用。这种方法是 Kubernetes 的默认策略,因为它在速度、资源使用和风险之间实现了平衡。

CMS 通常使用滚动更新来实现连续功能交付,而不会中断用户。然而,应用必须设计为能够适应混合版本环境;如果不同版本无法同时运行,滚动更新就会变得棘手。

Kubernetes 以渐进的方式用新实例替换旧 pod,从而允许平滑地淘汰旧版本。团队可以通过 kubectl 命令启动此过程。

蓝绿部署

蓝绿部署维护两个完整的生产环境,并在它们之间即时切换所有流量。该策略可以实现即时回滚,但也会使部署期间的基础设施成本翻倍。

在基础设施成本相对于服务中断风险可控的情况下,支付处理系统、客户数据库、身份验证服务以及合规性应用会使用蓝绿部署。团队可以在切换流量之前,针对新环境运行全面验证。

金丝雀部署

金丝雀部署将一小部分流量路由到新版本,同时监控性能和错误率。团队逐步增加流量,直到所有人都使用最新版本。

该策略使团队能够在有限的用户群中发现问题,而不会影响所有用户。通过将部分流量导向新版本,金丝雀部署有助于降低发布风险。移动应用测试新界面、SaaS 平台验证性能改进,以及电子商务网站测试结账流程修改,都依赖于这种部署策略。

影子部署

影子部署会将生产流量同时复制到当前版本(为用户提供服务)和新版本(静默处理请求以进行测试)。用户不会接触影子版本,但团队可以针对实际工作量获得完整的性能验证。

影子部署允许系统在真实条件下测试新功能,而不会影响用户。搜索引擎使用它们来测试排名算法,推荐系统依靠它们来验证机器学习 (ML) 模型,欺诈检测系统使用它们来评估更新的规则。

A/B 测试部署

A/B 测试部署将不同的用户群体导向不同的应用配置,以衡量业务指标和用户行为。与专注于技术指标的金丝雀部署不同,A/B 测试评估功能的有效性和用户体验

产品团队还使用 A/B 测试部署来验证新用户界面、测试定价模型或评估推荐算法。

Kubernetes 部署与 Pod — StatefulSet 和 ReplicaSet

了解部署如何与其他 Kubernetes 资源配合使用,有助于阐明何时应采用每种方法。

Kubernetes 部署与 pod 的对比

Pod 是单独的应用程序实例,但直接管理它们很快就会变得复杂。Kubernetes 部署处理管理层,使团队能够专注于应用程序逻辑而不是容器编排。

Kubernetes 部署与 ReplicaSet

ReplicaSet 是 Kubernetes 对象,可确保正确数量的实例正在运行。Kubernetes 部署增加了变革管理,包括版本控制、更新和回滚功能,使应用程序更新更容易。

Kubernetes 部署与 StatefulSet

StatefulSet 是 Kubernetes 对象,用于维护持久身份和有序运营。Kubernetes 部署更适合无状态应用程序,其中 pod 可以被视为相同、可替换的单元,而 StatefulSet 处理需要稳定身份和顺序扩展的有状态应用程序。

最佳实践和注意事项

成功的 Kubernetes 战略需要扎实的操作实践,支持跨不同环境和应用程序类型进行可靠、可重复的部署:

  • 监控和可观测性
  • 健康检查和就绪探针
  • 自动化测试整合
  • 回滚规划和执行

监控和可观察性

Kubernetes 监控为团队提供对应用性能、业务指标、错误率和用户体验的可视化,使他们能够在部署过程中做出明智决策,并及早发现问题。

高级可观测性平台通过将部署跟踪与性能监控集成,将这一方法进一步提升,使团队能够将部署事件与系统行为及用户影响关联起来。

健康检查和就绪探针

正确配置的健康检查可确保新应用程序实例在接收流量之前功能齐全。这种机制可防止部署失败影响用户,并在发现问题时自动回滚。

Kubernetes 就绪探针不仅应验证应用是否正在运行,还应确保其已准备好处理生产流量,包括数据库连接、外部服务依赖以及任何必要的初始化流程。

自动化测试集成

自动化测试需要在多个阶段实施,包括单元测试、整合测试、端到端验证和性能测试。这种全面的方法有助于及早发现问题并降低生产问题的风险。

现代部署管道将测试与部署策略相结合,根据测试结果和性能指标(而不是手动审批流程)自动通过环境推动构建。

回滚规划和执行

有效的回滚策略需要在部署问题出现之前进行充分的准备和测试。团队必须了解如何快速恢复部署,预测潜在的数据一致性挑战,并建立明确的通信协议,以确保在发生问题时快速恢复。

集成 Kubernetes 部署策略

许多组织发现,与其将部署策略视为互斥选择,不如将多种方法结合使用能带来显著价值。这种混合方法充分利用了每种策略的优势,同时弥补了其局限性。

平台团队通常将滚动更新标准化为默认策略。蓝绿部署适用于关键应用,而金丝雀部署则用于高可见性功能。

大型组织在应用层级中实施不同策略:对面向用户的服务使用蓝绿部署,对内部 API 和微服务使用滚动更新,对批处理组件使用重新创建部署。

企业常在单一部署管道中组合多种策略:采用影子部署进行性能验证,随后通过金丝雀发布逐步向用户开放,并配备蓝绿部署能力以便在出现问题时实现即时回滚。

总结

战略性的部署选择决定了团队是能够自信交付,还是不断应对危机。在多种方法上表现出色的组织,能够从根本上提升交付能力,实现更快的迭代周期和更高的可靠性。通过针对现代应用开发中的每个独特场景定制方法,这一策略能够增强运营信心。

相关解决方案
IBM Red Hat OpenShift

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

探索 Red Hat OpenShift
容器解决方案

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

深入了解容器
云咨询服务

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

云服务
采取后续步骤

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

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