etcd Operator

etcd Operator #

$ 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"

本文访问量

本站总访问量

本站总访客数 人次