Operator

Operator #

Operator 的工作原理 #

利用了 Kubernetes 的自定义 API 资源(CRD),来描述我们想要部署的 “有状态应用”; 然后在自定义控制器里,根据自定义 API 对象的变化,来完成具体的部署和运维工作。

所以,编写一个 Etcd Operator,与编写一个自定义控制器的过程,没什么不同。


Operator 开发 #

Kubebuilder #

kubernetes-sigs/kubebuilder Github stars Language Last Tag Last commit

https://kubebuilder.io

operator-framework/operator-sdk Github stars Language Last Tag Last commit #

SDK for building Kubernetes applications. Provides high level APIs, useful abstractions, and project scaffolding.

https://sdk.operatorframework.io

kudobuilder/kudo Github stars #

GoogleCloudPlatform/metacontroller Github stars #

Lightweight Kubernetes controllers as a service https://metacontroller.app/

可与 Webhook 结合使用,以实现自己的功能。


operator-framework/operator-lifecycle-manager Github stars #

A management framework for extending Kubernetes with Operators



Operator 示例 #

coreos/etcd-operator Github stars #

Etcd Operator #

coreos/etcd-operator Github stars

$ git clone https://github.com/coreos/etcd-operator

# 因为,Etcd Operator 需要访问 Kubernetes 的 APIServer 来创建对象
# 为 Etcd Operator 创建 RBAC 规则
$ example/rbac/create_role.sh

Etcd Operator 本身,其实就是一个 Deployment

而一旦 Etcd Operator 的 Pod 进入了 Running 状态,你就会发现,有一个 CRD 被自动创建了出来

这个 CRD 名叫 etcdclusters.etcd.database.coreos.com

实际上是在 Kubernetes 里添加了一个名叫 EtcdCluster 的自定义资源类型(CRD)。

而 Etcd Operator 本身,就是这个 CRD 对应的自定义控制器

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: etcd-operator
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: etcd-operator
    spec:
      containers:
        - name: etcd-operator
          image: quay.io/coreos/etcd-operator:v0.9.2
          command:
            - etcd-operator
          env:
            - name: MY_POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: MY_POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name

当 Etcd Operator 部署好之后,接下来在这个 Kubernetes 里创建一个 Etcd 集群的工作就非常简单了。

你只需要编写一个 EtcdCluster 的 YAML 文件,然后把它提交给 Kubernetes

$ kubectl apply -f example/example-etcd-cluster.yaml

example-etcd-cluster.yaml 定义的是 EtcdCluster 这个 CRD 的一个具体实例, 也就是一个 Custom Resource(CR)

EtcdCluster 的 spec 字段非常简单。其中,size=3 指定了它所描述的 Etcd 集群的节点个数。 而 version=“3.2.13”,则指定了 Etcd 的版本,仅此而已。

而真正把这样一个 Etcd 集群创建出来的逻辑,就是 Etcd Operator 要实现的主要工作

apiVersion: "etcd.database.coreos.com/v1beta2"
kind: "EtcdCluster"
metadata:
  name: "example-etcd-cluster"
spec:
  size: 3
  version: "3.2.13"

zookeeper operator #


参考 #


本文访问量

本站总访问量

本站总访客数