IBM Cloud Docs
在 Kubernetes 上部署应用程序

在 Kubernetes 上部署应用程序

在本教程中,您将学习如何使用不同的部署策略创建开放式工具链。 您还将学习如何在 IBM Cloud® Continuous Delivery 服务中实施工具链,以及如何使用工具链开发和部署一个简单的网络应用程序(应用程序)。

本教程基于浏览器。 您还可以在 Terraform 中创建类似的开放式工具链,如 IBM Cloud Terraform Provider 示例 ibm-cd-toolchain-simple-helm中所示。

本教程使用具有 Kubernetes 作为部署目标的部署策略。 本教程中使用的工具链实现标准 DevOps 实践,例如代码扫描,验收测试,Git 存储库以及持续集成和持续交付功能。 创建 Kubernetes 集群和工具链后,更改应用程序的代码并将更改推送到 Git Repos and Issue Tracking 存储库。 将更改推送到存储库时,基于 Tekton 的交付管道会自动构建并部署代码。

Tekton 是一个与供应商无关的开放式源代码 Kubernetes本机框架,可用于构建,测试和部署应用程序。 Tekton 提供了一组共享组件,用于构建持续集成和持续交付系统。 作为开放式源代码项目,Tekton 由 Continuous Delivery Foundation管理。 目标是通过为管道,工作流程和其他构建块提供行业规范,实现持续交付现代化。 借助 Tekton,您可以通过抽象底层实现详细信息,在云提供者或本地系统之间进行构建,测试和部署。 Tekton 管道内置到 Continuous Delivery中。

本教程中使用的模板适用于 Kubernetes的 Standard 或 Lite 套餐。 通过标准套餐,您可以通过 DNS 名称来访问应用程序。 在轻量套餐中,可以使用 nodeport 来访问应用程序。

您可以使用部署策略以受控方式在生产环境中更新应用程序。 使用部署策略可提供以下优点:

  • 避免应用程序停机时间。
  • 在不影响客户的情况下启用新功能的生产测试。
  • 将生产问题的影响限制为一部分用户。
  • 如果发现问题,请启用到先前版本的快速回滚。

提供了许多可能的部署策略。 通常,它们依赖于运行应用程序的多个实例以及管理各种实例的更新方式。 您可以在 Continuous Delivery中预先配置以下公共部署策略:

基本
通过同时停止和更新所有正在运行的实例来部署新发行版,从而导致停机时间。 对于回滚,必须再次部署先前版本,这将导致额外的停机时间。 尽管此策略简单,快速且运行时资源需求较低,但它是最危险的策略,会导致停机时间。 对于必须具有高可用性的关键应用程序,建议不要使用基本部署策略。
滚动更新
与基本策略类似,此部署策略简单,快速且具有较低的运行时资源需求。 但是,由于每个正在运行的实例都已关闭并单独更新,因此避免了停机时间,因此回滚需要您再次部署先前发行版。 如果生产中应用程序的当前版本已损坏,那么此耗时方法可能会导致问题。
蓝绿部署 (blue-green deployment)
创建两个独立的永久生产环境 (蓝色和绿色),并且一次只有其中一个环境接收流量。 当前发行版始终部署到空闲环境,并且在部署完成后将流量切换到该环境,而不会出现停机时间。 由于只需要将流量切换到未更改的环境,因此回滚不会导致停机时间。 因为这个策略需要两个完整的生产环境,所以资源要求更高。 但是,此策略支持强大的开发者流,例如,在允许客户流量之前,能够在生产环境中测试新的应用程序版本。 Blue-Green 部署还支持快速回滚。
Canary 版本
部署与原始生产环境 (类似于 Blue-Green) 并行的新发行版,无停机时间。 将管理发送到已更新实例和原始实例的流量,以便在部署继续时,新版本可供受控制的用户子集使用。 随着时间的推移,发送到新版本的流量会增加,直到所有流量都发送到那里,此时您可以停止旧的生产环境。 为了在部署过程中快速回滚,您可以将所有流量路由到原始生产环境。 由于此策略仅在部署期间需要两个完整的生产环境,因此总体资源使用量低于 Blue-Green 部署的资源使用量。 Canary 发行版部署策略最慢地从先前发行版移至正在部署的软件的当前发行版。 Canary 部署允许组织在生产中并排测试两个不同的软件版本。

准备工作

在开始本教程之前,请确保您具有以下资源:

  • IBM Cloud 帐户。 根据您的 IBM Cloud 账户类型,访问某些资源可能会受到限制。 根据您的帐户计划限制,某些部署策略所需的某些功能可能不可用。 有关 IBM Cloud 帐户的更多信息,请参阅 设置 IBM Cloud 帐户升级帐户

  • Kubernetes 集群 和 API 密钥。 您可以使用 UI 或 CLI 来创建这些资源。 集群的配置可能需要一些时间。 在创建集群时,它将通过“部署”,“暂挂”和“就绪”阶段进行。 有关 Kubernetes 集群的更多信息,请参阅 Kubernetes 集群。 虽然可以将 Rolling 和 Blue-Green 部署用于轻量套餐,但必须为标准套餐创建 Kubernetes 集群。

  • Continuous Delivery 服务的实例。

  • 可选。 存储在私钥管理保险库文件中并从单个位置集中管理的私钥。 有关从各种私钥管理和数据保护产品中进行选择的更多信息,请参阅 管理 IBM Cloud 私钥。 如果您还没有所选私钥管理保险库提供程序的实例,请创建一个。

  • 可选。 使用容器注册表命令行创建的名称空间。 要创建名称空间,请从命令行输入以下命令:

    ibmcloud cr namespace-add <my namespace>
    

    或者,您可以在 Container Registry 页面上创建名称空间。 有关在此位置创建命名空间的更多信息,请参阅 IBM Cloud Container Registry 服务。

创建工具链

在此步骤中,您将创建 开发 Kubernetes 应用程序 工具链。 在工具链设置期间,将使用 IBM Cloud API 密钥和 Kubernetes 集群名称来配置目标 Kubernetes 集群。 稍后可以通过更新 Delivery Pipeline 配置来更改这些设置。 合并到目标 Git 存储库分支中的任何代码都将自动构建,验证并部署到 Kubernetes 集群中。

要创建 开发 Kubernetes 应用程序 工具链,请单击

创建工具链

或者,从IBM Cloud控制台,单击菜单图标汉堡包图标>平台自动化>工具链。 在“工具链”页面,单击“创建工具链”。 在创建工具链页面,单击开发Kubernetes应用程序

配置工具链名称和区域

复查工具链设置的缺省信息。 工具链的名称在 IBM Cloud 中起到标识符的作用。 确保工具链的名称在工具链中对于 IBM Cloud中的相同区域和资源组是唯一的。

工具链区域可能与集群和注册表区域不同。

Kubernetes secure app toolchain name and region
Kubernetes secure app toolchain name and region

选择部署策略

工具链将创建持续部署管道以在 IBM Cloud® Kubernetes Service上部署应用程序 Docker 映像。 选择要使用的部署策略。 根据您选择的部署策略 (Rolling,Blue-Green 或 Canary),必须提供更多详细信息。

  1. 单击要用于工具链的部署策略。

    Kubernetes secure app deployment strategies
    Deployment strategies

  2. 单击继续

配置应用程序源代码存储库

在“应用程序”步骤中,缺省情况下会显示应用程序源代码存储库的建议选项。 要查看底层 Git 集成的所有可用选项,请单击 高级选项。 缺省情况下,工具链使用缺省样本,该样本将样本应用程序克隆为 IBM托管的 Git Repos and Issue Tracking 存储库。

Kubernetes secure app repository
Kubernetes secure app repository

您可以更改应用程序存储库的名称。 存储库的区域仍与工具链的区域相同。

工具链模板提供了 样本 NodeJS 应用程序。 如果您想为工具链链接现有的应用程序仓库,请选择 “自带应用程序”,并指定仓库的 URL。 该工具链仅支持链接到现有的 Git Repos and Issue Tracking 存储库。

缺省情况下,会将应用程序存储库模板克隆到 Git Repos and Issue Tracking 组织。 要更改组织,请启用 高级选项 并指定存储库所有者。

配置库存存储库

库存存储库记录由持续集成工具链构建的工件的详细信息。 您可以创建作为 库存存储库模板 的克隆的新库存存储库,也可以使用您在工具链之间共享的现有库存存储库。

Kubernetes secure app inventory repo
Kubernetes secure app inventory repo

缺省情况下,会将库存存储库模板克隆到 Git Repos and Issue Tracking 组织。 要更改组织,请选择 高级选项 并指定存储库所有者。

安全地存储私钥

此工具链中的多个工具需要私钥,例如 IBM Cloud API 密钥。 必须将所有私钥安全地存储在私钥保险库中,并根据工具链的要求进行引用。

通过使用 IBM Cloud,您可以从各种私钥管理和数据保护产品中进行选择,以帮助您保护敏感数据并集中私钥。 在“私钥”步骤中,可以指定要在工具链中添加或除去的私钥保险库集成。 有关添加和除去保险库文件集成的更多信息 (包括先决条件和使用提示),请参阅 管理 IBM Cloud 私钥

通过在模板中使用提示,将使用预先配置的私钥自动填充工具链; 您无需从附加到工具链的保险库文件集成中手动选择私钥。

本教程使用 IBM Secrets Manager 作为私钥保险库。

Kubernetes secure app secrets options
Kubernetes secure app secrets options

IBM Secrets Manager 可安全地存储和应用属于工具链的私钥,例如 API 密钥,图像签名或 HashiCorp 凭证。

Kubernetes secure app secrets options
Kubernetes Secure app secrets options

有关在 IBM Key Protect 或 HashiCorp, 中管理机密的更多信息,请参阅 机密

配置部署目标

配置要将应用程序部署到的目标 Kubernetes 集群。 在应用程序通过构建,测试和扫描阶段后,管道会将构建的应用程序映像部署到目标 Kubernetes 集群。 现在,此部署已准备好进行验收测试或集成测试。

如果 API 密钥具有必需的访问权,那么将使用创建的 API 密钥,从保险库文件中检索的 API 密钥或手动指定的 API 密钥自动装入以下字段。 如果 API 密钥有效,那么将自动填充容器注册表区域和名称空间集群区域,名称,名称空间和资源组的值。 您可以更新其中任何字段以与您的配置相匹配。

  • 应用程序名称: 应用程序的名称。 缺省应用程序名称为 hello-containers

  • IBM Cloud API 密钥: 用于在多个任务中与 ibmcloud CLI 工具进行交互的 API 密钥。 使用下列其中一种方法来指定要使用的 API 密钥:

    • 单击密钥图标以从您选择的私钥保险库导入现有 API 密钥。
    • 复制并粘贴现有 API 密钥。
    • 单击 新建 以创建 API 密钥。
    • 如果您没有现有 API 密钥,请生成新的 api-key

    您可以立即将生成的 API 密钥保存到您选择的现有密钥保险库。

将使用您指定的部署策略来部署应用程序。 以下示例显示了“滚动”或“蓝绿”部署的详细信息。

Kubernetes secure app deployment target details for Rolling or Blue-Green
Kubernetes secure app Rolling deployment target details

如果选择了 Canary 部署策略,那么必须指定额外的部署目标详细信息。

  • Canary 步骤大小: 定义要重定向到 Canary 部署的新发行版的流量。

  • Canary 步骤时间间隔: 定义要移至 Canary 部署的新发行版的每个 Canary 测试之间的时间间隔。

Kubernetes secure app deployment target details for Canary
Kubernetes secure app Canary deployment target details

添加可选工具集成

您可以将 IBM Cloud® DevOps Insights 工具集成添加到工具链,而无需任何其他配置。

DevOps Insights 包含在创建的工具链中。 您不需要为 DevOps Insights提供任何配置步骤。 连续集成管道自动使用工具链中包含的 DevOps Insights 实例。DevOps Insights 聚集代码,测试,构建和部署数据,以提供对所有团队和发行版的速度和质量的可视性。

单击继续

完成工具链设置

在摘要页面,单击创建。 此时将自动运行数个步骤,以设置工具链。

您可以在创建管道后配置各个工具链集成。

Kubernetes secure app toolchain Summary
Kubernetes secure app toolchain summary

探索新的工具链

创建工具链后,它将在图中显示属于工具链的每个工具集成。

浏览管道

您可以浏览管道以了解工具链流以及在每个管道中运行的不同操作。 您刚刚创建的工具链包含三个管道:

  • 拉取请求管道: 当开发者将其开发分支中的更改合并到主分支或存储库中的任何其他分支时运行。 拉取请求管道在应用程序源代码上运行单元测试和静态扫描。
  • 持续集成管道: 将更改合并到应用程序源代码存储库的主分支时运行。 持续集成管道在应用程序源代码,CIS 检查和材料清单 (BOM) 检查上运行“单元测试”,“代码覆盖”和“静态扫描”。 持续交付管道还会生成二进制构建工件,并将它们上载到工具链中配置的 IBM Cloud® Kubernetes Service。 持续集成管道生成构建工件的元数据并将其存储在“库存”存储库中。
  • 持续部署管道: 将构建工件部署到部署环境。 管道通过运行运行状况检查来验证应用程序的成功部署。 在连续集成管道成功完成后,必须手动触发此管道。 根据您选择的部署策略,会向持续交付管道添加更多触发器。

运行拉取请求和持续集成管道

要启动拉取请求管道,请在应用程序存储库中创建合并请求:

  1. 在“工具链的概述”页面上的 存储库 卡上,单击 compliance-app-<timestamp> 应用程序存储库。
  2. 从主存储库中,创建分支。
  3. 更新样本节点应用程序或自述文件中的一些代码并保存这些更改。
  4. 提交合并请求。
  5. 在“工具链的概述”页面上的 存储库 卡上,单击 pr-pipeline 存储库以启动拉取请求管道。 应用程序存储库中的相应合并请求将保持处于暂挂状态,直到拉取请求管道的所有阶段成功完成为止。
  6. 在拉取请求管道运行成功后,您可以选择该管道以浏览已完成的步骤。

拉取请求管道成功
拉取请求管道
*

要启动持续集成管道,请在应用程序存储库中合并持续集成合并请求:

  1. 转至合并请求。
  2. 合并请求,以便将更改复制到应用程序存储库的主分支。 将自动触发持续集成管道。
  3. 在“持续集成工具链概述”页面上的 存储库 卡上,单击 ci-pipeline 存储库以启动持续集成管道。
  4. 连续集成管道运行成功后,您可以单击管道运行以探索已完成的步骤。

持续集成管道成功
持续集成管道成功*持续集成管道

左移练习

在安全应用开发世界中,左移是一种防止和发现缺陷和安全漏洞等问题,并在软件交付过程早期运行合规性检查的做法。 左移包括以下实践:

  • 尽早运行可对代码或存储库本身运行的检查,并且不需要构建的映像。 这些检查可防止不合规代码合并到存储库的主分支中。 由于未从拉取请求管道收集证据,因此其目标是将合规性检查尽可能向左移。
  • 所有检查都在每次管道运行中运行。 如果先前检查失败,那么管道将前进到下一个检查。 要评估运行中是否有任何故障,请检查具有管道评估程序的管道的最后一步。

单元测试和漏洞扫描的结果将发布到工具链中的 DevOps Insights 实例。 要查看这些结果,请单击工具链中的 DevOps Insights 磁贴,然后转至“质量仪表板”页面。

工具链持续集成结果
工具链持续集成
*

要评估管道运行中是否有任何故障,请检查管道的最后一个步骤,该步骤具有管道评估程序。

探索持续交付管道

拉取请求和持续集成管道在所有部署策略中通用。 持续交付管道设计和实现更改基于您先前在本教程中选择的部署策略。

本教程演示了如何使用样本应用程序来执行滚动部署策略。

探索滚动部署

本教程中使用的滚动部署策略演示了如何将部署策略与 Continuous Delivery 服务配合使用,以在 Kubernetes上运行生产工作负载。 持续交付管道为滚动部署提供了两个触发器。 您可以通过以下任一方式启动持续交付管道:

  • 手动触发持续交付管道。
  • 在库存存储库中的每个 Merge 操作后自动触发持续交付管道。 合并后,必须手动触发持续交付管道运行。

Git Repos and Issue Tracking 触发器设置为触发自动持续交付管道,但缺省情况下已禁用。 您可以在首次提升更改后启用此触发器。

用于滚动部署的持续交付管道触发器
用于滚动
的持续交付管道触发器* 持续交付管道中的触发器

由于滚动部署策略会以递增方式使用新软件版本更新所有生产实例,因此不会产生任何停机时间。 但是,回滚部署策略要求您重新部署先前发行版,这可能需要一些时间才能完成。

在持续交付管道运行成功后,您可以在持续交付管道的 perform deployment 步骤中找到 URL 应用。

滚动部署的App URL
持续交付管道中的应用程序 URL

后续步骤

如果要除去正在 Kubernetes上运行的样本应用程序,那么必须清除 Kubernetes 集群:

  1. 转至 Kubernetes 集群 主页。

  2. 选择运行样本应用程序的集群。

  3. 单击 Kubernetes 仪表板

  4. 从运行样本应用程序的位置,选择 名称空间

    Kubernetes namespace
    Kubernetes namespace

  5. 删除所选名称空间中列出的相关部署,服务和入口。

寻求帮助?

IBM Cloud 的AI助手,由 IBM 的 watsonx 提供支持,旨在帮助您了解如何在 IBM Cloud 中工作,以及如何使用可用产品和服务目录构建解决方案。 请参阅 “从人工智能助手获取帮助”。

有关更多支持选项,请参阅 获取 Continuous Delivery 的帮助和支持。