Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cephadm を使った Ceph クラスタ構築 / Build a Ceph cluster with Cephadm

ののし
April 02, 2021

Cephadm を使った Ceph クラスタ構築 / Build a Ceph cluster with Cephadm

ののし

April 02, 2021
Tweet

More Decks by ののし

Other Decks in Technology

Transcript

  1. 自己紹介 ◼ インフラエンジニア • SQL Server • Ansible • Azure

    ◼ Kubernetes , Rook は趣味 • 分散システムに興味出てきました ののし @nnstt1
  2. 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 知らなくても使えてしまう • トラブったらやり直し • データ消える
  3. クラスタ構成 External Cluster ◼ ラズパイ Ceph クラスタ OS: CentOS7 Ceph:

    Octopus Q. なんでラズパイ? A. 物理 Ceph クラスタを手元に置きたかったから(浪漫)
  4. Ceph クラスタ構築方法 ◼ Cephadm ◼ ceph-ansible • Ansible を使用 ◼

    ceph-salt • Salt を使用 • Cephadm を補完 ◼ ceph-deploy • メンテされていないため非推奨 ◼ DeepSea • SUSE 開発の Salt コレクション • インストール一覧から削除されている
  5. Cephadm とは? ◼ Octopus でリリースされた新しい構築方法 ◼ Kubernetes 以外の環境に Ceph クラスタを構築

    • Rook と対になる存在 ◼ Ceph クラスタのライフサイクル全体を管理 ◼ Ceph コンテナを使用 • Docker / Podman に対応
  6. 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 に対応していない
  7. 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 ◼ パッケージインストール(任意)
  8. Bootstrap ◼ 最小構成でクラスタを構築 $ cephadm bootstrap --mon-ip <IPアドレス> node1 node2

    node3 MON MGR • MON, MGR コンテナ起動 • 設定ファイル (ceph.conf), 公開鍵 (ceph.pub), 認証情報 (ceph.client.admin.keyring) を作成
  9. ◼ Bootstrap 完了 $ cephadm bootstrap --mon-ip <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 <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
  10. ◼ ディレクトリ構成 /var/lib/ceph/<fsid>/ ├── mgr.node1.<random> │ ├── 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 オプション
  11. ◼ ディレクトリ構成 /var/lib/ceph/<fsid>/ ├── mgr.node1.<random> │ ├── 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 バックエンドデータ
  12. Bootstrap ◼ MGR が各モジュールコンテナを起動 node1 node2 node3 MON MGR CRASH

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

    • Crash モジュール : クラッシュダンプの収集 • Prometheus モジュール : 監視スタック デプロイ (Prometheus, Grafana , Alertmanager, Node-Exporter) Prom Grafana ceph/ceph-grafana の ARM 向けイメージは無いため ラズパイにはデプロイ不可 ラズパイ上で Buildah を使った ARM 向けイメージを作成
  14. 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 は無効化できない
  15. バックエンドを 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 に変更
  16. クラスタ拡張 ◼ 公開鍵の配布 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
  17. クラスタ拡張 node1 node2 node3 MON MGR MON MGR MON ◼

    ホスト追加 $ ceph orch host add node2 $ ceph orch host add node3 CRASH CRASH CRASH
  18. 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
  19. 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 を展開できる状態かどうか
  20. OSD 追加 node1 node2 node3 MON MGR $ ceph orch

    apply osd --all-available-devices MON MGR MON • 細かいデバイス指定も可能 OSD OSD OSD ◼ 全デバイスに対して OSD をデプロイ CRASH CRASH CRASH
  21. 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 へ
  22. Cephadm による Ceph クラスタ構築 1. Cephadm インストール 2. Bootstrap 3.

    クラスタ拡張 4. OSD 追加 node1 node2 node3 MON MGR MON MGR MON OSD OSD OSD CRASH CRASH CRASH Ceph クラスタ構築完了
  23. 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 起動 • 原因特定できず・・・
  24. まとめ ◼ Cephadm も Rook と同じくらい簡単にCeph クラスタ構築が可能 ◼ トラブル時に Rook

    と Ceph どちらが原因か切り分けのために Ceph クラスタを構築する場合に使える \Enjoy Rook Life/