4.4. 使用 ceph_orch_host 模块添加或删除主机


作为存储管理员,您可以使用 Ansible playbook 中的 ceph_orch_host 模块添加和删除存储集群中的主机。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 将节点注册到 CDN 并附加订阅。
  • 具有 sudo 的 Ansible 用户,对存储集群中的所有节点进行免密码 SSH 访问。
  • 在 Ansible 管理节点上安装 cephadm-ansible 软件包。
  • 新主机具有存储集群的公共 SSH 密钥。有关将存储集群的公共 SSH 密钥复制到新主机的更多信息,请参阅 添加主机

流程

  1. 使用以下步骤在集群中添加新主机:

    1. 登录 Ansible 管理节点。
    2. 进入 Ansible 管理节点上的 /usr/share/cephadm-ansible 目录:

      示例

      [ceph-admin@admin ~]$ cd /usr/share/cephadm-ansible
      Copy to Clipboard Toggle word wrap

    3. 将新主机和标签添加到 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']"
      Copy to Clipboard Toggle word wrap

      示例

      [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']"
      Copy to Clipboard Toggle word wrap

    4. 使用 --limit 选项运行 preflight playbook:

      语法

      ansible-playbook -i INVENTORY_FILE cephadm-preflight.yml --extra-vars "ceph_origin=rhcs" --limit NEWHOST
      Copy to Clipboard Toggle word wrap

      示例

      [ceph-admin@admin cephadm-ansible]$ ansible-playbook -i hosts cephadm-preflight.yml --extra-vars "ceph_origin=rhcs" --limit host02
      Copy to Clipboard Toggle word wrap

      preflight playbook 在新主机上安装 podmanlvm2chronycephadm。安装完成后,cephadm 驻留在 /usr/sbin/ 目录中。

    5. 创建 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 }}"
      Copy to Clipboard Toggle word wrap

      注意

      默认情况下,Ansible 在与 playbook 的 hosts 行匹配的主机上执行所有任务。ceph orch 命令必须在包含管理员密钥环和 Ceph 配置文件的主机上运行。使用 delegate_to 关键字指定集群中的 admin 主机。

      示例

      [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 }}"
      Copy to Clipboard Toggle word wrap

      在本例中,playbook 将新主机添加到集群中,并显示当前的主机列表。

    6. 运行 playbook 以将其他主机添加到集群中:

      语法

      ansible-playbook -i INVENTORY_FILE PLAYBOOK_FILENAME.yml
      Copy to Clipboard Toggle word wrap

      示例

      [ceph-admin@admin cephadm-ansible]$ ansible-playbook -i hosts add-hosts.yml
      Copy to Clipboard Toggle word wrap

  2. 使用以下步骤从集群中删除主机:

    1. 登录 Ansible 管理节点。
    2. 进入 Ansible 管理节点上的 /usr/share/cephadm-ansible 目录:

      示例

      [ceph-admin@admin ~]$ cd /usr/share/cephadm-ansible
      Copy to Clipboard Toggle word wrap

    3. 创建 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 }}"
      Copy to Clipboard Toggle word wrap

      示例

      [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 }}"
      Copy to Clipboard Toggle word wrap

      在本例中,playbook 任务排空 host07 上的所有守护进程,从集群中删除主机,并显示当前主机列表。

    4. 运行 playbook 以从集群中删除主机:

      语法

      ansible-playbook -i INVENTORY_FILE PLAYBOOK_FILENAME.yml
      Copy to Clipboard Toggle word wrap

      示例

      [ceph-admin@admin cephadm-ansible]$ ansible-playbook -i hosts remove-hosts.yml
      Copy to Clipboard Toggle word wrap

验证

  • 查看 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
    Copy to Clipboard Toggle word wrap

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat