yanom blog

様々な技術について書きます

ストレージオーケストレーター rook入門1

tl;dr

  • rook導入編です
  • 公式サンプルを試します

    rookとは

    公式より

  • Rook is an open source cloud-native storage orchestrator, providing the platform, framework, and support for a diverse set of storage solutions to natively integrate with cloud-native environments.
  • Rookはオープンソースクラウドネイティブストレージオーケストレーターで、クラウドネイティブ環境とネイティブに統合するためのさまざまなストレージソリューションのプラットフォーム、フレームワーク、およびサポートを提供します。

  • また、rookは2018年1月にCNCFプロジェクトとして承認されています。

分散ストレージソフトウェア ceph

rookではcephという分散ストレージをkubernetes上のPodとして実行します。
cephはオープンソースの分散ストレージソフトウェアで、カリフォルニア大学で開発され、2006年にオープンソース化されました。
Ceph(セフ)とは

環境構築

百聞は一見にしかず、さっそくQuickstartに従って環境を作っていきます。
まずは、こちらのgithubをクローンします。

git clone https://github.com/rook/rook

出来たらまずはオペレーターを作成します。

kubectl create -f rook/cluster/examples/kubernetes/ceph/operator.yaml

#実行後以下のようになればok
kubectl -n rook-ceph get pod
NAME                                                   READY     STATUS      RESTARTS   AGE
rook-ceph-mgr-a-55cc96f574-nvc5q                       1/1       Running     0          20h
rook-ceph-mon0-42dvk                                   1/1       Running     0          20h
rook-ceph-mon1-dm4fd                                   1/1       Running     0          20h
rook-ceph-mon2-nx22m                                   1/1       Running     0          20h
rook-ceph-osd-id-0-78cc86dbd7-rl426                    1/1       Running     0          20h
rook-ceph-osd-prepare-aks-nodepool1-42015631-0-hc5qc   0/1       Completed   0          20h

次にクラスターを作成します。

kubectl create -f rook/cluster/examples/kubernetes/ceph/cluster.yaml

#実行後以下のようになればok
kubectl -n rook-ceph-system get pod
NAME                                  READY     STATUS    RESTARTS   AGE
rook-ceph-agent-4w7hg                 1/1       Running   0          20h
rook-ceph-operator-79d8679956-vgbrf   1/1       Running   0          20h
rook-discover-mzr8s                   1/1       Running   0          20h

これで前準備は出来ました!

動かしてみる

では、作成したクラスタにアプリを投入していきます。
今回は、block storageのサンプルを試します。

まずは、ストレージクラスとストレージプールを作成します。

kubectl create -f rook/cluster/examples/kubernetes/storageclass.yaml

サンプルアプリとしてwordpressを使います。

kubectl create -f rook/cluster/examples/kubernetes/mysql.yaml
kubectl create -f rook/cluster/examples/kubernetes/wordpress.yaml

#実行後以下のようになればok
kubectl get pvc
NAME             STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
mysql-pv-claim   Bound     pvc-2b4c693d-a5a1-11e8-9d65-a201408ce52c   20Gi       RWO            rook-ceph-block   1h
wp-pv-claim      Bound     pvc-2fc74982-a5a1-11e8-9d65-a201408ce52c   20Gi       RWO            rook-ceph-block   1h

kubectl get svc
NAME              TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes        ClusterIP      10.0.0.1       <none>        443/TCP        21h
wordpress         LoadBalancer   10.0.250.161   <pending>     80:32620/TCP   1h
wordpress-mysql   ClusterIP      None           <none>        3306/TCP       1h

これで、rookをアプリケーションを作成することが出来ました。
このあとは、external-ipのアドレスにアクセスすればwordpressの画面が表示されるはずです。(未確認)

後片付け

kubectl delete -f wordpress.yaml
kubectl delete -f mysql.yaml
kubectl delete -n rook-ceph pool replicapool
kubectl delete storageclass rook-ceph-block
kubectl delete -f cluster.yaml
kubectl delete -f operator.yaml

まとめ

今回は公式サイトのquickstartに従ってwordpressのアプリケーションをrook上に作成しました。
次回以降、もう少し詳しく見ていきたいと思います。

参考