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が実運用に有効かといわれると、簡単に触っただけではまだ分からないのが正直なところです。

面白そうではあるので、今後も注目していきたいと思います。