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

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

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

1e210dc7083cc282628ff071926b9351?s=128

ののし

April 02, 2021
Tweet

Transcript

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

    Meetup #5
  2. 今日の発表について ◼お話しすること ⚫ Cephadm の概要、使い方 ◼お話ししないこと ⚫ Rook のこと ⚫

    Ceph の内部的な説明
  3. 自己紹介 ◼ インフラエンジニア • SQL Server • Ansible • Azure

    ◼ Kubernetes , Rook は趣味 • 分散システムに興味出てきました ののし @nnstt1
  4. 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 知らなくても使えてしまう • トラブったらやり直し • データ消える
  5. Rook を使わず Ceph を構築してみよう

  6. クラスタ構成 External Cluster ◼ ラズパイ Ceph クラスタ OS: CentOS7 Ceph:

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

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

    • Rook と対になる存在 ◼ Ceph クラスタのライフサイクル全体を管理 ◼ Ceph コンテナを使用 • Docker / Podman に対応
  9. 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 に対応していない
  10. Cephadm による Ceph クラスタ構築 1. Cephadm インストール 2. Bootstrap 3.

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

    クラスタ拡張 4. OSD 追加
  12. 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 ◼ パッケージインストール(任意)
  13. Cephadm による Ceph クラスタ構築 1. Cephadm インストール 2. Bootstrap 3.

    クラスタ拡張 4. OSD 追加
  14. Bootstrap ◼ 最小構成でクラスタを構築 $ cephadm bootstrap --mon-ip <IPアドレス> node1 node2

    node3 MON MGR • MON, MGR コンテナ起動 • 設定ファイル (ceph.conf), 公開鍵 (ceph.pub), 認証情報 (ceph.client.admin.keyring) を作成
  15. ◼ 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
  16. ◼ ディレクトリ構成 /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 オプション
  17. ◼ ディレクトリ構成 /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 バックエンドデータ
  18. Bootstrap ◼ MGR が各モジュールコンテナを起動 node1 node2 node3 MON MGR CRASH

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

    • Crash モジュール : クラッシュダンプの収集 • Prometheus モジュール : 監視スタック デプロイ (Prometheus, Grafana , Alertmanager, Node-Exporter) Prom Grafana ceph/ceph-grafana の ARM 向けイメージは無いため ラズパイにはデプロイ不可 ラズパイ上で Buildah を使った ARM 向けイメージを作成
  20. Bootstrap ◼ オプションで詳細設定が可能 • --skip-monitoring-stack 監視スタックをデプロイしない • --dashboard-password-noupdate ダッシュボード初回ログイン時にパスワードを更新しない

  21. 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 は無効化できない
  22. オーケストレータ ◼オーケストレーション API https://docs.ceph.com/en/pacific/mgr/orchestrator_modules/ $ ceph orch status Backend: cephadm

    Available: True デフォルトは cephadm
  23. バックエンドを 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 に変更
  24. Cephadm による Ceph クラスタ構築 1. Cephadm インストール 2. Bootstrap 3.

    クラスタ拡張 4. OSD 追加
  25. クラスタ拡張 ◼ 公開鍵の配布 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
  26. クラスタ拡張 node1 node2 node3 MON MGR MON MGR MON ◼

    ホスト追加 $ ceph orch host add node2 $ ceph orch host add node3 CRASH CRASH CRASH
  27. 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
  28. Cephadm による Ceph クラスタ構築 1. Cephadm インストール 2. Bootstrap 3.

    クラスタ拡張 4. OSD 追加
  29. 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 を展開できる状態かどうか
  30. OSD 追加 node1 node2 node3 MON MGR $ ceph orch

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

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

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