8 cephadmを使用して残りのコアサービスを展開する #
基本的なCephクラスタを展開した後、より多くのクラスタノードにコアサービスを展開します。クライアントからクラスタのデータにアクセスできるようにするには、追加のサービスも展開します。
現時点では、Cephオーケストレータ(ceph orch
サブコマンド)を使用したコマンドライン上でのCephサービスの展開がサポートされています。
8.1 ceph orch
コマンド #
Cephオーケストレータコマンドであるceph orch
は、新しいクラスタノード上で、クラスタコンポーネントの一覧とCephサービスの展開を行います。このコマンドはcephadmモジュールのインターフェイスです。
8.1.1 オーケストレータステータスの表示 #
次のコマンドは、Cephオーケストレータの現在モードとステータスを表示します。
cephuser@adm >
ceph orch status
8.1.2 デバイス、サービス、デーモンの一覧 #
すべてのディスクデバイスを一覧にするには、次のコマンドを実行します。
cephuser@adm >
ceph orch device ls
Hostname Path Type Serial Size Health Ident Fault Available
ses-master /dev/vdb hdd 0d8a... 10.7G Unknown N/A N/A No
ses-min1 /dev/vdc hdd 8304... 10.7G Unknown N/A N/A No
ses-min1 /dev/vdd hdd 7b81... 10.7G Unknown N/A N/A No
[...]
「サービス」とは、特定のタイプのCephサービスを指す総称です。たとえば、Ceph Managerなどです。
「デーモン」とは、サービスの特定のインスタンスを指します。たとえば、ses-min1
という名前のノードで実行されるmgr.ses-min1.gdlcik
プロセスなどです。
cephadmが認識しているすべてのサービスを一覧にするには、次のコマンドを実行します。
cephuser@adm >
ceph orch ls
NAME RUNNING REFRESHED AGE PLACEMENT IMAGE NAME IMAGE ID
mgr 1/0 5m ago - <no spec> registry.example.com/[...] 5bf12403d0bd
mon 1/0 5m ago - <no spec> registry.example.com/[...] 5bf12403d0bd
リストに特定のノードのサービスだけを表示するには、オプションの-–host
パラメータを使用します。特定のタイプのサービスだけを表示するには、オプションの--service-type
パラメータを使用します。指定できるタイプは、mon
、osd
、mgr
、mds
、およびrgw
です。
cephadmが展開した実行中のすべてのデーモンを一覧にするには、次のコマンドを実行します。
cephuser@adm >
ceph orch ps
NAME HOST STATUS REFRESHED AGE VERSION IMAGE ID CONTAINER ID
mgr.ses-min1.gd ses-min1 running) 8m ago 12d 15.2.0.108 5bf12403d0bd b8104e09814c
mon.ses-min1 ses-min1 running) 8m ago 12d 15.2.0.108 5bf12403d0bd a719e0087369
特定のデーモンのステータスを照会するには、--daemon_type
と--daemon_id
を使用します。OSDの場合、IDは数字のOSD IDです。MDSの場合、IDはファイルシステム名です。
cephuser@adm >
ceph orch ps --daemon_type osd --daemon_id 0cephuser@adm >
ceph orch ps --daemon_type mds --daemon_id my_cephfs
8.2 サービス仕様と配置仕様 #
Cephサービスの展開内容を指定する方法としては、YAMLフォーマットのファイルを作成して、展開したいサービスの仕様を記載することをお勧めします。
8.2.1 サービス仕様の作成 #
サービスタイプごとに個別の仕様ファイルを作成できます。以下に例を示します。
root@master #
cat nfs.yml
service_type: nfs
service_id: EXAMPLE_NFS
placement:
hosts:
- ses-min1
- ses-min2
spec:
pool: EXAMPLE_POOL
namespace: EXAMPLE_NAMESPACE
もしくは、各サービスを実行するノードを記載した単一のファイル(cluster.yml
など)により、複数の(または、すべての)サービスタイプを指定することもできます。それぞれのサービスタイプを3つのダッシュ記号(---
)で区切ることを忘れないでください。
cephuser@adm >
cat cluster.yml
service_type: nfs
service_id: EXAMPLE_NFS
placement:
hosts:
- ses-min1
- ses-min2
spec:
pool: EXAMPLE_POOL
namespace: EXAMPLE_NAMESPACE
---
service_type: rgw
service_id: REALM_NAME.ZONE_NAME
placement:
hosts:
- ses-min1
- ses-min2
- ses-min3
---
[...]
各プロパティが意味するものは、以下の通りです。
service_type
サービスのタイプです。次のいずれかを指定できます。Cephサービス(
mon
、mgr
、mds
、crash
、osd
、rbd-mirror
)、ゲートウェイ(nfs
、rgw
)、監視スタックの一部(alertmanager
、grafana
、node-exporter
、prometheus
)。service_id
サービスの名前です。次のサービスタイプについては、
service_id
プロパティは不要です。mon
、mgr
、alertmanager
、grafana
、node-exporter
、prometheus
。placement
どのノードがサービスを実行するかを指定します。詳細については、8.2.2項 「配置仕様の作成」を参照してください。
spec
サービスタイプに関連する、追加仕様です。
通常、Cephクラスタのサービスには、いくつかの固有のプロパティがあります。個別のサービス仕様の例と詳細については、8.3項 「Cephサービスの展開」を参照してください。
8.2.2 配置仕様の作成 #
Cephサービスを展開するには、サービスの展開先ノードをcephadmが認識する必要があります。placement
プロパティを使用して、サービスを適用するノードのホスト名の略称を列挙してください。
cephuser@adm >
cat cluster.yml
[...]
placement:
hosts:
- host1
- host2
- host3
[...]
8.2.3 クラスタ仕様の適用 #
すべてのサービス仕様とサービスの配置仕様を記載した完全なcluster.yml
ファイルの作成が完了したら、次のコマンドを実行して、クラスタに仕様を適用してください。
cephuser@adm >
ceph orch apply -i cluster.yml
クラスタのステータスを確認するには、ceph orch status
コマンドを実行します。詳細については、「8.1.1項 「オーケストレータステータスの表示」」を参照してください。
8.2.4 実行中のクラスタ仕様のエクスポート #
8.2項 「サービス仕様と配置仕様」で説明した仕様ファイルを用いてCephクラスタにサービスを展開したにもかかわらず、運用中にクラスタの設定が元の仕様から変わる場合もあります。また、誤って仕様ファイルを削除してしまうことも考えられます。
実行中のクラスタからすべての仕様を取得するには、次のコマンドを実行してください。
cephuser@adm >
ceph orch ls --export
placement:
hosts:
- hostname: ses-min1
name: ''
network: ''
service_id: my_cephfs
service_name: mds.my_cephfs
service_type: mds
---
placement:
count: 2
service_name: mgr
service_type: mgr
---
[...]
--format
オプションを付加することで、デフォルトのyaml
出力フォーマットを変更できます。選択できるフォーマットは、json
、json-pretty
、yaml
です。以下に例を示します。
ceph orch ls --export --format json
8.3 Cephサービスの展開 #
基本的なクラスタの実行後、他のノードにCephサービスを展開できます。
8.3.1 Ceph MonitorとCeph Managerの展開 #
Cephクラスタでは、3個または5個のMONを異なるノードに展開します。クラスタに5個以上のノードが含まれる場合、5個のMONを展開することをお勧めします。MONと同じノードにMGRを展開すると良いでしょう。
MONとMGRを展開する際は、7.2.5項 「最初のMON/MGRノードの指定」で基本的なクラスタを構成した際に追加した、最初のMONを忘れずに含めてください。
MONを展開するには、次の仕様を適用してください。
service_type: mon placement: hosts: - ses-min1 - ses-min2 - ses-min3
別のノードを追加する必要がある場合は、同じYAMLリストにホスト名を付加してください。以下に例を示します。
service_type: mon placement: hosts: - ses-min1 - ses-min2 - ses-min3 - ses-min4
同様に、MGRを展開するには次の仕様を適用してください。
展開ごとに、少なくとも3個のCeph Managerが展開されているかを確認してください。
service_type: mgr placement: hosts: - ses-min1 - ses-min2 - ses-min3
MONまたはMGRが同じサブネット上に存在しない場合、サブネットアドレスを付加する必要があります。以下に例を示します。
service_type: mon placement: hosts: - ses-min1:10.1.2.0/24 - ses-min2:10.1.5.0/24 - ses-min3:10.1.10.0/24
8.3.2 Ceph OSDの展開 #
以下の条件をすべて満たす場合、ストレージデバイスは「使用可能」とみなされます。
デバイスにパーティションが作成されていない。
デバイスがLVM状態ではない。
デバイスがマウント先になっていない。
デバイスにファイルシステムが含まれない。
デバイスにBlueStore OSDが含まれない。
デバイスのサイズが5GBを超えている。
これらの条件が満たされない場合、CephはそのOSDのプロビジョニングを拒否します。
OSDを展開する方法は2つあります。
「使用可能」とみなされた未使用のストレージデバイスをすべて使用するよう、Cephに指示する方法。
cephuser@adm >
ceph orch apply osd --all-available-devicesDriveGroupsを使用してデバイスを記述したOSD仕様を作成し、そのプロパティを基にデバイスを展開する方法(13.4.3項 「DriveGroups仕様を用いたOSDの追加」を参照してください)。プロパティの例としては、デバイスの種類(SSDまたはHDD)、デバイスのモデル名、サイズ、デバイスが存在するノードなどがあります。仕様の作成後、次のコマンドを実行して仕様を適用します。
cephuser@adm >
ceph orch apply osd -i drive_groups.yml
8.3.3 メタデータサーバの展開 #
CephFSは1つ以上のMDS(メタデータサーバ)サービスを必要とします。CephFSを作成するには、まず以下の仕様を適用して、MDSサーバを作成する必要があります。
最低でも2つのプールを作成してから以下の仕様を適用してください。1つはCephFSのデータ用、もう1つはCephFSのメタデータ用のプールです。
service_type: mds service_id: CEPHFS_NAME placement: hosts: - ses-min1 - ses-min2 - ses-min3
MDSが機能したら、CephFSを作成します。
ceph fs new CEPHFS_NAME metadata_pool data_pool
8.3.4 Object Gatewayの展開 #
cephadmはObject Gatewayを、特定の「レルム」と「ゾーン」を管理するデーモンのコレクションとして展開します。
Object Gatewayサービスを既存のレルムとゾーンに関連付けることも(詳細については、21.13項 「マルチサイトObject Gateway」を参照してください)、存在しないREALM_NAMEとZONE_NAMEを指定することもできます。後者の場合、次の設定を適用すると自動的にゾーンとレルムが作成されます。
service_type: rgw service_id: REALM_NAME.ZONE_NAME placement: hosts: - ses-min1 - ses-min2 - ses-min3 spec: rgw_realm: RGW_REALM rgw_zone: RGW_ZONE
8.3.4.1 セキュアなSSLアクセスの使用 #
Object Gatewayへの接続にセキュアなSSL接続を使用するには、有効なSSL証明書とキーファイルのペアが必要です(詳細については、21.7項 「Object GatewayでのHTTPS/SSLの有効化」を参照してください)。必要な作業は、SSLの有効化、SSL接続のポート番号の指定、SSL証明書とキーファイルの指定です。
SSLを有効化し、ポート番号を指定するには、仕様に次の内容を記載します。
spec: ssl: true rgw_frontend_port: 443
SSL証明書とキーを指定するには、YAML仕様ファイルに内容を直接ペーストすることができます。行末のパイプ記号(|
)は、構文解析の際に複数行にまたがる文字列を1つの値として認識させるためのものです。以下に例を示します。
spec: ssl: true rgw_frontend_port: 443 rgw_frontend_ssl_certificate: | -----BEGIN CERTIFICATE----- MIIFmjCCA4KgAwIBAgIJAIZ2n35bmwXTMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNV BAYTAkFVMQwwCgYDVQQIDANOU1cxHTAbBgNVBAoMFEV4YW1wbGUgUkdXIFNTTCBp [...] -----END CERTIFICATE----- rgw_frontend_ssl_key: | -----BEGIN PRIVATE KEY----- MIIJRAIBADANBgkqhkiG9w0BAQEFAASCCS4wggkqAgEAAoICAQDLtFwg6LLl2j4Z BDV+iL4AO7VZ9KbmWIt37Ml2W6y2YeKX3Qwf+3eBz7TVHR1dm6iPpCpqpQjXUsT9 [...] -----END PRIVATE KEY-----
SSL証明書とキーファイルの内容をペーストする代わりに、rgw_frontend_ssl_certificate:
キーワードとrgw_frontend_ssl_key:
キーワードを削除して、設定データベースにSSL証明書とキーファイルをアップロードすることもできます。
cephuser@adm >
ceph config-key set rgw/cert/REALM_NAME/ZONE_NAME.crt \ -i SSL_CERT_FILEcephuser@adm >
ceph config-key set rgw/cert/REALM_NAME/ZONE_NAME.key \ -i SSL_KEY_FILE
8.3.4.1.1 ポート443と80の両方でリスンするようにObject Gatewayを設定する #
ポート443 (HTTPS)とポート80 (HTTP)の両方でリスンするようにObject Gatewayを設定するには、次の手順に従います。
この手順のコマンドは、レルムとゾーンのdefault
を使用します。
仕様ファイルを提供して、Object Gatewayを展開します。Object Gateway仕様の詳細については、8.3.4項 「Object Gatewayの展開」を参照してください。次のコマンドを実行します。
cephuser@adm >
ceph orch apply -i SPEC_FILESSL証明書が仕様ファイルで提供されていない場合は、次のコマンドを使用してSSL証明書を追加します。
cephuser@adm >
ceph config-key set rgw/cert/default/default.crt -i certificate.pemcephuser@adm >
ceph config-key set rgw/cert/default/default.key -i key.pemrgw_frontends
オプションのデフォルト値を変更します。cephuser@adm >
ceph config set client.rgw.default.default rgw_frontends \ "beast port=80 ssl_port=443"cephadmによって作成された特定の設定を削除します。次のコマンドを実行して、
rgw_frontends
オプションが設定されているターゲットを特定します。cephuser@adm >
ceph config dump | grep rgwたとえば、ターゲットは
client.rgw.default.default.node4.yiewdu
です。現在の特定のrgw_frontends
値を削除します。cephuser@adm >
ceph config rm client.rgw.default.default.node4.yiewdu rgw_frontendsヒントrgw_frontends
の値を削除する代わりに指定できます。例:cephuser@adm >
ceph config set client.rgw.default.default.node4.yiewdu \ rgw_frontends "beast port=80 ssl_port=443"Object Gatewayを再起動します。
cephuser@adm >
ceph orch restart rgw.default.default
8.3.4.2 サブクラスタを使用した展開 #
「サブクラスタ」はクラスタ内のノードの整理に役立ちます。これによりワークロードを分離することで、弾力的な拡張が容易になります。サブクラスタを使用して展開する場合は、次の設定を適用します。
service_type: rgw service_id: REALM_NAME.ZONE_NAME.SUBCLUSTER placement: hosts: - ses-min1 - ses-min2 - ses-min3 spec: rgw_realm: RGW_REALM rgw_zone: RGW_ZONE subcluster: SUBCLUSTER
8.3.5 iSCSI Gatewayの展開 #
cephadmが展開するiSCSI Gatewayは、クライアント(「イニシエータ」)から、リモートサーバ上のSCSIストレージデバイス(「ターゲット」)にSCSIコマンドを送信できるようにする、SAN(ストレージエリアネットワーク)プロトコルです。
展開するには以下の設定を適用します。trusted_ip_list
にすべてのiSCSI GatewayノードとCeph ManagerノードのIPアドレスが含まれているか確認してください(以下の出力例を参照してください)。
以下の仕様を適用する前に、プールが作成されているか確認してください。
service_type: iscsi service_id: EXAMPLE_ISCSI placement: hosts: - ses-min1 - ses-min2 - ses-min3 spec: pool: EXAMPLE_POOL api_user: EXAMPLE_USER api_password: EXAMPLE_PASSWORD trusted_ip_list: "IP_ADDRESS_1,IP_ADDRESS_2"
trusted_ip_list
に列挙されたIPについて、カンマ区切りの後にスペースが入っていないことを確認してください。
8.3.5.1 セキュアなSSLの設定 #
セキュアなSSL接続をCephダッシュボードとiSCSIターゲットAPIの間で使用するには、有効なSSL証明書とキーファイルのペアが必要です。証明書とキーファイルは、CAが発行したものか自己署名したものを使用します(10.1.1項 「自己署名証明書の作成」を参照してください)。SSLを有効化するには、仕様ファイルにapi_secure: true
設定を含めます。
spec: api_secure: true
SSL証明書とキーを指定するには、YAML仕様ファイルに内容を直接ペーストすることができます。行末のパイプ記号(|
)は、構文解析の際に複数行にまたがる文字列を1つの値として認識させるためのものです。以下に例を示します。
spec: pool: EXAMPLE_POOL api_user: EXAMPLE_USER api_password: EXAMPLE_PASSWORD trusted_ip_list: "IP_ADDRESS_1,IP_ADDRESS_2" api_secure: true ssl_cert: | -----BEGIN CERTIFICATE----- MIIDtTCCAp2gAwIBAgIYMC4xNzc1NDQxNjEzMzc2MjMyXzxvQ7EcMA0GCSqGSIb3 DQEBCwUAMG0xCzAJBgNVBAYTAlVTMQ0wCwYDVQQIDARVdGFoMRcwFQYDVQQHDA5T [...] -----END CERTIFICATE----- ssl_key: | -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC5jdYbjtNTAKW4 /CwQr/7wOiLGzVxChn3mmCIF3DwbL/qvTFTX2d8bDf6LjGwLYloXHscRfxszX/4h [...] -----END PRIVATE KEY-----
8.3.6 NFS Ganeshaの展開 #
NFS Ganeshaは、NFSバージョン4.1以降をサポートしています。NFSバージョン3はサポートしていません。
cephadmはNFS Ganeshaの展開に、事前定義されたRADOSプールとオプションのネームスペースを使用します。NFS Ganeshaを展開するには、次の仕様を適用してください。
事前定義されたRADOSプールが必要です。これが存在しない場合は、ceph orch apply
処理に失敗します。プールの作成の詳細については、18.1項 「プールの作成」を参照してください。
service_type: nfs service_id: EXAMPLE_NFS placement: hosts: - ses-min1 - ses-min2 spec: pool: EXAMPLE_POOL namespace: EXAMPLE_NAMESPACE
EXAMPLE_NFSにはNFSエクスポートを識別する任意の文字列を指定します。
EXAMPLE_POOLにはNFS GaneshaのRADOS設定オブジェクトを保存するプール名を指定します。
EXAMPLE_NAMESPACE(オプション)には、希望するObject GatewayのNFSネームスペースを指定します(
ganesha
など)。
8.3.7 配備 rbd-mirror
#
rbd-mirror
サービスは2つのCephクラスタ間でRADOS Block Deviceイメージの同期を行います(詳細については20.4項 「RBDイメージのミラーリング」を参照してください)。rbd-mirror
を展開するには、次の仕様を使用してください。
service_type: rbd-mirror service_id: EXAMPLE_RBD_MIRROR placement: hosts: - ses-min3
8.3.8 監視スタックの展開 #
監視スタックは、Prometheus、Prometheusエクスポータ、Prometheus Alertmanager、Grafanaから構成されます。Cephダッシュボードはこうしたコンポーネントを利用して、クラスタの使用量やパフォーマンスの詳細なメトリクスの保存と視覚化を行います。
展開に監視スタックサービスのカスタムコンテナイメージやローカルコンテナイメージを必要とする場合は、16.1項 「カスタムイメージまたはローカルイメージの設定」を参照してください。
監視スタックを展開するには、以下の手順に従ってください。
Ceph Managerデーモンで
prometheus
モジュールを有効化します。これにより、Cephの内部メトリクスが公開され、Prometheusから読み取れるようになります。cephuser@adm >
ceph mgr module enable prometheus注記このコマンドはPrometheusの展開前に実行してください。展開前にコマンドを実行していない場合、Prometheusを再展開してPrometheusの設定を更新する必要があります。
cephuser@adm >
ceph orch redeploy prometheus次のような内容を含む仕様ファイル(
monitoring.yaml
など)を作成します。service_type: prometheus placement: hosts: - ses-min2 --- service_type: node-exporter --- service_type: alertmanager placement: hosts: - ses-min4 --- service_type: grafana placement: hosts: - ses-min3
次のコマンドを実行して、監視サービスを適用します。
cephuser@adm >
ceph orch apply -i monitoring.yaml監視サービスの展開には1、2分かかる場合があります。
Prometheus、Grafana、Cephダッシュボードは、お互いに通信できるようにすべて自動的に設定されます。そのため、この手順で展開されたとき、Cephダッシュボードには完全に機能するGrafanaが統合されています。
このルールの例外は、RBDイメージの監視だけです。詳細については、16.5.4項 「RBDイメージ監視の有効化」を参照してください。