15.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-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 인벤토리 파일에 추가하고 호스트에서 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 host02
preflight 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
키워드를 사용하여 클러스터에서 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 }}"
이 예제에서 플레이북은 새 호스트를 클러스터에 추가하고 현재 호스트 목록을 표시합니다.
플레이북을 실행하여 클러스터에 호스트를 추가합니다.
구문
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
클러스터에서 호스트 또는 호스트를 제거하는 플레이북을 생성합니다.
구문
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
의 모든 데몬을 드레이닝하고, 클러스터에서 호스트를 제거하고, 현재 호스트 목록을 표시합니다.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