Help us understand the problem. What is going on with this article?

Rook.io

More than 1 year has passed since last update.

Rook.ioを試してみた~導入編

前置き

  • Rook.ioとはKubernetes上でCephを取り扱うソリューション。
  • Container上からDeviceの管理をしてしまう驚きの挙動。

KubernetesやUbuntuやCephがどんどん新しくなってきているのでまとめて検証してやろうとの思いから試してみました。
Kernelを抽象化してしまってCephなんて動くんだろうか?と思う今日この頃。まぁ、書いているからには動いたんですが。。。
rook.io documents
ドキュメントにデプロイしたらそれでできた。すげぇ。
Statefulな環境を作るときには必ずPersistent Volumeが必要になってくるが、高可用性のあるStorageをお持ちでいない方にはお手軽に導入できるソリューションとしてお勧めです。
Cloud上でKubernetesを動かしている方はCloud NativeなVolumeを使っているかと思われますが、Cloud Look-inされないデータストアソリューションを探していきつきました。クラウド間の移行検証などもそのうちやりたいと思っています。
今回は性能検証については触れないです。仮想上で動かしているのでたぶんかなり遅い。そのうち物理やLocal SSDを使った環境で性能検証はしてみる予定です。

環境

  • Kubernetes 1.10.1
  • Ceph 12.2.5
  • docker 17.12.1-ce
  • Ubuntu 18.04 LTS
  • vSphere 6.5
  • 4 vCPU, 16 GB Memory
  • Flannel
  • Master Node 1, Woker Node 5
  • rook

Setup 1

Kubernetes知っていて、Rook.ioのみ知りたい方はSetup 2から参照。
仮想環境上にVMを作成して、そこにkubeadmで環境を作成。NWはFlannelを使用。
前置きはこれくらいにして、以下に実際に打ったコマンドや作成された環境の説明を記載。

1.OSの準備

  • 必要者のみ参照。まずはUbuntu 18.04の準備。MinimalなUbuntu Serverの環境を準備する。

コンテナ環境なのであまりOSを意識する必要はないはずだが、18.04を試してみたいという思いもありこれを選定。検証した時点ではまたUbuntuとCephのバージョンによる互換性は当然ない。作り方は特に記載しないがISOから何も考えずに作成した。
[Installing kubeadm] https://kubernetes.io/docs/tasks/tools/install-kubeadm/#before-you-begin
上記に従い環境を整える。

  • hostnameの一意性。(18.04のHostnameのつけ方が独特なので「くそっ」と思うかも。Cloud-initやhostnamectlとか詳しくは語らない。)
  • IP固定。(これも18.04から独特。netplanとかまたしても「くそっ」と思うかも。)
  • ssh key登録

Qiita書いていて気づいたんだけど。Rook.ioやCephも当然System Requiementsが存在するので記載しておく。
Rook io
Kubernets 1.7以上なら動くらしい。ホンマかいな。
Ceph Hardware Recommendations
動かすだけならそんなに気にしなくても大丈夫なはず。それがコンテナのいいところ。動いてビビったけど。

2.Kubernetes環境の作成

Master Nodeから以下を実行

kubeadm init --pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml

各Worker Nodeから以下を実施

kubeadm join "Master IP Address":6443 --token "Token ID" --discovery-token-ca-cert-hash "Hash Value"

Kubernetesの基本作成なので詳しくは説明しない。

Setup 2

ここからが本題のrook.ioのDeploy。といってもyamlからcreateを数回たたくだけなんだけど。何も考えることなく以下を実施

3.rook.io Setup

git clone https://github.com/rook/rook.git
cd rook/cluster/examples/kubernetes

サンプルから環境の作成。yamlの中は詳しく見ていないがとりあえず作ってみてからどんなふうに出来上がるかを考えてみるのがよいかと思います。

kubectl create -f rook-operator.yaml
kubectl create -f rook-cluster.yaml

これでひとまずはCeph環境の作成完了。
次にKubernetes上にStorageClassを定義してCephを追加する。

kubectl create -f rook-storageclass.yaml

ついでにサンプルアプリケーションが動くかどうかもチェック。

kubectl create -f mysql.yaml
kubectl create -f wordpress.yaml

これだけで動くことに感動する。

4.rgw, mdsをDeployしてObjectとCeph-FSを作成

Ceph環境ができたのでその上で動くRGWとCeph-FSを作ってみる。これもYamlの中身を見ていないが作成された環境を元に考えるのがよいかと思われます。

kubectl create -f rook-object.yaml
kubectl -n rook get pod -l app=rook-ceph-rgw
kubectl create -f rook-filesystem.yaml
kubectl -n rook get pod -l app=rook-ceph-mds

5.Rook Toolbox

環境が出来たらCeph Commandを叩くために、Rook toolboxをDeployする。
toolbox

kubectl create -f rook-tools.yaml
kubectl -n rook get pod rook-tools
kubectl -n rook exec -it rook-tools bash

ceph status
ceph osd status
ceph df
rados df

出力結果が以下の様になる。

  cluster:
    id:     bb1c6597-da38-467f-8b0a-97af0a92e4d6
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum rook-ceph-mon0,rook-ceph-mon2,rook-ceph-mon1
    mgr: rook-ceph-mgr0(active)
    mds: myfs-1/1/1 up  {0=m2kf85=up:active}, 1 up:standby-replay
    osd: 5 osds: 5 up, 5 in
    rgw: 1 daemon active

  data:
    pools:   9 pools, 900 pgs
    objects: 263 objects, 6365 bytes
    usage:   64114 MB used, 251 GB / 313 GB avail
    pgs:     900 active+clean

  io:
    client:   852 B/s rd, 1 op/s rd, 0 op/s wr

感想

あまりにも簡単にCephの導入が出来てしまっていることに驚きを隠せない。もちろんHW構成に合わせた環境を作るためにはCephの理解やYamlの中身を知らなければならないのだが、学習→検証→環境作成の流れで作ってきたものとは真逆の流れで、環境を作ってから理解出来るのがうれしい。次回以降でHWを用いてTier構成などのパフォーマンス検証をやっていく予定。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away