17.4. ceph_orch_host 모듈을 사용하여 호스트 추가 또는 제거
스토리지 관리자는 Ansible 플레이북에서 ceph_orch_host 모듈을 사용하여 스토리지 클러스터에서 호스트를 추가하고 제거할 수 있습니다.
사전 요구 사항
- 실행 중인 Red Hat Ceph Storage 클러스터.
- 노드를 CDN에 등록하고 서브스크립션을 연결합니다.
- sudo 및 암호 없는 SSH를 사용하는 Ansible 사용자는 스토리지 클러스터의 모든 노드에 액세스할 수 있습니다.
-
Ansible 관리 노드에
cephadm-ansible패키지를 설치합니다. - 새 호스트에는 스토리지 클러스터의 공개 SSH 키가 있습니다. 스토리지 클러스터의 공개 SSH 키를 새 호스트에 복사하는 방법에 대한 자세한 내용은 Red Hat Ceph Storage 설치 가이드의 호스트 추가 를 참조하십시오.
프로세스
다음 절차에 따라 클러스터에 새 호스트를 추가합니다.
- Ansible 관리 노드에 로그인합니다.
Ansible 관리 노드의
/usr/share/cephadm-ansible디렉터리로 이동합니다.예제
[ceph-admin@admin ~]$ cd /usr/share/cephadm-ansibleAnsible 인벤토리 파일에 새 호스트 및 레이블을 추가합니다.
구문
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 인벤토리 파일에 추가하고 호스트에서 preflight 플레이북을 실행한 경우 3 단계로 건너뜁니다.
--limit옵션을 사용하여 preflight 플레이북을 실행합니다.구문
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 host02preflight Playbook은 새 호스트에
podman,lvm2,chronyd,cephadm을 설치합니다. 설치가 완료되면cephadm은/usr/sbin/디렉터리에 있습니다.새 호스트를 클러스터에 추가할 플레이북을 생성합니다.
구문
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은 플레이북의
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 }}"이 예에서 플레이북은 새 호스트를 클러스터에 추가하고 현재 호스트 목록을 표시합니다.
플레이북을 실행하여 클러스터에 호스트를 추가합니다.
구문
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-ansiblePlaybook을 생성하여 클러스터에서 호스트 또는 호스트를 제거합니다.
구문
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 }}"이 예에서 플레이북 작업은
host07의 모든 데몬을 드레이닝하고 클러스터에서 호스트를 제거하고 현재 호스트 목록을 표시합니다.플레이북을 실행하여 클러스터에서 호스트를 제거합니다.
구문
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