4.4. ceph_orch_host モジュールを使用したホストの追加または削除
ストレージ管理者は、Ansible Playbook の ceph_orch_host
モジュールを使用して、ストレージクラスター内のホストを追加および削除できます。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- ノードを CDN に登録して、サブスクリプションを割り当てます。
- ストレージクラスター内のすべてのノードへの sudo アクセスおよびパスワードなしの SSH アクセスのある Ansible ユーザー。
-
Ansible 管理ノードへの
cephadm-ansible
パッケージのインストール。 - 新しいホストには、ストレージクラスターの公開 SSH キーがあります。ストレージクラスターの公開 SSH キーを新しいホストにコピーする方法の詳細については、ホストの追加 を参照してください。
手順
次の手順を使用して、新しいホストをクラスターに追加します。
- Ansible 管理ノードにログインします。
Ansible 管理ノードの
/usr/share/cephadm-ansible
ディレクトリーに移動します。例
[ceph-admin@admin ~]$ cd /usr/share/cephadm-ansible
新しいホストとラベルを Ansible インベントリーファイルに追加します。
構文
sudo vi INVENTORY_FILE NEW_HOST1 labels="['LABEL1', 'LABEL2']" NEW_HOST2 labels="['LABEL1', 'LABEL2']" NEW_HOST3 labels="['LABEL1']" [admin] ADMIN_HOST monitor_address=MONITOR_IP_ADDRESS labels="['ADMIN_LABEL', 'LABEL1', 'LABEL2']"
例
[ceph-admin@admin cephadm-ansible]$ sudo vi hosts host02 labels="['mon', 'mgr']" host03 labels="['mon', 'mgr']" host04 labels="['osd']" host05 labels="['osd']" host06 labels="['osd']" [admin] host01 monitor_address= 10.10.128.68 labels="['_admin', 'mon', 'mgr']"
注記新しいホストを Ansible インベントリーファイルに追加し、ホストでプリフライト Playbook を実行している場合は、ステップ 3 に進みます。
--limit
オプションを指定して、プリフライト Playbook を実行します。構文
ansible-playbook -i INVENTORY_FILE cephadm-preflight.yml --extra-vars "ceph_origin=rhcs" --limit NEWHOST
例
[ceph-admin@admin cephadm-ansible]$ ansible-playbook -i hosts cephadm-preflight.yml --extra-vars "ceph_origin=rhcs" --limit host02
プリフライト Playbook は、新しいホストに
podman
、lvm2
、chrony
、およびcephadm を
インストールします。インストールが完了すると、cephadm
は/usr/sbin/
ディレクトリーに配置されます。新しいホストをクラスターに追加する Playbook を作成します。
構文
sudo vi PLAYBOOK_FILENAME.yml --- - name: PLAY_NAME hosts: HOSTS_OR_HOST_GROUPS become: USE_ELEVATED_PRIVILEGES gather_facts: GATHER_FACTS_ABOUT_REMOTE_HOSTS tasks: - name: NAME_OF_TASK ceph_orch_host: name: "{{ ansible_facts['hostname'] }}" address: "{{ ansible_facts['default_ipv4']['address'] }}" labels: "{{ labels }}" delegate_to: HOST_TO_DELEGATE_TASK_TO - name: NAME_OF_TASK when: inventory_hostname in groups['admin'] ansible.builtin.shell: cmd: CEPH_COMMAND_TO_RUN register: REGISTER_NAME - name: NAME_OF_TASK when: inventory_hostname in groups['admin'] debug: msg: "{{ REGISTER_NAME.stdout }}"
注記デフォルトでは、Ansible は Playbook の
hosts
行に一致するホストですべてのタスクを実行します。ceph orch
コマンドは、管理キーリングと Ceph 設定ファイルを含むホストで実行する必要があります。delegate_to
キーワードを使用して、クラスター内の管理ホストを指定します。例
[ceph-admin@admin cephadm-ansible]$ sudo vi add-hosts.yml --- - name: add additional hosts to the cluster hosts: all become: true gather_facts: true tasks: - name: add hosts to the cluster ceph_orch_host: name: "{{ ansible_facts['hostname'] }}" address: "{{ ansible_facts['default_ipv4']['address'] }}" labels: "{{ labels }}" delegate_to: host01 - name: list hosts in the cluster when: inventory_hostname in groups['admin'] ansible.builtin.shell: cmd: ceph orch host ls register: host_list - name: print current list of hosts when: inventory_hostname in groups['admin'] debug: msg: "{{ host_list.stdout }}"
この例では、Playbook は新しいホストをクラスターに追加し、ホストの現在のリストを表示します。
Playbook を実行して、追加のホストをクラスターに追加します。
構文
ansible-playbook -i INVENTORY_FILE PLAYBOOK_FILENAME.yml
例
[ceph-admin@admin cephadm-ansible]$ ansible-playbook -i hosts add-hosts.yml
次の手順を使用して、クラスターからホストを削除します。
- Ansible 管理ノードにログインします。
Ansible 管理ノードの
/usr/share/cephadm-ansible
ディレクトリーに移動します。例
[ceph-admin@admin ~]$ cd /usr/share/cephadm-ansible
クラスターからホストを削除する Playbook を作成します。
構文
sudo vi PLAYBOOK_FILENAME.yml --- - name: NAME_OF_PLAY hosts: ADMIN_HOST become: USE_ELEVATED_PRIVILEGES gather_facts: GATHER_FACTS_ABOUT_REMOTE_HOSTS tasks: - name: NAME_OF_TASK ceph_orch_host: name: HOST_TO_REMOVE state: STATE - name: NAME_OF_TASK ceph_orch_host: name: HOST_TO_REMOVE state: STATE retries: NUMBER_OF_RETRIES delay: DELAY until: CONTINUE_UNTIL register: REGISTER_NAME - name: NAME_OF_TASK ansible.builtin.shell: cmd: ceph orch host ls register: REGISTER_NAME - name: NAME_OF_TASK debug: msg: "{{ REGISTER_NAME.stdout }}"
例
[ceph-admin@admin cephadm-ansible]$ sudo vi remove-hosts.yml --- - name: remove host hosts: host01 become: true gather_facts: true tasks: - name: drain host07 ceph_orch_host: name: host07 state: drain - name: remove host from the cluster ceph_orch_host: name: host07 state: absent retries: 20 delay: 1 until: result is succeeded register: result - name: list hosts in the cluster ansible.builtin.shell: cmd: ceph orch host ls register: host_list - name: print current list of hosts debug: msg: "{{ host_list.stdout }}"
この例では、playbook タスクは
host07
上のすべてのデーモンをドレインし、クラスターからホストを削除し、ホストの現在のリストを表示します。Playbook を実行して、クラスターからホストを削除します。
構文
ansible-playbook -i INVENTORY_FILE PLAYBOOK_FILENAME.yml
例
[ceph-admin@admin cephadm-ansible]$ ansible-playbook -i hosts remove-hosts.yml
検証
クラスター内のホストの現在のリストを表示する Ansible タスクの出力を確認します。
例
TASK [print current hosts] ****************************************************************************************************** Friday 24 June 2022 14:52:40 -0400 (0:00:03.365) 0:02:31.702 *********** ok: [host01] => msg: |- HOST ADDR LABELS STATUS host01 10.10.128.68 _admin mon mgr host02 10.10.128.69 mon mgr host03 10.10.128.70 mon mgr host04 10.10.128.71 osd host05 10.10.128.72 osd host06 10.10.128.73 osd