$30 off During Our Annual Pro Sale. View Details »

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. Cephadm を使った Ceph クラスタ構築
    April 2, 2021 @nnstt1
    Japan Rook Meetup #5

    View Slide

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

    View Slide

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

    View Slide

  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 知らなくても使えてしまう
    • トラブったらやり直し
    • データ消える

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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 に対応していない

    View Slide

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

    View Slide

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

    View Slide

  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
    ◼ パッケージインストール(任意)

    View Slide

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

    View Slide

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

    View Slide

  15. ◼ 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

    View Slide

  16. ◼ ディレクトリ構成
    /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 オプション

    View Slide

  17. ◼ ディレクトリ構成
    /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 バックエンドデータ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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 は無効化できない

    View Slide

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

    View Slide

  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 に変更

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

  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 を展開できる状態かどうか

    View Slide

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

    View Slide

  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 へ

    View Slide

  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 クラスタ構築完了

    View Slide

  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 起動
    • 原因特定できず・・・

    View Slide

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

    View Slide