1. Operator组成
简单来说 Operator=Controller+CRD,Operator是由 Kubernetes自定义资源(CRD)和控制器(Controller)构成的云原生拓展服务,其中CRD定义了每个Operator需要创建和管理的自定义资源对象,底层实际就是通过APIServer接口在 ETCD 中注册一种新的资源类型,注册完成后就可以创建该资源类型的对象了。但是仅注册资源和创建资源对象是没有任何实际意义的,CRD 最重要的是需要配合对应的 Controller来实现自定义资源的功能,达到自定义资源期望的状态,比如内置的 DeploymentController用来控制 Deployment资源的功能,根据配置生成特定数量的Pod 监控其状态,并根据事件做出相应的动作。
2. Operator使用
用户想为自己的自定义资源构建一个KubernetesOperator,有很多工具可供选择,比如OperatorSDK、Kubebuilder,甚至可以使用OperatorSDK(Helm、Ansible、Go)。这些工具创建 KubernetesOperator 用来监控自定义资源,并且根据资源的变化调整资源状态,如图 1-9所示。
图 1—9Operator 使用
Operator作为自定义扩展资源以 Deployment的方式部署到 k8s中, 通过 List-Watch 方式监听对应资源的变化,当用户修改自定义资源中的任何内容时,Operator会监控资源的更改,并根据更改内容执行特定的操作,这些操作通常会对 KubernetesAPI中某些资源进行调用。