この記事は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ファイルを作成します。
{
"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
が実運用に有効かといわれると、簡単に触っただけではまだ分からないのが正直なところです。
面白そうではあるので、今後も注目していきたいと思います。