#はじめに
今までは見る専門だったのですが、諸々あってそろそろQiitaデビューをしようと思い、投稿しました。
表題の通り、Oracle Container Engine for KubernetesにRook-CephをデプロイしてWordPress環境を構築してみたいと思います。
Rook-Cephに関してはかなり素人なので、間違いがあればご指摘頂けるとありがたいです!
環境は以下の通りです。
- Oracle Container Engine for Kubernetes:v1.15.7(Master/Workerともに)
- Rook:v1.3.3
- Ceph:v14.2.9
この記事は、Rook-Cephをただ動かしてみるだけの記事になっています。
Rook-Ceph自体についての解説はこの記事では行いません。
まとめにも記載しましたが、Rook-Ceph自体については今後の目標として投稿していきたいと思っています。
では、やっていきます!
(5/20追記)
寝ぼけていたのか手順を1つ入れ忘れていました...申し訳ございません...
Rook-CephのデプロイとWordPressの構築の間に「3. CephBlockPoolとStorageClassの作成」を追加しています。
#1. Oracle Container Engine for Kubernetes(OKE)のプロビジョニング
まず、OKEクラスタをプロビジョニングしていきます。
ちなみにこの記事では、リージョンはAshburnとします。
プロビジョニングについては、公式で提供されているハンズオンドキュメントがあるので、こちらのリンクを参照します。
※リンク先の「上記ハンズオン共通手順」と書かれている部分がプロビジョニング手順になっており、ついでにOKEクラスタにアクセスするためのクライアントも作成できます。
OKEのプロビジョニング自体は上記で完了しますが、今回はRook-Cephを利用するために追加でWorker NodeにBlock Volumeをアタッチしてみます。
Oracle Clooud Infrastructure(OCI)コンソールのブロック・ストレージ
というメニューをクリックします。
ブロック・ボリュームの作成
をクリックします。
作成画面が表示されるので、必要項目を入れて、ブロック・ボリュームの作成
ボタンをクリックします。
ここで今回重要になるのは、可用性ドメイン(AD)の部分です。
今回はAshburnリージョン(ADは3ドメイン)なので、デフォルトでは各可用性ドメインそれぞれに1ノードずつ合計3つのWoker Nodeがプロビジョニングされます。
そのため、ブロック・ボリュームについても各可用性ドメインごとに1つずつ合計3つ作成します。
ブロック・ボリュームが3つ作成できたら、Worker Nodeにアタッチしていきます。
作成したブロック・ボリュームをクリックすると、詳細画面が表示されます。
アタッチするための画面が表示されるので、必要項目を入れて、アタッチ
をクリックします。
ここで重要になるのは、アタッチ対象の「インスタンス」です。インスタンスはOKEのWoker Nodeを選択するようにします。
アタッチメントタイプは、「準仮想化」を選択します。
アタッチが完了すると以下のようにアタッチ済
と表示されます。これをWorker Node3つ分実施すれば完了です!
#2. Rook-Cephのデプロイ
Rook-Cephのデプロイについては、Ceph Storage Quickstartで公開している手順にしたがって実施していきます。
まずは、rookレポジトリをgit cloneします。
git clone https://github.com/rook/rook.git
cloneしたレポジトリ内にCephクラスタを構築するためのmanifestセットがあります。
cd rook/cluster/examples/kubernetes/ceph
まずは、manifestセットの中のcommmon.yaml
をデプロイします。
kubectl create -f common.yaml
common.yaml
は、Cephクラスタを構築するためのNamespace、CustomResourceDefinition、(Cluster)Role、(Cluster)RoleBinding、Service Accountなどを作成するためのmanifestになっています。
続いて、CephクラスタのOperatorをデプロイします。
kubectl create -f operator.yaml
Cephクラスタをデプロイします。
kubectl create -f cluster.yaml
クラスタが構築されたので、Podを確認してみます。namespaceはrook-cephという名前のようです。
[opc@oke-client kubernetes]$ kubectl get pod -n rook-ceph
NAME READY STATUS RESTARTS AGE
csi-cephfsplugin-8d7p6 3/3 Running 0 11m
csi-cephfsplugin-lws5k 3/3 Running 0 11m
csi-cephfsplugin-provisioner-74579b599c-ks9t9 5/5 Running 0 11m
csi-cephfsplugin-provisioner-74579b599c-mdfpt 5/5 Running 0 11m
csi-cephfsplugin-rz7qr 3/3 Running 0 11m
csi-rbdplugin-czfnw 3/3 Running 0 11m
csi-rbdplugin-d26t7 3/3 Running 0 11m
csi-rbdplugin-provisioner-79cdfdbc64-9nk46 6/6 Running 0 11m
csi-rbdplugin-provisioner-79cdfdbc64-jwg69 6/6 Running 0 11m
csi-rbdplugin-rrb27 3/3 Running 0 11m
rook-ceph-crashcollector-10.0.10.10-94bd48669-rt68l 1/1 Running 0 46m
rook-ceph-crashcollector-10.0.10.11-86bfb47dbb-dnccv 1/1 Running 0 46m
rook-ceph-crashcollector-10.0.10.9-67d95475d9-pct86 1/1 Running 0 22m
rook-ceph-mgr-a-7d4b5f56-nwlnb 1/1 Running 0 47m
rook-ceph-mon-a-78f5c44b88-7hbj2 1/1 Running 0 45m
rook-ceph-mon-b-68db8964f6-xr2bc 1/1 Running 0 46m
rook-ceph-mon-c-f9475b799-t64dp 1/1 Running 0 45m
rook-ceph-operator-7d99d768f4-8p94q 1/1 Running 0 23m
rook-ceph-osd-0-f6b7945b7-fvdx5 1/1 Running 0 22m
rook-ceph-osd-1-567995f68b-65xb9 1/1 Running 0 22m
rook-ceph-osd-2-6cb9b454f-fqd68 1/1 Running 0 22m
rook-ceph-osd-prepare-10.0.10.10-7wvdg 0/1 Completed 0 22m
rook-ceph-osd-prepare-10.0.10.11-wqvjc 0/1 Completed 0 22m
rook-ceph-osd-prepare-10.0.10.9-vh7nf 0/1 Completed 0 22m
rook-discover-42n6l 1/1 Running 0 14m
rook-discover-lzn6q 1/1 Running 0 14m
rook-discover-vwl6p 1/1 Running 0 14m
Cephクラスタの状態は以下で確認できます。
"CephCluster"というリソースは、先ほどデプロイしたcluster.yaml
で作成されたCR(Custom Resource)です。
HEALTH_OK
なので、問題ないようですね。
[opc@oke-client kubernetes]$ kubectl get CephCluster -n rook-ceph
NAME DATADIRHOSTPATH MONCOUNT AGE PHASE MESSAGE HEALTH
rook-ceph /dev/oracleoci/oraclevdb 3 44m HEALTH_OK
Ceph Storage Quickstartでは、Rook toolboxというDeploymentをデプロイして、そのコンテナ上からチェックするような手順になっていますが、ステータスのチェック程度であれば、個人的には上記手順の方が楽なのはないかと思います。
エラーなどで細かい情報を取得する際にはRook toolboxが便利かと思います。
これでCephクラスタがデプロイできました!非常に簡単ですね!!
#3. StorageClassとCephBlockPoolの作成
次にStorageClassとCephBlockPoolを作成します。
ここで何をしているのかも今後記事にしていけたらと思います。
manifestファイルは以下の通りです。
apiVersion: ceph.rook.io/v1
kind: CephBlockPool
metadata:
name: replicapool
namespace: rook-ceph
spec:
failureDomain: host
replicated:
size: 3
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rook-ceph-block
# Change "rook-ceph" provisioner prefix to match the operator namespace if needed
provisioner: rook-ceph.rbd.csi.ceph.com
parameters:
# clusterID is the namespace where the rook cluster is running
clusterID: rook-ceph
# Ceph pool into which the RBD image shall be created
pool: replicapool
# RBD image format. Defaults to "2".
imageFormat: "2"
# RBD image features. Available for imageFormat: "2". CSI RBD currently supports only `layering` feature.
imageFeatures: layering
# The secrets contain Ceph admin credentials.
csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner
csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph
csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node
csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
# Specify the filesystem type of the volume. If not specified, csi-provisioner
# will set default as `ext4`.
csi.storage.k8s.io/fstype: xfs
# Delete the rbd volume when a PVC is deleted
reclaimPolicy:
このファイルを適用します。
kubectl create -f storageclass.yaml
#4. WordPressの構築
サンプルアプリケーションをデプロイしてみます。
ちょうどよくrookレポジトリにWordPressのmanifestがあるので、こちらを使用させていただきます。
ディレクトリを移動します。
cd rook/cluster/examples/kubernetes
まず、mysqlをデプロイします。
kubectl create -f mysql.yaml
次にWordPressをデプロイします。
kubectl create -f wordpress.yaml
Podの状態を確認します。
NAME READY STATUS RESTARTS AGE
wordpress-8968cd5b6-dshll 1/1 Running 0 5m
wordpress-mysql-6cc97b86fc-4hnbw 1/1 Running 0 5m
ちゃんとRunning
になっていますね。
PVC(Persistent Volume Claim)とPV(Persistent Volume)も見ておきましょう。
[opc@oke-client kubernetes]$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mysql-pv-claim Bound pvc-2ad79794-7f31-495b-81c4-f8e105358a88 20Gi RWO rook-ceph-block 5m
wp-pv-claim Bound pvc-b254fd73-a5ba-45f1-90ef-faa3465ea8de 20Gi RWO rook-ceph-block 5m
[opc@oke-client kubernetes]$
[opc@oke-client kubernetes]$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-2ad79794-7f31-495b-81c4-f8e105358a88 20Gi RWO Delete Bound default/mysql-pv-claim rook-ceph-block 5m
pvc-b254fd73-a5ba-45f1-90ef-faa3465ea8de 20Gi RWO Delete Bound default/wp-pv-claim rook-ceph-block 5m
[opc@oke-client kubernetes]$
StorageClassにrook-ceph-block
が利用されていることが確認できます。
最後にWordPressにアクセスしてみます。今回はServiceとしてLoad Balancerタイプを利用しています。
[opc@oke-client kubernetes]$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5h
wordpress LoadBalancer 10.96.170.70 150.136.20.232 80:31111/TCP 5m
wordpress-mysql ClusterIP None <none> 3306/TCP 5m
External-IP
にアクセスします。
無事、WordPressのインストール画面が表示されました!!
#まとめ
今回は、OKE上にRook-CephをデプロイしてWordPressを構築してみました。
今回はただ動かしてみただけで、まだまだRookについてもCephについても理解が浅いので、今後もっと詳細に勉強してみようと思います。
そのプロセスも記事として投稿したいと思っています。
#参考記事
Running Ceph Clusters with Rook in Oracle Container Engine for Kubernetes