Red Hat Training

A Red Hat training course is available for Red Hat Ceph Storage

第1章 コンテナーへの Red Hat Ceph Storage のデプロイ

この章では、Ansible アプリケーションと ceph-ansible Playbook を使用して Red Hat Ceph Storage 3 をコンテナーにデプロイする方法について説明します。

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 ノードの場合、最初にインターネットにアクセスできるシステムで次の手順を実行する必要があります。

    1. ローカル Docker レジストリーを起動します。

      # docker run -d -p 5000:5000 --restart=always --name registry registry:2
    2. Red Hat Customer Portal から Red Hat Ceph Storage 3.x イメージをプルします。

      # docker pull registry.access.redhat.com/rhceph/rhceph-3-rhel7
    3. イメージにタグを付けます。

       # docker tag registry.access.redhat.com/rhceph/rhceph-3-rhel7 <local-host-fqdn>:5000/cephimageinlocalreg

      <local-host-fqdn> をローカルホストの FQDN に置き換えます。

    4. イメージを、起動したローカルの Docker レジストリーにプッシュします。

      # docker push <local-host-fqdn>:5000/cephimageinlocalreg

      <local-host-fqdn> をローカルホストの FQDN に置き換えます。

手順

ストレージクラスター内のすべてのノードで root ユーザーとして以下の手順を実行します。

  1. ノードを登録する。プロンプトが表示されたら、Red Hat カスタマーポータルの認証情報を入力します。

    # subscription-manager register
  2. CDN から最新のサブスクリプションデータをプルします。

    # subscription-manager refresh
  3. Red Hat Ceph Storage で利用可能なサブスクリプションの一覧を表示します。

    # subscription-manager list --available --all --matches="*Ceph*"

    適切なサブスクリプションを特定し、プール ID を取得します。

  4. サブスクリプションを割り当てます。

    # subscription-manager attach --pool=$POOL_ID
    置き換え
    • $POOL_ID を、直前の手順で特定されたプール ID に置き換えます。
  5. デフォルトのソフトウェアリポジトリーを無効にします。次に、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
  6. システムを更新して、最新のパッケージを受け取ります。

    # yum update
関連情報

1.1.2. sudo アクセスのある Ansible ユーザーの作成

Ansible は、ソフトウェアをインストールし、パスワードを要求せずに設定ファイルを作成するための root 権限を持つユーザーとして、すべての Red Hat Ceph Storage (RHCS) ノードにログインできる必要があります。Ansible を使用して Red Hat Ceph Storage クラスターをデプロイおよび設定する際に、ストレージクラスター内のすべてのノードにパスワードなしの root アクセスで Ansible ユーザーを作成する必要があります。

前提条件

  • ストレージクラスター内のすべてのノードへの root または sudo アクセスがある。

手順

  1. Ceph ノードに root ユーザーとしてログインします。

    ssh root@$HOST_NAME
    置き換え
    • $HOST_NAME は、Ceph ノードのホスト名に置き換えます。

    # ssh root@mon01

    プロンプトに従い root パスワードを入力します。

  2. 新しい Ansible ユーザーを作成します。

    adduser $USER_NAME
    置き換え
    • $USER_NAME は、Ansible ユーザーの新規ユーザー名に置き換えます。

    # adduser admin

    重要

    ceph をユーザー名として使用しないでください。ceph ユーザー名は、Ceph デーモン用に予約されます。クラスター全体で統一されたユーザー名を使用すると、使いやすさが向上しますが、侵入者は通常、そのユーザー名をブルートフォース攻撃に使用するため、明白なユーザー名の使用は避けてください。

  3. このユーザーに新しいパスワードを設定します。

    # passwd $USER_NAME
    置き換え
    • $USER_NAME は、Ansible ユーザーの新規ユーザー名に置き換えます。

    # passwd admin

    プロンプトが表示されたら、新しいパスワードを 2 回入力します。

  4. 新規に作成されたユーザーの 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

  5. 正しいファイル権限を新しいファイルに割り当てます。

    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 ユーザーとして次の手順を実行します。

  1. SSH キーペアを生成し、デフォルトのファイル名を受け入れ、パスフレーズを空のままにします。

    [user@admin ~]$ ssh-keygen
  2. 公開鍵をストレージクラスター内のすべてのノードにコピーします。

    ssh-copy-id $USER_NAME@$HOST_NAME
    置き換え
    • $USER_NAME は、Ansible ユーザーの新規ユーザー名に置き換えます。
    • $HOST_NAME は、Ceph ノードのホスト名に置き換えます。

    [user@admin ~]$ ssh-copy-id admin@ceph-mon01

  3. ~/.ssh/config ファイルを作成および編集します。

    重要

    ~/.ssh/config ファイルを作成および編集することで、ansible-playbook コマンドを実行するたびに -u $USER_NAME オプションを指定する必要はありません。

    1. SSH config ファイルを作成します。

      [user@admin ~]$ touch ~/.ssh/config
    2. 編集のために config ファイルを開きます。ストレージクラスターの各ノードの HostnameUser オプションを設定します。

      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

  4. ~/.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 ユーザーで実行します。

  1. すべての RHCS ノードで、firewalld サービスを起動します。これを有効にして、システムの起動時に実行し、実行していることを確認します。

    # systemctl enable firewalld
    # systemctl start firewalld
    # systemctl status firewalld
  2. すべての 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
  3. すべての 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

    別のクラスターネットワークがある場合には、適切なゾーンでコマンドを繰り返します。

  4. すべての 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

    別のクラスターネットワークがある場合には、適切なゾーンでコマンドを繰り返します。

  5. すべての 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

    別のクラスターネットワークがある場合には、適切なゾーンでコマンドを繰り返します。

  6. すべての Ceph Object Gateway ノードで、パブリックネットワーク上の関連するポートを開きます。

    1. デフォルトの 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
    2. オプション: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
    3. オプション: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

関連情報

1.1.5. HTTP プロキシーの使用

Ceph ノードが HTTP/HTTPS プロキシーの背後にある場合は、レジストリー内のイメージにアクセスするように docker を設定する必要があります。以下の手順に従って、HTTP/HTTPS プロキシーを使用して docker のアクセスを設定します。

前提条件
  • 実行中の HTTP/HTTPS プロキシー
手順
  1. root として、docker サービスの systemd ディレクトリーを作成します。

    # mkdir /etc/systemd/system/docker.service.d/
  2. root として、HTTP/HTTPS 設定ファイルを作成します。

    1. HTTP の場合は、/etc/systemd/system/docker.service.d/http-proxy.conf ファイルを作成し、以下の行をファイルに追加します。

      [Service]
      Environment="HTTP_PROXY=http://proxy.example.com:80/"
    2. HTTPS の場合は、/etc/systemd/system/docker.service.d/https-proxy.conf ファイルを作成し、以下の行をファイルに追加します。

      [Service]
      Environment="HTTPS_PROXY=https://proxy.example.com:443/"
  3. root として、ceph-ansible Playbook を実行する前に、ストレージクラスター内のすべての Ceph ノードに HTTP/HTTPS 設定ファイルをコピーします。