内容


利用 Operator 为 Kubernetes 应用简化生命周期管理流程

将 IBM Cloud Operator 添加到工具箱并使用 OpenShift 以 Kubernetes 原生方式管理资源

Comments

您是否正在 Kubernetes 集群上部署应用程序,并希望为应用程序或其组件简化生命周期管理流程?您也可能正在寻找更简单的方法来管理在集群上部署第三方应用程序的过程。Operator 能够以 Kubernetes 原生方式来管理应用程序和组件,并可以显著简化您的日常工作。使用 Operator 将 Kubernetes 上的应用程序或组件作为资源来管理时,您会获得更完整的资源生命周期控制权。您可以将用于 Kubernetes 资源的同类声明式模型用于整个应用程序或服务。

本教程展示了 IBM Cloud Operator Red Hat OpenShift on IBM Cloud ™ 示例。

前提条件

本教程建立在以下两个基础之上:对 Kubernetes 有个基本了解;能够访问 OpenShift 或上游 Kubernetes 集群。要使用 IBM Cloud Operator 从目录创建服务实例,就需要一个 IBM Cloud 帐户,并且需要安装 IBM Cloud CLI

预估时间

阅读本教程并尝试操作示例大约需要 30 分钟。

Operator 简介

Kubernetes 作为领先的容器编排项目之所以如此成功,其中一个原因就在于其可扩展性。借助自定义资源,开发者可以扩展 Kubernetes API 以管理超出原生对象范围外的资源(例如,pod 和服务)。此外,Kubernetes Go Client 提供了强大的资源库,用于为自定义资源编写控制器。控制器实施闭环控制逻辑,通过持续运行对资源的期望状态与所观测到的状态进行协调。

Operator 将特定于应用程序的控制器与相关自定义资源组合在一起,编撰特定领域的知识,用于管理资源生命周期。第一组 Operator 起初聚焦于 Kubernetes 中运行的有状态服务,但近年来,Operator 的范围越来越广泛,如今社区为各种广泛用例构建的 Operator 数量正与日俱增。例如,OperatorHub.io 提供了一个社区 Operator 目录,用于处理各种不同种类的软件和服务。

Operator 的吸引力如此之大,原因有多种。如果您已在使用 Kubernetes 来部署和管理应用程序或更大的解决方案,Operator 可提供一致的资源模型来定义和管理应用程序中的所有不同组件。例如,如果应用程序需要 etcd 数据库,那么只需安装 etcd Operator 并创建 EtcdCluster 自定义资源即可。etcd Operator 随后就会负责为应用程序部署和管理 etcd 集群,包括次日操作,如备份和复原。由于 Operator 依赖于自定义资源,即 Kubernetes API 扩展,因此默认情况下,Kubernetes 的所有现有工具都适用。无需学习新工具或新方法。您可以使用同样的 Kubernetes CLI ( kubectl ) 来创建、更新或删除 Pod 和自定义资源。对于自定义资源来说,基于角色的访问控制 (RBAC) 和准入控制的工作方式是相同的。

那么集群外部的应用程序组件情况又如何呢?Operator 在这方面同样可以提供帮助。例如,假设您正在编写需要语言翻译的应用程序。您可以使用基于云的服务,例如,Watson Language Translator。要使用此服务,您就需要使用 IBM Cloud 目录或命令行界面并从中配置此服务,然后创建服务凭证,并将凭证复制到可供 pod 轻松访问的 Kubernetes 密钥中。通常,此过程中涉及若干手动步骤,但 Operator 可以自动执行这些步骤。

借助 Operator,您可以像在 Kubernetes 中创建任何其他资源一样来创建翻译程序服务的实例。无需采用超出范围的步骤或脚本来创建外部资源。只需通过一组 Kubernetes 模板来描述自己的应用程序(包括外部依赖项),并直接通过 kubectl apply 部署整个应用程序和依赖项即可。

此外,由于 Operator 可持续将期望状态与当前状态进行比较并加以协调,因此 Operator 可提供自我修复功能,并确保重新启动服务(如果服务不正常或遭意外删除,则可重新创建)。

IBM Cloud 目录

此 Watson Language Translator 示例并非唯一用例。对于注入 AI 功能(无论是添加语言处理、图像分类和标记还是对话框等功能)的应用程序,使用来自 IBM Cloud 目录的 Watson 服务这种情况极其常见。来自该目录的服务涉及各种范围广泛的功能,包括 AI 和机器学习、数据存储和分析、集成和消息传递以及天气和物联网等。

要使用其中任一服务,就需要从目录配备该服务来创建服务实例。配备步骤基本上就是对 IBM Cloud 执行 API 调用,请求将特定服务类型的实例与期望的计划相结合。您可以选择服务的免费版本和付费版本。

对于在 Kubernetes 中运行的应用程序,使用来自 IBM Cloud 目录的组件有何益处?对于 Language Translator 之类的服务或 Weather Company API,这些功能当前仅作为管理服务来提供。

但对于开源数据库(如 PostgreSQL),可以在集群内通过技术方式为数据库添加 pod。但这样做会导致需要将某种持久存储与该 pod 进行绑定,而且该存储需要高可用性支持,并制定相应的备份计划。同时,还存在安全性和合规性的问题。通过选择自主管理数据库,必须完成必要的步骤,为 PostgreSQL 中存储的数据完整记录相应的安全合规性。另一方面,通过使用 IBM Cloud Database for PostgreSQL,持久存储、高可用性、自动备份、符合 HIPPA 以及 SOC 1 Type 1 与 SOC 2 Type 1 要求的安全性则全部通过管理服务来处理。

虽然将开源数据库部署为 pod 可以减少开发集群方面的成本,但对于生产部署而言,IBM Cloud 目录管理服务才是更有价值的选择。

配置 Operator Lifecycle Manager

正如上文中提到的,OperatorHub.io 提供了社区 Operator 目录。但是,如何才能将 Operator 目录中的 Operator 安装到您的集群中?Operator 的生命周期又是如何管理的?答案很简单:通过另一个 Operator。Operator Lifecycle Manager (OLM) 引入了自定义资源,用于定义描述和管理 Operator 生命周期所需的所有要素。

ClusterServiceVersion 是封装所有元数据的核心资源,包括描述、版本、作者、功能、依赖项,以及安装和更新 Operator 所需的所有信息。OLM 使用可用 Operator 的本地目录,该目录通过另一个 Operator 与 OperatorHub.io 保持同步 - 即 Marketplace Operator。OLM 与 Marketplace Operator 的组合提供了安装 Operator 的功能,并且还可以通过无线 (OTA) 更新来自动接收和应用每个已安装 Operator 的更新。您可以将 OLM 和 Marketplace Operator 安装在任意上游 Kubernetes 发行版中,从而便于访问 OperatorHub.io 中与日俱增的社区 Operator 集合。如果您使用的是 OpenShift V4,那么可以跳过此部分中的步骤,因为默认情况下,OLM 和 Marketplace Operator 已配置并且正常运行。

第 1 步. 在集群中安装 OLM 的最新发行版

运行以下命令:

kubectl apply -f https://github.com/operator-framework/operator-lifecycle-manager/releases/download/0.10.0/crds.yaml
kubectl apply -f https://github.com/operator-framework/operator-lifecycle-manager/releases/download/0.10.0/olm.yaml

第 2 步. 安装 Marketplace Operator

克隆项目:

git clone https://github.com/operator-framework/operator-marketplace.git

然后运行以下命令:

kubectl apply -f operator-marketplace/deploy/upstream/

第 3 步. 配置 Marketplace Operator 名称空间

OperatorGroup 资源添加到 marketplace-operators 名称空间。此步骤支持从 OperatorHub.io 安装 Operator。

kubectl apply -f - <<END
apiVersion: operators.coreos.com/v1alpha2
kind: OperatorGroup
metadata:
  name: marketplace-operators
  namespace: marketplace
END

第 4 步. (可选)安装 Operator

有了 OLM 和 Marketplace Operator 后,现在即可轻松安装 OperatorHub.io 目录中的任意 Operator。例如,可通过以下命令安装 etcd Operator:

kubectl create -f https://operatorhub.io/install/etcd.yaml

配置 IBM Cloud Operator

IBM Cloud Operator 以 Kubernetes 原生方法来提供和配置 IBM Cloud 服务,将其作为 Kubernetes 应用程序的一部分。Operator 提供了两个自定义资源:"服务"和"绑定"。"服务"用于创建来自 IBM Cloud 目录的任意服务的实例。"绑定"用于在 Kubernetes 中自动创建服务凭证和对应的密钥。在安装 OperatorHub.io 目录中的 Operator 之前,需要完成几个步骤。由于您正在提供 IBM Cloud 服务,因此需要一个 IBM Cloud 帐户和 IBM Cloud CLI

第 1 步. 登录到 IBM Cloud

使用 IBM Cloud CLI 登录到 IBM Cloud 帐户:

ibmcloud login

使用以下命令为 Cloud Foundry 资源选择目标环境:

ibmcloud target --cf

使用以下命令检查是否已设置默认资源组:

ibmcloud target

如果未设置默认资源组或者需要使用其他资源组,那么可使用以下命令进行设置:

ibmcloud target -g <resource group name or ID>

第 2 步. 为 Operator 配置 API 密钥

使用以下脚本,利用您的 IBM Cloud API 密钥为 Operator 生成默认配置和密钥:

curl -sL https://raw.githubusercontent.com/IBM/cloud-operators/master/hack/config-operator.sh | bash

第 3 步. 使用 OLM 安装来自目录的 Operator

该目录为每个 Operator 提供了要安装资源的 URL。使用以下命令安装 IBM Cloud Operator:

kubectl create -f https://operatorhub.io/install/ibmcloud-operator.yaml

第 4 步. 创建公共云服务的实例

安装 Operator 后,可以在 IBM Cloud 上使用以下自定义资源创建公共云服务的实例:

apiVersion: ibmcloud.ibm.com/v1alpha1
kind: Service
metadata:
  name: myservice
spec:
  plan: <PLAN>
  serviceClass: <SERVICE_CLASS>

要查找 <SERVICE_CLASS> 的值,可以使用以下命令列出所有 IBM Cloud 服务的名称:

ibmcloud catalog service-marketplace

找到 <SERVICE_CLASS> 名称后,可以使用以下命令列出可用计划以选择 <PLAN>

ibmcloud catalog service <SERVICE_CLASS> | grep plan

例如,要创建 Watson Translator Service 的实例,可以使用以下自定义资源(将此资源定义保存到名为 mytranslator-service.yaml 的文件中):

apiVersion: ibmcloud.ibm.com/v1alpha1
kind: Service
metadata:
  name: mytranslator
spec:
  plan: lite
  serviceClass: language-translator

此外,可以使用以下绑定资源为服务创建凭证和 Kubernetes 密钥(将此资源定义保存到名为 mytranslator-binding.yaml 的文件中):

apiVersion: ibmcloud.ibm.com/v1alpha1
kind: Binding
metadata:
  name: binding-translator
spec:
  serviceName: mytranslator
  secretName: translator-secret

第 5 步. 创建服务实例和绑定

如果采用了服务和绑定资源文件的建议名称,请使用以下命令:

kubectl create -f mytranslator-service.yaml
kubectl create -f mytranslator-binding.yaml

就这么简单!添加完这些资源后,即可创建服务实例,并且将服务凭证绑定为当前名称空间内的 Kubernetes 密钥。不仅如此,由于 IBM Cloud Operator 根据您的云帐户的特定环境(例如,资源组、区域)自动使用默认设置,您的模板组可移植并可轻松部署到其他环境中。您可将模板传送到 DevOps 流程中或者与组织内其他开发者共享,以便这些开发者能够通过 kubectl create 来启动整个应用程序及依赖项。

结束语

在本教程中,您了解了 Operator,IBM Cloud Operator 还有诸多强大功能,这里只是点到为止。要了解更多高级功能(例如,自我修复以及链接至现有服务的功能),可参阅 IBM Cloud Operator 项目文档

参考资源

本文翻译自:Simplify the lifecycle management process for your Kubernetes apps with operators(2019-08-01)


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Cloud computing
ArticleID=1066460
ArticleTitle=利用 Operator 为 Kubernetes 应用简化生命周期管理流程
publish-date=08152019