Slide 1

Slide 1 text

Cephadm を使った Ceph クラスタ構築 April 2, 2021 @nnstt1 Japan Rook Meetup #5

Slide 2

Slide 2 text

今日の発表について ◼お話しすること ⚫ Cephadm の概要、使い方 ◼お話ししないこと ⚫ Rook のこと ⚫ Ceph の内部的な説明

Slide 3

Slide 3 text

自己紹介 ◼ インフラエンジニア • SQL Server • Ansible • Azure ◼ Kubernetes , Rook は趣味 • 分散システムに興味出てきました ののし @nnstt1

Slide 4

Slide 4 text

Rook/Ceph を使う理由 $ git clone https://github.com/rook/rook.git $ cd rook/cluster/examples/kubernetes/ceph $ kubectl apply -f crds.yaml $ kubectl apply -f common.yaml $ kubectl apply -f operator.yaml $ kubectl apply -f cluster.yaml $ kubectl apply -f csi/rbd/storageclass.yaml ◼ 簡単に StorageClass を用意できるから だけど… • Ceph 知らなくても使えてしまう • トラブったらやり直し • データ消える

Slide 5

Slide 5 text

Rook を使わず Ceph を構築してみよう

Slide 6

Slide 6 text

クラスタ構成 External Cluster ◼ ラズパイ Ceph クラスタ OS: CentOS7 Ceph: Octopus Q. なんでラズパイ? A. 物理 Ceph クラスタを手元に置きたかったから(浪漫)

Slide 7

Slide 7 text

Ceph クラスタ構築方法 ◼ Cephadm ◼ ceph-ansible • Ansible を使用 ◼ ceph-salt • Salt を使用 • Cephadm を補完 ◼ ceph-deploy • メンテされていないため非推奨 ◼ DeepSea • SUSE 開発の Salt コレクション • インストール一覧から削除されている

Slide 8

Slide 8 text

Cephadm とは? ◼ Octopus でリリースされた新しい構築方法 ◼ Kubernetes 以外の環境に Ceph クラスタを構築 • Rook と対になる存在 ◼ Ceph クラスタのライフサイクル全体を管理 ◼ Ceph コンテナを使用 • Docker / Podman に対応

Slide 9

Slide 9 text

Podman の互換性 1.9 2.0 2.1 2.2 3.0 <= 15.2.5 True False False False False >= 15.2.6 True True True False False >= 16.2.1 False True True False True • Octopus は Podman 2.1 までしか対応していない • Podman 2.2 は Ceph に対応していない

Slide 10

Slide 10 text

Cephadm による Ceph クラスタ構築 1. Cephadm インストール 2. Bootstrap 3. クラスタ拡張 4. OSD 追加

Slide 11

Slide 11 text

Cephadm による Ceph クラスタ構築 1. Cephadm インストール 2. Bootstrap 3. クラスタ拡張 4. OSD 追加

Slide 12

Slide 12 text

Cephadm インストール ◼ スクリプトダウンロード $ curl --silent --remote-name --location ¥ https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm $ chmod +x cephadm $ ./cephadm add-repo --release octopus $ ./cephadm install ◼ パッケージインストール(任意)

Slide 13

Slide 13 text

Cephadm による Ceph クラスタ構築 1. Cephadm インストール 2. Bootstrap 3. クラスタ拡張 4. OSD 追加

Slide 14

Slide 14 text

Bootstrap ◼ 最小構成でクラスタを構築 $ cephadm bootstrap --mon-ip node1 node2 node3 MON MGR • MON, MGR コンテナ起動 • 設定ファイル (ceph.conf), 公開鍵 (ceph.pub), 認証情報 (ceph.client.admin.keyring) を作成

Slide 15

Slide 15 text

◼ Bootstrap 完了 $ cephadm bootstrap --mon-ip (..snip..) Ceph Dashboard is now available at: URL: https://node1:8443/ User: admin Password: asdfqwer12 You can access the Ceph CLI with: sudo /usr/sbin/cephadm shell --fsid -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring Please consider enabling telemetry to help improve Ceph: ceph telemetry on For more information see: https://docs.ceph.com/docs/master/mgr/telemetry/ Bootstrap complete. Bootstrap

Slide 16

Slide 16 text

◼ ディレクトリ構成 /var/lib/ceph// ├── mgr.node1. │ ├── config │ ├── keyring │ ├── unit.configured │ ├── unit.created │ ├── unit.image │ ├── unit.poststop │ └── unit.run └── mon.node1 ├── config ├── keyring ├── kv_backend ├── min_mon_release ├── store.db/ ├── unit.configured ├── unit.created ├── unit.image ├── unit.poststop └── unit.run Bootstrap MON, MGR コンテナ用ディレクトリ ファイル名 用途 config クラスタ設定 keyring 認証情報 unit.configured 更新日時 unit.created 作成日時 unit.image 使用するコンテナイメージ docker.io/ceph/ceph:v15 unit.poststop systemd ExecStopPost オプション unit.run systemd ExecStart オプション

Slide 17

Slide 17 text

◼ ディレクトリ構成 /var/lib/ceph// ├── mgr.node1. │ ├── config │ ├── keyring │ ├── unit.configured │ ├── unit.created │ ├── unit.image │ ├── unit.poststop │ └── unit.run └── mon.node1 ├── config ├── keyring ├── kv_backend ├── min_mon_release ├── store.db/ ├── unit.configured ├── unit.created ├── unit.image ├── unit.poststop └── unit.run Bootstrap MON, MGR コンテナ用ディレクトリ ファイル名 用途 min_mon_release MON 最小バージョン (octopus) kv_backend MON Key-Value ストア (rocksdb) store.db/ MON バックエンドデータ

Slide 18

Slide 18 text

Bootstrap ◼ MGR が各モジュールコンテナを起動 node1 node2 node3 MON MGR CRASH • Crash モジュール : クラッシュダンプの収集 • Prometheus モジュール : 監視スタック デプロイ (Prometheus, Grafana , Alertmanager, Node-Exporter) Prom Grafana

Slide 19

Slide 19 text

Bootstrap ◼ MGR が各モジュールコンテナを起動 node1 node2 node3 MON MGR CRASH • Crash モジュール : クラッシュダンプの収集 • Prometheus モジュール : 監視スタック デプロイ (Prometheus, Grafana , Alertmanager, Node-Exporter) Prom Grafana ceph/ceph-grafana の ARM 向けイメージは無いため ラズパイにはデプロイ不可 ラズパイ上で Buildah を使った ARM 向けイメージを作成

Slide 20

Slide 20 text

Bootstrap ◼ オプションで詳細設定が可能 • --skip-monitoring-stack 監視スタックをデプロイしない • --dashboard-password-noupdate ダッシュボード初回ログイン時にパスワードを更新しない

Slide 21

Slide 21 text

MGR モジュール一覧 ◼ MGR モジュール一覧 $ ceph mgr module ls always_on_modules enabled_modules disabled_modules balancer crash devicehealth orchestrator pg_autoscaler progress rbd_support status telemetry volumes cephadm dashboard iostat prometheus restful alerts diskprediction_local influx insights k8sevents localpool osd_support rook selftest telegraf test_orchestrator zabbix Rook のモジュールがある? $ ceph mgr module disable crash Error EINVAL: module 'crash' cannot be disabled (always-on) • always_on_modules は無効化できない

Slide 22

Slide 22 text

オーケストレータ ◼オーケストレーション API https://docs.ceph.com/en/pacific/mgr/orchestrator_modules/ $ ceph orch status Backend: cephadm Available: True デフォルトは cephadm

Slide 23

Slide 23 text

バックエンドを Rook にできるか? $ ceph mgr module enable rook $ ceph orch set backend rook $ ceph orch status Backend: rook Available: False (ceph-mgr not running in Rook cluster) $ ceph status cluster: id: fb541622-8b54-11eb-b795-dca6329a21a7 health: HEALTH_ERR Module 'rook' has failed: Invalid kube-config file. No configuration found. モジュール有効化 オーケストレータバックエンドを Rook に変更

Slide 24

Slide 24 text

Cephadm による Ceph クラスタ構築 1. Cephadm インストール 2. Bootstrap 3. クラスタ拡張 4. OSD 追加

Slide 25

Slide 25 text

クラスタ拡張 ◼ 公開鍵の配布 node1 node2 node3 MON MGR CRASH $ ssh-copy-id -f -i /etc/ceph/ceph.pub root@node2 $ ssh-copy-id -f -i /etc/ceph/ceph.pub root@node3

Slide 26

Slide 26 text

クラスタ拡張 node1 node2 node3 MON MGR MON MGR MON ◼ ホスト追加 $ ceph orch host add node2 $ ceph orch host add node3 CRASH CRASH CRASH

Slide 27

Slide 27 text

Ceph コマンド ◼ Cephadm でシェル起動 $ ./cephadm shell -- ceph status Inferring fsid fb541622-8b54-11eb-b795-dca6329a21a7 Inferring config /var/lib/ceph/fb541622-8b54-11eb-b795-dca6329a21a7/mon.node1/config Using recent ceph image ceph/ceph@sha256:(snip) ◼ Cephadm からインストール $ ./cephadm add-repo --release octopus $ ./cephadm install ceph-common $ ceph status

Slide 28

Slide 28 text

Cephadm による Ceph クラスタ構築 1. Cephadm インストール 2. Bootstrap 3. クラスタ拡張 4. OSD 追加

Slide 29

Slide 29 text

OSD 追加 node1 node2 node3 MON MGR $ ceph orch device ls --refresh Hostname Path Type Serial Size Health Ident Fault Available node1 /dev/sda hdd DB9876543214E 256G Unknown N/A N/A Yes node2 /dev/sda hdd DB9876543214E 256G Unknown N/A N/A Yes node3 /dev/sda hdd DB9876543214E 256G Unknown N/A N/A Yes MON MGR MON ◼ デバイス状態確認 CRASH CRASH CRASH • Available : OSD を展開できる状態かどうか

Slide 30

Slide 30 text

OSD 追加 node1 node2 node3 MON MGR $ ceph orch apply osd --all-available-devices MON MGR MON • 細かいデバイス指定も可能 OSD OSD OSD ◼ 全デバイスに対して OSD をデプロイ CRASH CRASH CRASH

Slide 31

Slide 31 text

OSD 追加 ◼ 宣言的な指定も可能 $ ceph orch apply osd -i spec.yaml service_type: osd service_id: osd_spec_default placement: host_pattern: '*’ data_devices: rotational: 1 db_devices: rotational: 0 spec.yaml 回転デバイス 非回転デバイス データは HDD へ DB/WAL は SSD へ

Slide 32

Slide 32 text

Cephadm による Ceph クラスタ構築 1. Cephadm インストール 2. Bootstrap 3. クラスタ拡張 4. OSD 追加 node1 node2 node3 MON MGR MON MGR MON OSD OSD OSD CRASH CRASH CRASH Ceph クラスタ構築完了

Slide 33

Slide 33 text

OSD コンテナ起動 ceph-osd cephvolume lvm deactivate ceph-volume lvm activate ラズパイでのトラブル ◼ OSD デプロイされない • OSD コンテナの起動が失敗して無限ループ unit.run unit.poststop • ログには “activate successful” と出ているが、実際は activate できていない • /usr/bin/mount -t tmpfs tmpfs /var/lib/ceph/osd/ceph-1 • /usr/bin/ceph-bluestore-tool (..snip..) --path /var/lib/ceph/osd/ceph-1 • Ceph コンテナを別に起動して対象コマンドを実行すると OSD 起動 • 原因特定できず・・・

Slide 34

Slide 34 text

まとめ ◼ Cephadm も Rook と同じくらい簡単にCeph クラスタ構築が可能 ◼ トラブル時に Rook と Ceph どちらが原因か切り分けのために Ceph クラスタを構築する場合に使える \Enjoy Rook Life/