Adición o eliminación de hosts

Añada y elimine hosts en el clúster de almacenamiento utilizando el módulo ceph_orch_host en el playbook Ansible .

Requisitos previos

  • Un clúster de ejecución de IBM Storage Ceph.

  • Registre los nodos en la CDN y adjunte suscripciones.

  • Usuario Ansible con acceso SSH sin contraseña y sudo a todos los nodos del clúster de almacenamiento.

  • Instalación del paquete cephadm-ansible en el nodo de administración de Ansible .

  • Los nuevos hosts tienen la clave SSH pública del clúster de almacenamiento.

    Para obtener más información sobre cómo copiar las claves SSH públicas del clúster de almacenamiento en nuevos hosts, consulte Adición de hosts.

Procedimiento

  1. Utilice el procedimiento siguiente para añadir nuevos hosts al clúster:

    1. Inicie sesión en el nodo de administración de Ansible .

    2. Vaya al directorio /usr/share/cephadm-ansible en el nodo de administración de Ansible :

      Ejemplo

      [ansible@admin ~]$ cd /usr/share/cephadm-ansible
    3. Añada los nuevos hosts y etiquetas al archivo de inventario Ansible .

      Sintaxis

      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']"

      Ejemplo

      [ansible@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']"
      Nota: Si ha añadido anteriormente los nuevos hosts al archivo de inventario Ansible y ha ejecutado el playbook de prevuelo en los hosts, vaya al paso 3.
    4. Ejecute el playbook de prevuelo con la opción --limit :

      Sintaxis

      ansible-playbook -i INVENTORY_FILE cephadm-preflight.yml --extra-vars "ceph_origin=ibm" --limit NEWHOST

      Ejemplo

      [ansible@admin cephadm-ansible]$ ansible-playbook -i hosts cephadm-preflight.yml --extra-vars "ceph_origin=ibm" --limit host02

      El playbook de preparación previa instala podman, lvm2, chronyy cephadm en el nuevo host. Una vez completada la instalación, cephadm reside en el directorio /usr/sbin/ .

    5. Cree un playbook para añadir los nuevos hosts al clúster:

      Sintaxis

      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 }}"
      Nota: De forma predeterminada, Ansible ejecuta todas las tareas en el host que coinciden con la línea hosts del playbook. Los mandatos ceph orch deben ejecutarse en el host que contiene el conjunto de claves de administración y el archivo de configuración Ceph. Utilice la palabra clave delegate_to para especificar el host de administración en el clúster.

      Ejemplo

      [ansible@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 }}"

      En este ejemplo, el playbook añade los nuevos hosts al clúster y muestra una lista actual de hosts.

    6. Ejecute el playbook para añadir hosts adicionales al clúster:

      Sintaxis

      ansible-playbook -i INVENTORY_FILE PLAYBOOK_FILENAME.yml

      Ejemplo

      [ansible@admin cephadm-ansible]$ ansible-playbook -i hosts add-hosts.yml
  2. Utilice el procedimiento siguiente para eliminar hosts del clúster:

    1. Inicie sesión en el nodo de administración de Ansible .

    2. Vaya al directorio /usr/share/cephadm-ansible en el nodo de administración de Ansible :

      Ejemplo

      [ansible@admin ~]$ cd /usr/share/cephadm-ansible
    3. Cree un playbook para eliminar un host o hosts del clúster:

      Sintaxis

      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 }}"

      Ejemplo

      [ansible@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 }}"

    En este ejemplo, las tareas de playbook drenan todos los daemons en host07, elimina el host del clúster y muestra una lista actual de hosts.

  3. Ejecute el playbook para eliminar el host del clúster:

    Sintaxis

     ansible-playbook -i INVENTORY_FILE PLAYBOOK_FILENAME.yml

    Ejemplo

     [ansible@admin cephadm-ansible]$ ansible-playbook -i hosts remove-hosts.yml

Verificación

  • Revise la salida de la tarea Ansible que muestra la lista actual de hosts en el clúster:

    Ejemplo

    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