Creating applications from Operator Backed

目录

了解 Operator Backed 应用

Operator 是基于 Kubernetes 自定义控制器和自定义资源定义(CRD)构建的扩展机制,旨在自动化复杂应用的完整生命周期管理。在 Alauda Container Platform 中,Operator Backed 应用指通过预集成或用户自定义的 Operator 创建的应用实例,其运行流程由 Operator Lifecycle Manager (OLM) 管理,包括安装、升级、依赖关系解析和访问控制等关键环节。

核心能力

  1. 复杂操作自动化:Operator 克服了 Kubernetes 原生资源(如 Deployment、StatefulSet)在管理有状态应用时的局限性,解决分布式协调、持久存储和版本滚动更新等复杂问题。例如:Operator 编码逻辑实现数据库集群故障切换、跨节点数据一致性和备份恢复的自主操作。

  2. 声明式、状态驱动架构:Operator 通过基于 YAML 的声明式 API 定义期望的应用状态(如 spec.replicas: 5),持续对比实际状态与声明状态,实现自愈能力。与 GitOps 工具(如 Argo CD)深度集成,确保环境配置一致性。

  3. 智能生命周期管理

    • 滚动更新与回滚:OLM 的 Subscription 对象订阅更新通道(如 stable、alpha),触发 Operator 及其管理应用的自动版本迭代。
    • 依赖关系解析:Operator 动态识别运行时依赖(如特定存储驱动、CNI 插件),确保部署成功。
  4. 标准化生态集成:OLM 规范 Operator 打包(Bundle)和分发渠道,实现从 OperatorHub 或私有仓库一键部署生产级应用(如 Etcd)。企业增强:Alauda Container Platform 扩展 RBAC 策略和多集群分发能力,满足企业合规需求。

Operator Backed 应用 CRD

该 Operator 设计与实现充分借鉴开源社区标准和方案,其自定义资源定义(CRD)设计融合了 Kubernetes 生态中成熟的最佳实践和架构模式。CRD 设计参考资料:

  1. CatalogSource:定义集群可用的 Operator 包来源,如 OperatorHub 或自定义 Operator 仓库。

  2. ClusterServiceVersion (CSV):Operator 的核心元数据定义,包含名称、版本、提供的 API、所需权限、安装策略及详细生命周期管理信息。

  3. InstallPlan:安装 Operator 的实际执行计划,由 OLM 根据 Subscription 和 CSV 自动生成,详细描述创建 Operator 及其依赖资源的具体步骤。

  4. OperatorGroup:定义 Operator 提供服务和资源调和的目标命名空间集合,同时限制 Operator 的 RBAC 权限范围。

  5. Subscription:声明用户希望在集群中安装和跟踪的特定 Operator,包括 Operator 名称、目标通道(如 stable、alpha)和更新策略。OLM 利用 Subscription 创建和管理 Operator 的安装及升级。

通过 Web 控制台创建 Operator Backed 应用

  1. Container Platform 中,导航至左侧栏的 Applications > Applications

  2. 点击 Create

  3. 选择 Create from Catalog 作为创建方式。

  4. 选择一个 Operator Backed 实例并配置 Custom Resource Parameters。选择一个 Operator 管理的应用实例,并在 CR 清单中配置其自定义资源(CR)规格,包括:

    • spec.resources.limits(容器级资源限制)。
    • spec.resourceQuota(Operator 定义的配额策略)。其他 CR 特定参数,如 spec.replicasspec.storage.className 等。
  5. 点击 Create

Web 控制台将跳转至 Applications > Operator Backed Apps 页面。

INFO

注意: Kubernetes 资源创建过程需要异步调和,完成时间取决于集群状态,可能需要几分钟。

故障排查

若资源创建失败:

  1. 查看控制器调和错误:
    kubectl get events --field-selector involvedObject.kind=<Your-Custom-Resource> --sort-by=.metadata.creationTimestamp
  2. 验证 API 资源是否可用:
    kubectl api-resources | grep <Your-Resource-Type>
  3. 在确认 CRD/Operator 准备就绪后重试创建:
    kubectl apply -f your-resource-manifest.yaml