Operator

simple example

Operator的主要目标是将工程师的逻辑转换为代码,以便实现原生Kubernetes无法完成的某些任务的自动化。

Operator由两个组件组成,自定义资源定义(CRD, Custom Resource Definition)和控制器(controller)。
控制器是特定于某种类型的资源的,但也可以对一组不同的资源执行CRUD(创建、读取、更新和删除)操作。
在Kubernetes的文档中举了一个控制器的例子: 恒温器。当我们设置温度时,告诉恒温器所需的状态,房间的实际温度就是当前的实际状态,恒温器通过打开或关闭空调,使实际状态更接近预期状态。
那管理器(manager)呢?该组件的目标是启动所有控制器,并使控制循环共存。假设项目中有两个CRD,同时有两个控制器,每个CRD对应一个控制器,管理器将启动这两个控制器并使它们共存。

完整链条

  1. 定义 CRD (Custom Resource Definition)

    • 使用 YAML 文件定义 CRD,它描述了一种新的 Kubernetes 资源类型(如 RedisCluster),并指定了这些资源的结构和字段。
    • 通过 kubectl apply -f crd.yaml 命令将 CRD 应用到 Kubernetes 集群中。
  2. 编写 Controller 逻辑

    • 使用 Go 语言编写 Controller,它负责监控和管理通过 CRD 创建的自定义资源(如 RedisCluster)。
    • Controller 监听 Kubernetes API 中与 CRD 相关的事件(如创建、更新、删除),并根据资源的状态做出相应的操作。
  3. 打包 Operator

    • 将编写好的 Controller 代码打包成 Docker 镜像,使其能够在 Kubernetes 中运行。
    • 使用 make docker-build 构建镜像,然后使用 make docker-push 将镜像推送到 Docker 仓库。
  4. 部署 Operator 到 Kubernetes

    • 通过 Operator SDK 自动生成的 YAML 文件,使用 kubectl apply -f config/deploy/ 将 Operator 部署到 Kubernetes 集群中。
    • 这个部署过程会创建一个 Deployment,启动一个 Pod 运行你的 Operator 镜像。
  5. 创建自定义资源实例

    • 使用 YAML 文件定义一个具体的自定义资源实例(如 RedisCluster),描述特定应用的配置。
    • 通过 kubectl apply -f rediscluster.yaml 创建这个实例,Kubernetes API 会将其存储并触发 Controller 的事件监听。
  6. Controller 监听和操作

    • Controller 监听到新的 RedisCluster 资源被创建的事件,读取其配置,并在 Kubernetes 集群中创建相应的资源(如 Pod、Service、StatefulSet 等)。
    • 之后,Controller 持续监控 RedisCluster 资源的状态,处理扩展、缩容、备份等操作。
  7. 状态反馈与更新

    • Controller 在 Kubernetes 集群中执行操作后,会将结果(如 Redis 集群的运行状态)更新到 RedisCluster 资源的 Status 字段。
    • Kubernetes API 会将这些状态信息存储并提供给用户或其他系统。
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值