K8s – GMO Developers https://developers.gmo.jp 「GMO Developers」は GMOインターネットグループの開発者向け情報をお届けしています。 Fri, 22 Mar 2024 00:57:10 +0000 ja hourly 1 Kubernetesでお手軽ストレージ構築!Rook Ceph導入の5ステップ https://developers.gmo.jp/technology/43119/ Fri, 22 Mar 2024 01:00:00 +0000 https://developers.gmo.jp/?p=43119

こんにちは、GMOインターネットグループ株式会社の長谷川です。
今回は Kubernetes 環境での Rook Ceph ストレージ に関して語っていこうと思います。

Rook Ceph とは

Rook Cephは、Kubernetes上(k8s上)に分散ストレージのCephをデプロイし、ストレージの運用を自動化するストレージオペレーターで、Cephは分散オブジェクトストレージ機能を提供する、オープンソースのストレージソフトウェアです。
https://rook.io/

Kubernetes 環境でデプロイし、ストレージクラスを用意することで、PersistentVolume(PV)を Dynamic Provisioning することが出来ます。

【STEP1】Kubernetes クラスタを用意する。

まず Rook Ceph をデプロイする Kubernetes クラスタを用意しましょう。
Ceph のレプリケーションはデフォルトの 3 レプリケーションで行う予定なので今回は以下の構成のクラスタをVMで用意し使用します。

control-plane 3 台
worker node 3 台 + それぞれに 1TB の 追加ストレージ

# cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.4 LTS"

# uname -r
5.15.0-100-generic

【STEP2】Kubernetes に Rook Ceph のオペレータをデプロイ

以下のリポジトリからサンプルのマニフェストをダウンロードします。
https://github.com/rook/rook

# git clone -b v1.13.6 https://github.com/rook/rook.git
# cd rook/deploy/examples/

ダウンロード完了後は マニフェストのあるディレクトリに移動します。
早速、構築に必要になるマニフェストをデプロイしていきます。

# kubectl apply -f crds.yaml -f common.yaml -f operator.yaml

デプロイが完了したら operator の pod が起動するまで待ちます。

# kubectl get pod -n rook-ceph --selector=app=rook-ceph-operator
NAME                                  READY   STATUS    RESTARTS   AGE
rook-ceph-operator-5f9bc6d66d-bz4mx   1/1     Running   0          2d23h

また 2024年3月現在では RBAC に関してもデプロイしないと次のステップの Rook Ceph クラスタのデプロイが出来ないのでデプロイしておきます。

# kubectl apply -f monitoring/rbac.yaml

【STEP3】Kubernetes に Rook Ceph cluster をデプロイ

Rook Ceph クラスタをデプロイします。
今回は worker node に 1TB の追加ストレージをアタッチしてあるので、データの保存領域としてはそれを使用します。

追加ストレージは vdb に刺さっていると仮定し進めます。
クラスタをデプロイする前に、どのストレージを使用するかを指定するため以下を編集します。

# vim cluster.yaml

#
# 以下をクラスタの構成に応じて修正
#

storage: 
  useAllNodes: false # false に変更
  useAllDevices: false # false に変更
  config:
  nodes:
  - name: "worker-node01" # 追加ストレージを持っているワーカーノードを指定
    devices:
    - name: "vdb" # 追加ストレージは vdb としてワーカーノードに接続されているので指定する
  - name: "worker-node02"
    devices:
    - name: "vdb"
  - name: "worker-node03"
    devices:
    - name: "vdb"

ここでは ワーカーノードに接続させた 3つの追加ストレージを指定していますが、それ以上の本数で構築することも出来ます。
編集を終えたらデプロイをします。

# kubectl apply -f cluster.yaml

OSD の pod が作成完了し、正常にクラスタデプロイが完了するまで時間がかかるので、以下のコマンドでそれぞれのステータスを確認します。

pod のステータス確認

# kubectl get po -o wide -n rook-ceph -w

operator のログの確認

# kubectl logs [rook-ceph-operator-pod-name] -n rook-ceph -f

Rook Ceph cluster の ヘルスの確認

# kubectl -n rook-ceph get cephcluster

しばらく待っていると、以下のように Cluster created successfully & HEALTH_OK と表示され構築完了したことが確認出来ます。

# kubectl -n rook-ceph get cephcluster
NAME        DATADIRHOSTPATH   MONCOUNT   AGE     PHASE   MESSAGE                        HEALTH      EXTERNAL   FSID
rook-ceph   /var/lib/rook     3          3d18h   Ready   Cluster created successfully   HEALTH_OK              e0e0201a-6419-4190-adf8-5bdc48d3fc8d

【STEP4】Rook Ceph cluster の中を確認

Rook Ceph をの構築完了後に toolbox の pod をデプロイすることにより ceph osd status などの Ceph ストレージのコマンドを利用できるようになります。

toolbox のデプロイをします。

# kubectl apply -f toolbox.yaml

デプロイ完了したら toolbox の pod に入って、コマンドを実行してみます。
以下のコマンドで pod に入ります。

# kubectl exec -ti -n rook-ceph $(kubectl get po -n rook-ceph -l app=rook-ceph-tools -o jsonpath={..metadata.name}) -- bash
bash-4.4$ ceph -s
  cluster:
    id:     e0e0201a-6419-4190-adf8-5bdc48d3fc8d
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum a,b,c (age 3d)
    mgr: b(active, since 3d), standbys: a
    mds: 1/1 daemons up, 1 hot standby
    osd: 3 osds: 3 up (since 3d), 3 in (since 3d)
 
  data:
    volumes: 1/1 healthy
    pools:   4 pools, 81 pgs
    objects: 25 objects, 465 KiB
    usage:   148 MiB used, 3.0 TiB / 3.0 TiB avail
    pgs:     81 active+clean
 
  io:
    client:   852 B/s rd, 1 op/s rd, 0 op/s wr

上記のように pod にはいってceph のコマンドを実行することにより mon, mgr, mds, osd の状態を把握することが出来ました。

実際に様々な ceph コマンドが利用でき、ceph osd purge のようなコマンドも利用することが出来ます。

【STEP5】ストレージクラス等の設定

Kubernetes クラスタで用意した Rook Ceph ストレージを利用するために ストレージクラスの設定が必要になります。
Rook Ceph のリポジトリにはストレージクラスを定義するためのマニフェストがあるので適用していきます。

まずは、RADOS Block Device に対応した ストレージクラスを設定します。

以下でストレージクラスの設定をする。
# kubectl apply -f csi/rbd/storageclass.yaml
以下で rook-ceph-block をデフォルトのストレージクラスに指定
# kubectl patch storageclass rook-ceph-block -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
ストレージクラスが出来上がったか確認
# kubectl get sc -A
NAME                        PROVISIONER                     RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
rook-ceph-block (default)   rook-ceph.rbd.csi.ceph.com      Delete          Immediate           true                   3d19h

rook-ceph-block は Kubernetes では ReadWriteOnce のみで使用できます。
またこのままだと ReadWriteMany では使用できないので CephFS のストレージクラスも設定して、ReadWriteMany が使えるようにします。

CephFS をデプロイする。
# kubectl apply -f filesystem.yaml
filesystem.yaml のデプロイ後に、csi/cephfs/storageclass.yaml もデプロイする。
# kubectl apply -f csi/cephfs/storageclass.yaml
ストレージクラスが出来上がったか確認
# kubectl get sc -A
NAME                        PROVISIONER                     RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
rook-ceph-block (default)   rook-ceph.rbd.csi.ceph.com      Delete          Immediate           true                   3d19h
rook-cephfs                 rook-ceph.cephfs.csi.ceph.com   Delete          Immediate           true                   13m

まとめ

Rook-Ceph は、Kubernetes 上で Ceph ストレージを運用するためのシンプルで効率的な方法を提供します。高いスケーラビリティ、高可用性、コスト効率など、多くの利点がありますので是非チャレンジしてみてください。

]]>
Pepabo Tech Conference #14 / プラットフォーム・基盤部門スペシャル – 事業部横断部門の取り組み大公開 https://developers.gmo.jp/events/1614/ https://developers.gmo.jp/events/1614/#respond Wed, 17 Feb 2021 00:12:11 +0000 https://developers.gmo.jp/?p=1614

GMOペパボでは「Pepabo Tech Conference」と題し、開発者に向けたイベントを定期開催しています。
今回の「Pepabo Tech Conference #14」では、ペパボのプラットフォームテクノロジーをテーマに、技術基盤チーム・データ基盤チーム・プラットフォームグループ(SRE)・セキュリティ対策室のメンバーが登壇し、各チームの取り組みについてお話させていただきます。

Pepabo Tech Conferenceとは?

GMOペパボでは、「アウトプットすること」を大切にする企業文化があり、自社で培ってきた技術や知見を幅広く公開し、社内だけでなく社会全体に貢献する姿勢を大切にします。その一環として「Pepabo Tech Conference」と題し、様々なテーマで開発者に向けたイベントを定期開催しています。

イベント概要

日  時 :2021年2月25日(木)
時  間 :19:00~21:00
場  所 :オンライン

タイムテーブル

19:00オープニング
19:05ペパボサービスインフラのこれから常松伸哉
19:25ペパボにおけるコンテナとハイブリッドクラウド活用による可用性向上への取り組み高橋拓也
19:45SREが取り組むカラーミーショップへのK8導入菅原千晶
20:05データ基盤チームの設立と直近の取り組み堤利史
20:253Coで支えるペパボのセキュリティ対策~Communication Completely Continuous~熊野・伊藤・森田
20:55クロージング
※発表順については変動の可能性があります。

イベント詳細・お申込みはこちら

https://pepabo.connpass.com/event/204392/

登壇者

〇常松伸哉
2009年入社、技術部シニアエンジニアリングリード。サービスのインフラエンジニアを経た後、プライベートクラウドの構築・運用に携わるほか、全社的な課題解決にインフラ面から取り組んでいる。2020年より現任。エンジニア組織の運営と並行して、SREやクラウドネイティブといったトピックを推進している。カレーが大好きだけど最近全然食べに外出できていなくてツラい。

〇高橋拓也
技術部技術基盤チームに所属するインフラエンジニア。2019年10月にGMOペパボ入社。2020年10月よりプリンシパルエンジニアに就任。ペパボが運営するサービスにおけるクラウドの有効活用によるシステムの安定稼働に注力する。

〇菅原千晶
2018年3月にペパボカレッジ6期生として入社。SREとしてカラーミーショップの運用に携わっている。

〇堤利史
2020年12月にGMOペパボ株式会社へ入社。技術部 データ基盤チームに所属するデータエンジニア。

〇熊野多聞
2007年 に入社、マネージャー。複数商材のインフラエンジニア、インフラ基盤を支えるプロットフォームのマネジメントをヘテセキュリティ対策の推進、マネジメントに従事している。

〇伊藤洋也
2007年 に入社、プリンシパルエンジニア。ホスティングのWebサービス〜事業部を横断した技術基盤チームの経験を活かしてセキュリティ対策の仕組み作りプロダクトの開発に従事している。

〇森田浩平
2018 年 に新卒入社、シニアエンジニア。セキュリティ対策室で事業部を横断したセキュリティ対策等の基盤づくりに従事している。

お申込みをおまちしております!

]]>
https://developers.gmo.jp/events/1614/feed/ 0