etcd
kubernetes

etcd-opratorについて

More than 1 year has passed since last update.

この記事はKubernetes Advent Calendar 2016の14日目の記事です。

CoreOSが開発しているetcd-operatorを試してみたので、その内容を書いていきたいと思います。
今回は公式リポジトリのサンプルを利用して試してみました。

etcd-operatorとは

Operatorと呼ばれるKubernetes上で状態を維持するためのツールを使用して、
軽量KVSであるetcdのクラスタの作成・設定・管理を容易にしてくれるソフトウェアです。

環境

ローカルにminikubeを使用してkubernetesの環境を用意しました。

  • MacOS (El Capitan) ver10.11.6
  • minikube v0.13.1
  • VirtualBox v5.0.26

使用方法

はじめに、公式リポジトリ内の定義ファイルを使用する為にリポジトリをクローンしてきます。

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

etcd-operatorの作成

公式リポジトリ内の定義ファイルを使用してetcd-operatorを作成します。

$ cat example/deployment.yaml

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
          env:
          - name: MY_POD_NAMESPACE
            valueFrom:
              fieldRef:
                fieldPath: metadata.namespace

$ kubectl create -f example/deployment.yaml
deployment "etcd-operator" created

etcd-operatorは作成されると自動でThridPartyResourceを追加します。

$ kubectl get thirdpartyresources
NAME                      DESCRIPTION             VERSION(S)
etcd-cluster.coreos.com   Managed etcd clusters   v1

etcdクラスタの構築

次に、下記定義ファイルを使用してetcdクラスタを構築します。

$ cat example/example-etcd-cluster.yaml

apiVersion: "coreos.com/v1"
kind: "EtcdCluster"
metadata:
  name: "example-etcd-cluster"
spec:
  size: 3
  version: "v3.1.0-alpha.1" 

$ kubectl create -f example/example-etcd-cluster.yaml
etcdcluster "example-etcd-cluster" created

example-etcd-cluster.yaml内のsizeが3となっていますが、これがetcdクラスタの数になります。この数は自由に変更可能です。今回はデフォルトのままにしています。

作成したetcdクラスタの実態はPodと、Serviceとなり、クラスタの数だけそれぞれ作成されます。
今回だとPodとServiceが3つずつ作成されている事を確認できます。

$ kubectl get pods
example-etcd-cluster-0000       1/1       Running   0          50s
example-etcd-cluster-0001       1/1       Running   0          22s
example-etcd-cluster-0002       1/1       Running   0          7s

$ kubectl get svc
example-etcd-cluster-0000   10.0.0.35    <none>        2380/TCP,2379/TCP   1m
example-etcd-cluster-0001   10.0.0.42    <none>        2380/TCP,2379/TCP   57s
example-etcd-cluster-0002   10.0.0.94    <none>        2380/TCP,2379/TCP   42s

これでetcd-operatorとetcdクラスタの構築ができました。

構築ができたので、etcdクラスタのスケールアウトを試していきたいと思います。

etcdクラスタのスケールアウト

本来であれば上記example-etcd-cluster.yaml内のsizeを変更するだけでクラスタのサイズが変更できるはずなのですが、2016/12現在不具合があるようでcurlを使用した回避方法が提供されています。

curlを利用してスケールアウトさせる為に事前にプロキシを起動させます。

$ kubectl proxy --port=8080

プロキシ起動後、下記内容のjsonファイルを作成します。

body.json
{
  "apiVersion": "coreos.com/v1",
  "kind": "EtcdCluster",
  "metadata": {
    "name": "example-etcd-cluster",
    "namespace": "default"
  },
  "spec": {
    "size": 5
  }
}

ここで指定しているsizeがクラスタの数になるので、現在の3より大きい5を指定します。
準備ができたらbody.jsonをcurlでPUTしてスケールアウトさせます。

$ etcd-operator shinichi$ curl -H 'Content-Type: application/json' -X PUT --data @body.json http://127.0.0.1:8080/apis/coreos.com/v1/namespaces/default/etcdclusters/example-etcd-cluster

curlでのPUT実行あと、下記コマンドでetcdクラスタを確認してみます。

NAME                            READY     STATUS    RESTARTS   AGE
example-etcd-cluster-0000       1/1       Running   0          25m
example-etcd-cluster-0001       1/1       Running   0          24m
example-etcd-cluster-0002       1/1       Running   0          24m
example-etcd-cluster-0003       1/1       Running   0          12m
example-etcd-cluster-0004       1/1       Running   0          12m

etcdクラスタの数が3から5にスケールアウトされていることが確認できました!

まとめ

簡単ではありますがetcd-operatorを触ってみました。
まだalpha版なので上手く動かないこともありますが、etcdクラスタの管理・操作は従来と比べて簡単にはなっているのかなと感じました。
ただ、etcd-operatorが実運用に有効かといわれると、簡単に触っただけではまだ分からないのが正直なところです。
面白そうではあるので、今後も注目していきたいと思います。