第1章 コンテナーへの Red Hat Ceph Storage のデプロイ
この章では、Ansible アプリケーションと ceph-ansible Playbook
を使用して Red Hat Ceph Storage 3 をコンテナーにデプロイする方法について説明します。
- Red Hat Ceph Storage をインストールするには、「コンテナーへの Red Hat Ceph Storage Cluster のインストール」 を参照してください。
- Ceph Object Gatewayをインストールするには、「コンテナーへの Ceph Object Gateway のインストール」 を参照してください。
- メタデータサーバをインストールするには、「メタデータサーバーのインストール」 を参照してください。
-
Ansibleの
--limit
オプションについては、「limit
オプションについて」 を参照してください。
1.1. 前提条件
- 有効なカスタマーサブスクリプションを取得します。
クラスタノードの準備各ノードで以下を行います。
1.1.1. Red Hat Ceph Storage ノードの CDN への登録とサブスクリプションのアタッチ
各 Red Hat Ceph Storage (RHCS) ノードをコンテンツ配信ネットワーク (CDN) に登録し、ノードがソフトウェアリポジトリーにアクセスできるように適切なサブスクリプションを割り当てます。各 RHCS ノードは、Red Hat Enterprise Linux 7 のベースコンテンツとエクストラリポジトリのコンテンツに完全にアクセスできる必要があります。
前提条件
- 有効な Red Hat サブスクリプション
- RHCS のノードは、インターネットに接続できる必要があります。
インストール中にインターネットにアクセスできない RHCS ノードの場合、最初にインターネットにアクセスできるシステムで次の手順を実行する必要があります。
ローカル Docker レジストリーを起動します。
# docker run -d -p 5000:5000 --restart=always --name registry registry:2
Red Hat Customer Portal から Red Hat Ceph Storage 3.x イメージをプルします。
# docker pull registry.access.redhat.com/rhceph/rhceph-3-rhel7
イメージにタグを付けます。
# docker tag registry.access.redhat.com/rhceph/rhceph-3-rhel7 <local-host-fqdn>:5000/cephimageinlocalreg
<local-host-fqdn>
をローカルホストの FQDN に置き換えます。イメージを、起動したローカルの Docker レジストリーにプッシュします。
# docker push <local-host-fqdn>:5000/cephimageinlocalreg
<local-host-fqdn>
をローカルホストの FQDN に置き換えます。
手順
ストレージクラスター内のすべてのノードで root
ユーザーとして以下の手順を実行します。
ノードを登録する。プロンプトが表示されたら、Red Hat カスタマーポータルの認証情報を入力します。
# subscription-manager register
CDN から最新のサブスクリプションデータをプルします。
# subscription-manager refresh
Red Hat Ceph Storage で利用可能なサブスクリプションの一覧を表示します。
# subscription-manager list --available --all --matches="*Ceph*"
適切なサブスクリプションを特定し、プール ID を取得します。
サブスクリプションを割り当てます。
# subscription-manager attach --pool=$POOL_ID
- 置き換え
-
$POOL_ID
を、直前の手順で特定されたプール ID に置き換えます。
-
デフォルトのソフトウェアリポジトリーを無効にします。次に、Red Hat Enterprise Linux 7 Server、Red Hat Enterprise Linux 7 Server Extras、および RHCS リポジトリーを有効にします。
# subscription-manager repos --disable=* # subscription-manager repos --enable=rhel-7-server-rpms # subscription-manager repos --enable=rhel-7-server-extras-rpms # subscription-manager repos --enable=rhel-7-server-rhceph-3-mon-els-rpms # subscription-manager repos --enable=rhel-7-server-rhceph-3-osd-els-rpms # subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-els-rpms
システムを更新して、最新のパッケージを受け取ります。
# yum update
関連情報
- Red Hat Enterprise Linux 7 のシステム管理者ガイドのシステムの登録とサブスクリプションの管理の章を参照してください。
1.1.2. sudo
アクセスのある Ansible ユーザーの作成
Ansible は、ソフトウェアをインストールし、パスワードを要求せずに設定ファイルを作成するための root
権限を持つユーザーとして、すべての Red Hat Ceph Storage (RHCS) ノードにログインできる必要があります。Ansible を使用して Red Hat Ceph Storage クラスターをデプロイおよび設定する際に、ストレージクラスター内のすべてのノードにパスワードなしの root
アクセスで Ansible ユーザーを作成する必要があります。
前提条件
-
ストレージクラスター内のすべてのノードへの
root
またはsudo
アクセスがある。
手順
Ceph ノードに
root
ユーザーとしてログインします。ssh root@$HOST_NAME
- 置き換え
-
$HOST_NAME
は、Ceph ノードのホスト名に置き換えます。
-
例
# ssh root@mon01
プロンプトに従い
root
パスワードを入力します。新しい Ansible ユーザーを作成します。
adduser $USER_NAME
- 置き換え
-
$USER_NAME
は、Ansible ユーザーの新規ユーザー名に置き換えます。
-
例
# adduser admin
重要ceph
をユーザー名として使用しないでください。ceph
ユーザー名は、Ceph デーモン用に予約されます。クラスター全体で統一されたユーザー名を使用すると、使いやすさが向上しますが、侵入者は通常、そのユーザー名をブルートフォース攻撃に使用するため、明白なユーザー名の使用は避けてください。このユーザーに新しいパスワードを設定します。
# passwd $USER_NAME
- 置き換え
-
$USER_NAME
は、Ansible ユーザーの新規ユーザー名に置き換えます。
-
例
# passwd admin
プロンプトが表示されたら、新しいパスワードを 2 回入力します。
新規に作成されたユーザーの
sudo
アクセスを設定します。cat << EOF >/etc/sudoers.d/$USER_NAME $USER_NAME ALL = (root) NOPASSWD:ALL EOF
- 置き換え
-
$USER_NAME
は、Ansible ユーザーの新規ユーザー名に置き換えます。
-
例
# cat << EOF >/etc/sudoers.d/admin admin ALL = (root) NOPASSWD:ALL EOF
正しいファイル権限を新しいファイルに割り当てます。
chmod 0440 /etc/sudoers.d/$USER_NAME
- 置き換え
-
$USER_NAME
は、Ansible ユーザーの新規ユーザー名に置き換えます。
-
例
# chmod 0440 /etc/sudoers.d/admin
関連情報
- Red Hat Enterprise Linux 7 の『システム管理者のガイド』 の「 新しいユーザーの追加 」セクションを参照してください。
1.1.3. Ansible のパスワードなしの SSH の有効化
Ansible 管理ノードで SSH キーペアを生成し、ストレージクラスター内の各ノードに公開キーを配布して、Ansible がパスワードの入力を求められることなくノードにアクセスできるようにします。
前提条件
手順
Ansible 管理ノードから、Ansible ユーザーとして次の手順を実行します。
SSH キーペアを生成し、デフォルトのファイル名を受け入れ、パスフレーズを空のままにします。
[user@admin ~]$ ssh-keygen
公開鍵をストレージクラスター内のすべてのノードにコピーします。
ssh-copy-id $USER_NAME@$HOST_NAME
- 置き換え
-
$USER_NAME
は、Ansible ユーザーの新規ユーザー名に置き換えます。 -
$HOST_NAME
は、Ceph ノードのホスト名に置き換えます。
-
例
[user@admin ~]$ ssh-copy-id admin@ceph-mon01
~/.ssh/config
ファイルを作成および編集します。重要~/.ssh/config
ファイルを作成および編集することで、ansible-playbook
コマンドを実行するたびに-u $USER_NAME
オプションを指定する必要はありません。SSH
config
ファイルを作成します。[user@admin ~]$ touch ~/.ssh/config
編集のために
config
ファイルを開きます。ストレージクラスターの各ノードのHostname
とUser
オプションを設定します。Host node1 Hostname $HOST_NAME User $USER_NAME Host node2 Hostname $HOST_NAME User $USER_NAME ...
- 置き換え
-
$HOST_NAME
は、Ceph ノードのホスト名に置き換えます。 -
$USER_NAME
は、Ansible ユーザーの新規ユーザー名に置き換えます。
-
例
Host node1 Hostname monitor User admin Host node2 Hostname osd User admin Host node3 Hostname gateway User admin
~/.ssh/config
ファイルに正しいファイルパーミッションを設定します。[admin@admin ~]$ chmod 600 ~/.ssh/config
関連情報
-
ssh_config(5)
の man ページ - Red Hat Enterprise Linux7 の システム管理者ガイド の Open SSH の章
1.1.4. Red Hat Ceph Storage のファイアウォールの設定
Red Hat Ceph Storage (RHCS) は firewalld
サービスを使用します。
Monitor デーモンは、Ceph Storage クラスター内の通信にポート 6789
を使用します。
各 Ceph OSD ノードで、OSD デーモンは範囲 6800-7300
内の複数のポートを使用します。
- パブリックネットワークを介してクライアントおよびモニターと通信するための 1 つ
- クラスターネットワーク上で他の OSD にデータを送信する 1 つ (利用可能な場合)。それ以外の場合は、パブリックネットワーク経由でデータを送信します。
- 可能な場合は、クラスターネットワークを介してハートビートパケットを交換するための 1 つ。それ以外の場合は、パブリックネットワーク経由
Ceph Manager (ceph-mgr
) デーモンは、6800-7300
範囲内のポートを使用します。同じノード上で Ceph Monitor と ceph-mgr
デーモンを共存させることを検討してください。
Ceph Metadata Server ノード(ceph-mds)
は、6800~7300
の範囲のポートを使用します。
Ceph Object Gateway ノードは、デフォルトで 8080
を使用するように Ansible によって設定されます。ただし、デフォルトのポート (例: ポート 80
) を変更できます。
SSL/TLS サービスを使用するには、ポート 443
を開きます。
前提条件
- ネットワークハードウェアが接続されている。
手順
以下のコマンドを root
ユーザーで実行します。
すべての RHCS ノードで、
firewalld
サービスを起動します。これを有効にして、システムの起動時に実行し、実行していることを確認します。# systemctl enable firewalld # systemctl start firewalld # systemctl status firewalld
すべての Monitor ノードで、パブリックネットワークの
6789
ポートを開く。[root@monitor ~]# firewall-cmd --zone=public --add-port=6789/tcp [root@monitor ~]# firewall-cmd --zone=public --add-port=6789/tcp --permanent
ソースアドレスに基づいてアクセスを制限するには、以下を実行します。
firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="IP_address/netmask_prefix" port protocol="tcp" \ port="6789" accept"
firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="IP_address/netmask_prefix" port protocol="tcp" \ port="6789" accept" --permanent
- 置き換え
-
IP_address
には、Monitor ノードのネットワークアドレスを指定します。 -
netmask_prefix
には、CIDR 表記のネットマスクを指定します。
-
例
[root@monitor ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="192.168.0.11/24" port protocol="tcp" \ port="6789" accept"
[root@monitor ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="192.168.0.11/24" port protocol="tcp" \ port="6789" accept" --permanent
すべての OSD ノードで、パブリックネットワークでポート
6800-7300
を開きます。[root@osd ~]# firewall-cmd --zone=public --add-port=6800-7300/tcp [root@osd ~]# firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent
別のクラスターネットワークがある場合には、適切なゾーンでコマンドを繰り返します。
すべての Ceph Manager (
ceph-mgr
) ノード (通常はMonitorのノードと同じ) で、パブリックネットワークの6800~7300
番ポートを開きます。[root@monitor ~]# firewall-cmd --zone=public --add-port=6800-7300/tcp [root@monitor ~]# firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent
別のクラスターネットワークがある場合には、適切なゾーンでコマンドを繰り返します。
すべての Ceph Metadata Server (
ceph-mds
) ノードにおいて、パブリックネットワークでポート6800
を開きます。[root@monitor ~]# firewall-cmd --zone=public --add-port=6800/tcp [root@monitor ~]# firewall-cmd --zone=public --add-port=6800/tcp --permanent
別のクラスターネットワークがある場合には、適切なゾーンでコマンドを繰り返します。
すべての Ceph Object Gateway ノードで、パブリックネットワーク上の関連するポートを開きます。
デフォルトの Ansible が設定されたポート
8080
を開くには、以下のコマンドを実行します。[root@gateway ~]# firewall-cmd --zone=public --add-port=8080/tcp [root@gateway ~]# firewall-cmd --zone=public --add-port=8080/tcp --permanent
ソースアドレスに基づいてアクセスを制限するには、以下を実行します。
firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="IP_address/netmask_prefix" port protocol="tcp" \ port="8080" accept"
firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="IP_address/netmask_prefix" port protocol="tcp" \ port="8080" accept" --permanent
- 置き換え
-
オブジェクトゲートウェイノードのネットワークアドレスを含む
IP_address
。 -
netmask_prefix
には、CIDR 表記のネットマスクを指定します。
-
オブジェクトゲートウェイノードのネットワークアドレスを含む
例
[root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="192.168.0.31/24" port protocol="tcp" \ port="8080" accept"
[root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="192.168.0.31/24" port protocol="tcp" \ port="8080" accept" --permanent
オプション:Ansible を使用して Ceph Object Gateway をインストールし、使用する Ceph Object Gateway を Ansible が構成するデフォルトのポートを
8080
からポート80
に変更した場合は、次のポートを開きます。[root@gateway ~]# firewall-cmd --zone=public --add-port=80/tcp [root@gateway ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent
ソースアドレスに基づいてアクセスを制限するには、以下のコマンドを実行します。
firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="IP_address/netmask_prefix" port protocol="tcp" \ port="80" accept"
firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="IP_address/netmask_prefix" port protocol="tcp" \ port="80" accept" --permanent
- 置き換え
-
オブジェクトゲートウェイノードのネットワークアドレスを含む
IP_address
。 -
netmask_prefix
には、CIDR 表記のネットマスクを指定します。
-
オブジェクトゲートウェイノードのネットワークアドレスを含む
例
[root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="192.168.0.31/24" port protocol="tcp" \ port="80" accept"
[root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="192.168.0.31/24" port protocol="tcp" \ port="80" accept" --permanent
オプション:SSL/TLS を使用するには、
443
ポートを開きます。[root@gateway ~]# firewall-cmd --zone=public --add-port=443/tcp [root@gateway ~]# firewall-cmd --zone=public --add-port=443/tcp --permanent
ソースアドレスに基づいてアクセスを制限するには、以下のコマンドを実行します。
firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="IP_address/netmask_prefix" port protocol="tcp" \ port="443" accept"
firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="IP_address/netmask_prefix" port protocol="tcp" \ port="443" accept" --permanent
- 置き換え
-
オブジェクトゲートウェイノードのネットワークアドレスを含む
IP_address
。 -
netmask_prefix
には、CIDR 表記のネットマスクを指定します。
-
オブジェクトゲートウェイノードのネットワークアドレスを含む
例
[root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="192.168.0.31/24" port protocol="tcp" \ port="443" accept" [root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \ source address="192.168.0.31/24" port protocol="tcp" \ port="443" accept" --permanent
関連情報
- パブリックネットワークおよびクラスターネットワークの詳細は、「Red Hat Ceph Storage のネットワーク設定の確認」を参照してください。
-
Firewalld
の詳細は、 Red Hat Enterprise Linux 7 のセキュリティーガイドのファイアウォールの使用の章を参照してください。
1.1.5. HTTP プロキシーの使用
Ceph ノードが HTTP/HTTPS プロキシーの背後にある場合は、レジストリー内のイメージにアクセスするように docker を設定する必要があります。以下の手順に従って、HTTP/HTTPS プロキシーを使用して docker のアクセスを設定します。
前提条件
- 実行中の HTTP/HTTPS プロキシー
手順
root
として、docker サービスの systemd ディレクトリーを作成します。# mkdir /etc/systemd/system/docker.service.d/
root
として、HTTP/HTTPS 設定ファイルを作成します。HTTP の場合は、
/etc/systemd/system/docker.service.d/http-proxy.conf
ファイルを作成し、以下の行をファイルに追加します。[Service] Environment="HTTP_PROXY=http://proxy.example.com:80/"
HTTPS の場合は、
/etc/systemd/system/docker.service.d/https-proxy.conf
ファイルを作成し、以下の行をファイルに追加します。[Service] Environment="HTTPS_PROXY=https://proxy.example.com:443/"
-
root
として、ceph-ansible Playbook
を実行する前に、ストレージクラスター内のすべての Ceph ノードに HTTP/HTTPS 設定ファイルをコピーします。