【笔记13】CRD与Operator

CustomResourceDefinition(CRD)

在Kubernetes中,像Pod、Service和Deployment这样的资源是由内置的资源类型如Pod、Service和Deployment表示的。而CustomResourceDefinition(CRD)允许你定义和创建自己的资源类型,以满足您的应用程序或基础设施需求。

一旦定义了CRD,可以通过Kubernetes API服务器创建和管理自定义资源的实例,就像处理任何其他本机资源一样。这意味着您可以使用熟悉的Kubernetes工具如kubectl或Kubernetes控制器与管理您的自定义资源进行交互。

CRD提供了一种扩展Kubernetes平台以适应特定要求的方式,并能够构建自定义的运算符或控制器来自动化管理自定义资源。运算符可以监视自定义资源的更改并相应地采取操作,例如提供额外的资源、扩展或执行自定义操作。

示例:

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  # 名字必需与下面的 spec 字段匹配,并且格式为 '<名称的复数形式>.<组名>'
  name: crontabs.stable.example.com
spec:
  # 组名称,用于 REST API: /apis/<组>/<版本>
  group: stable.example.com
  # 列举此 CustomResourceDefinition 所支持的版本
  versions:
    - name: v1
      # 每个版本都可以通过 served 标志来独立启用或禁止
      served: true
      # 其中一个且只有一个版本必需被标记为存储版本
      storage: true
      schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                cronSpec:
                  type: string
                image:
                  type: string
                replicas:
                  type: integer
  # 可以是 Namespaced 或 Cluster
  scope: Namespaced
  names:
    # 名称的复数形式,用于 URL:/apis/<组>/<版本>/<名称的复数形式>
    plural: crontabs
    # 名称的单数形式,作为命令行使用时和显示时的别名
    singular: crontab
    # kind 通常是单数形式的驼峰命名(CamelCased)形式。你的资源清单会使用这一形式。
    kind: CronTab
    # shortNames 允许你在命令行使用较短的字符串来匹配资源
    shortNames:
    - ct

常见字段:

  • apiVersion:指定所使用的 CRD API 的版本,此示例使用了 apiextensions.k8s.io/v1 版本。
  • kind:定义资源类型为 CustomResourceDefinition。
  • metadata:定义元数据,其中 name 字段指定了 CRD 的名称为 myresources.example.com。
  • spec:定义了 CRD 的规范。
  • spec.group:指定 CRD 所属的 API 组,此示例中为 example.com。
  • spec.versions:定义 CRD 的版本列表。
  • spec.versions.name:指定版本的名称,此示例中为 v1。
  • spec.versions.served:指定此版本是否由 API 服务器提供服务,设为 true 表示提供服务。
  • spec.versions.storage:指定此版本是否持久化存储数据,设为 true 表示持久化存储。
  • spec.versions.schema.openAPIV3Schema: 指定自定义资源的 OpenAPI v3 架构定义
  • spec.scope:指定资源的作用域,此示例中为 Namespaced,表示资源在命名空间级别进行管理。
  • spec.names:定义了资源的名称相关信息。
  • spec.names.plural:指定资源的复数形式名称,此示例中为 crontabs。
  • spec.names.singular:指定资源的单数形式名称,此示例中为 crontab。
  • spec.names.kind:指定资源的类型名称,此示例中为 CronTab。
  • spec.names.shortNames:指定资源的缩略名称列表,此示例中只包含一个缩略名称 ct。

Operator

Operator 是 Kubernetes 的扩展软件, 它利用定制资源管理应用及其组件。 Operator 遵循 Kubernetes 的理念,特别是在控制器方面。

Operator 模式 旨在记述(正在管理一个或一组服务的)运维人员的关键目标。 这些运维人员负责一些特定的应用和 Service,他们需要清楚地知道系统应该如何运行、如何部署以及出现问题时如何处理。

Kubernetes 的 Operator 模式概念允许你在不修改 Kubernetes 自身代码的情况下, 通过为一个或多个自定义资源关联控制器来扩展集群的能力。 Operator 是 Kubernetes API 的客户端, 充当自定义资源的控制器。

使用 Operator 可以自动化的事情包括:

  • 按需部署应用
  • 获取/还原应用状态的备份
  • 处理应用代码的升级以及相关改动。例如数据库 Schema 或额外的配置设置
  • 发布一个 Service,要求不支持 Kubernetes API 的应用也能发现它
  • 模拟整个或部分集群中的故障以测试其稳定性
  • 在没有内部成员选举程序的情况下,为分布式应用选择首领角色

常见使用场景:

  • 按需部署一个应用程序,并自动配置,比如Prometheus
  • 需要备份和恢复应用程序的状态,如MySQL数据库
  • 处理应用程序代码的升级以及相关更改,例如数据库架构或额外的配置设置
  • 发布一个服务,要让不支持Kubernetes API的应用程序能够发现
  • 模拟整个或部分集群中的故障以测试其弹性
  • 在没有内部成员选举程序的情况下为分布式应用程序选择领导者
  • 17
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值