블록 장치에서 OpenStack 가이드
Ceph를 OpenStack의 백엔드로 사용하도록 Ceph, QEMU, libvirt 및 OpenStack을 구성합니다.
초록
1장. Ceph 블록 장치 및 OpenStack
Red Hat Enterprise Linux OpenStack Platform Director는 Ceph를 Glance, Cinder, Cinder Backup 및 Nova의 백엔드로 사용하는 두 가지 방법을 제공합니다.
- OpenStack에서 Ceph 스토리지 클러스터를 생성합니다. OpenStack Director는 Ceph 스토리지 클러스터를 생성할 수 있습니다. 이를 위해서는 Ceph OSD용 템플릿을 구성해야 합니다. OpenStack은 Ceph 호스트의 설치 및 구성을 처리합니다. 이 시나리오에서 OpenStack은 OpenStack 컨트롤러 호스트를 사용하여 Ceph 모니터를 설치합니다.
- OpenStack은 기존 Ceph 스토리지 클러스터에 연결합니다. Red Hat OpenStack Platform 9 이상을 사용하는 OpenStack Director는 Ceph 모니터에 연결하고 OpenStack의 백엔드로 사용할 Ceph 스토리지 클러스터를 구성할 수 있습니다.
앞의 방법은 Ceph를 OpenStack용 백엔드로 구성하는 기본 방법입니다. 이는 많은 설치 및 구성을 자동으로 처리하기 때문입니다.
이 문서에서는 Ceph를 백엔드로 사용하기 위해 Ceph, QEMU, libvirt 및 OpenStack을 구성하는 수동 절차에 대해 자세히 설명합니다. 이 문서는 RHEL OSP Director를 사용하지 않으려는 사용자를 위한 것입니다.

Ceph 블록 장치를 OpenStack의 백엔드로 사용하려면 실행 중인 Ceph 스토리지 클러스터와 하나 이상의 OpenStack 호스트가 필요합니다.
OpenStack의 세 가지 부분은 Ceph의 블록 장치와 통합됩니다.
- 이미지: OpenStack Glance는 VM의 이미지를 관리합니다. 이미지는 변경할 수 없습니다. OpenStack에서는 이미지를 바이너리 Blob으로 처리하고 그에 따라 이미지를 다운로드합니다.
- 볼륨: 볼륨은 블록 장치입니다. OpenStack에서는 볼륨을 사용하여 VM을 부팅하거나, 실행 중인 VM에 볼륨을 연결합니다. OpenStack은 Cinder 서비스를 사용하여 볼륨을 관리합니다. Ceph는 OpenStack Cinder 및 Cinder 백업의 블랙리스트 역할을 할 수 있습니다.
-
게스트 디스크: 게스트 디스크는 게스트 운영 체제 디스크입니다. 기본적으로 가상 머신을 부팅할 때 디스크는 기본적으로
/var/lib/nova/instances/<uuid>/
디렉터리의 파일 시스템에 파일로 표시됩니다. OpenStack Glance는 Ceph 블록 장치에 이미지를 저장할 수 있으며, Cinder를 사용하여 이미지의 COW(Copy-On-Write) 복제본을 사용하여 가상 머신을 부팅할 수 있습니다.
Ceph는 가상 머신 디스크 호스팅에 QCOW2를 지원하지 않습니다. 가상 머신을 부팅하려면 임시 백엔드 또는 볼륨에서 부팅하려면 Glance 이미지 형식이 RAW여야 합니다.
OpenStack은 이미지, 볼륨 또는 게스트 디스크 가상 머신에 Ceph를 사용할 수 있습니다. 이 세 가지를 모두 사용할 필요는 없습니다.
추가 리소스
- 자세한 내용은 Red Hat OpenStack Platform 설명서를 참조하십시오.
2장. OpenStack용 Ceph 설치 및 구성
스토리지 관리자는 Red Hat OpenStack Platform에서 Ceph 블록 장치를 사용하기 전에 Ceph를 설치하고 구성해야 합니다.
사전 요구 사항
- 신규 또는 기존 Red Hat Ceph Storage 클러스터.
2.1. OpenStack용 Ceph 풀 생성
OpenStack에서 사용할 Ceph 풀을 생성할 수 있습니다. 기본적으로 Ceph 블록 장치는 rbd
풀을 사용하지만 사용 가능한 풀을 사용할 수 있습니다.
사전 요구 사항
- 실행 중인 Red Hat Ceph Storage 클러스터.
절차
Red Hat Ceph Storage 클러스터가 실행 중이며
HEALTH_OK
상태인지 확인합니다.[root@mon ~]# ceph -s
Ceph 풀을 생성합니다.
예제
[root@mon ~]# ceph osd pool create volumes 128 [root@mon ~]# ceph osd pool create backups 128 [root@mon ~]# ceph osd pool create images 128 [root@mon ~]# ceph osd pool create vms 128
위의 예에서
128
은 배치 그룹의 수입니다.중요Red Hat은 Ceph Placement Group의 풀당 계산기 를 사용하여 풀에 적합한 배치 그룹을 계산할 것을 권장합니다.
추가 리소스
- 풀 생성에 대한 자세한 내용은 스토리지 전략 가이드의 풀 장을 참조하십시오.
2.2. OpenStack에 Ceph 클라이언트 설치
Red Hat OpenStack Platform에 Ceph 클라이언트 패키지를 설치하여 Ceph 스토리지 클러스터에 액세스할 수 있습니다.
사전 요구 사항
- 실행 중인 Red Hat Ceph Storage 클러스터.
- Ceph 소프트웨어 리포지토리에 액세스합니다.
- OpenStack Nova, Cinder, Cinder 백업 및 Glance 노드에 대한 루트 수준 액세스.
절차
OpenStack Nova에서 Cinder 백업 노드는 다음 패키지를 설치합니다.
[root@nova ~]# dnf install python-rbd ceph-common
OpenStack Glance 호스트에서
python-rbd
패키지를 설치합니다.[root@glance ~]# dnf install python-rbd
2.3. Ceph 구성 파일을 OpenStack에 복사
Ceph 구성 파일을 nova-compute
,cinder-backup
,cinder-volume
, glance-api
노드에 복사합니다.
사전 요구 사항
- 실행 중인 Red Hat Ceph Storage 클러스터.
- Ceph 소프트웨어 리포지토리에 액세스합니다.
- OpenStack Nova, Cinder 및 Glance 노드에 대한 루트 수준 액세스.
절차
Ceph Monitor 호스트에서 OpenStack Nova, Cinder, Cinder 백업 및 Glance 노드로 Ceph 구성 파일을 복사합니다.
[root@mon ~]# scp /etc/ceph/ceph.conf OPENSTACK_NODES:/etc/ceph
2.4. Ceph 클라이언트 인증 구성
Red Hat OpenStack Platform에 액세스하도록 Ceph 클라이언트에 대한 인증을 구성할 수 있습니다.
사전 요구 사항
- Ceph Monitor 호스트에 대한 루트 수준 액세스.
- 실행 중인 Red Hat Ceph Storage 클러스터.
절차
Ceph Monitor 호스트에서 Cinder, Cinder Backup 및 Glance에 사용할 새 사용자를 만듭니다.
[root@mon ~]# ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images' [root@mon ~]# ceph auth get-or-create client.cinder-backup mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=backups' [root@mon ~]# ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
client.cinder ,
client.cinder
-backupclient.glance
의 인증 키를 적절한 노드에 추가하고 소유권을 변경합니다.[root@mon ~]# ceph auth get-or-create client.cinder | ssh CINDER_VOLUME_NODE sudo tee /etc/ceph/ceph.client.cinder.keyring [root@mon ~]# ssh CINDER_VOLUME_NODE chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring [root@mon ~]# ceph auth get-or-create client.cinder-backup | ssh CINDER_BACKUP_NODE tee /etc/ceph/ceph.client.cinder-backup.keyring [root@mon ~]# ssh CINDER_BACKUP_NODE chown cinder:cinder /etc/ceph/ceph.client.cinder-backup.keyring [root@mon ~]# ceph auth get-or-create client.glance | ssh GLANCE_API_NODE sudo tee /etc/ceph/ceph.client.glance.keyring [root@mon ~]# ssh GLANCE_API_NODE chown glance:glance /etc/ceph/ceph.client.glance.keyring
OpenStack Nova 노드에는
nova-compute
프로세스의 키링 파일이 필요합니다.[root@mon ~]# ceph auth get-or-create client.cinder | ssh NOVA_NODE tee /etc/ceph/ceph.client.cinder.keyring
OpenStack Nova 노드에서도
client.cinder
사용자의 시크릿 키를libvirt
에 저장해야 합니다. Cinder에서 블록 장치를 연결하는 동안libvirt
프로세스에 클러스터에 액세스하려면 시크릿 키가 필요합니다. OpenStack Nova 노드에 시크릿 키의 임시 사본을 만듭니다.[root@mon ~]# ceph auth get-key client.cinder | ssh NOVA_NODE tee client.cinder.key
스토리지 클러스터에
전용 잠금
기능을 사용하는 Ceph 블록 장치 이미지가 포함된 경우 모든 Ceph 블록 장치 사용자에게 클라이언트를 차단할 수 있는 권한이 있는지 확인합니다.[root@mon ~]# ceph auth caps client.ID mon 'allow r, allow command "osd blacklist"' osd 'EXISTING_OSD_USER_CAPS'
OpenStack Nova 호스트로 돌아갑니다.
[root@mon ~]# ssh NOVA_NODE
시크릿의 UUID를 생성하고 나중에
nova-compute
를 구성하기 위해 시크릿의 UUID를 저장합니다.[root@nova ~]# uuidgen > uuid-secret.txt
참고모든 Nova 컴퓨팅 노드에 UUID가 필요하지는 않습니다. 그러나 플랫폼 일관성 관점에서 동일한 UUID를 유지하는 것이 좋습니다.
OpenStack Nova 노드에서
libvirt
에 시크릿 키를 추가하고 키의 임시 사본을 제거합니다.cat > secret.xml <<EOF <secret ephemeral='no' private='no'> <uuid>`cat uuid-secret.txt`</uuid> <usage type='ceph'> <name>client.cinder secret</name> </usage> </secret> EOF
libvirt
시크릿을 설정하고 정의합니다.[root@nova ~]# virsh secret-define --file secret.xml [root@nova ~]# virsh secret-set-value --secret $(cat uuid-secret.txt) --base64 $(cat client.cinder.key) && rm client.cinder.key secret.xml
추가 리소스
- 자세한 내용은 Red Hat Ceph Storage 관리 가이드의 Ceph 사용자 관리 섹션을 참조하십시오.
- 사용자 기능에 대한 자세한 내용은 Integrating an Overcloud with an Existing Red Hat Ceph Cluster Guide for Red Hat OpenStack Platform의 기존 ceph 스토리지 클러스터 구성 섹션을 참조하십시오.
3장. Ceph 블록 장치를 사용하도록 OpenStack 구성
스토리지 관리자는 Ceph 블록 장치를 사용하도록 Red Hat OpenStack Platform을 구성해야 합니다. Red Hat OpenStack Platform은 Cinder, Cinder Backup, Glance, Nova에 Ceph 블록 장치를 사용할 수 있습니다.
사전 요구 사항
- 신규 또는 기존 Red Hat Ceph Storage 클러스터.
- 실행 중인 Red Hat OpenStack Platform 환경.
3.1. Ceph 블록 장치를 사용하도록 Cinder 구성
Red Hat OpenStack Platform은 Ceph 블록 장치를 사용하여 Cinder 볼륨에 백엔드 스토리지를 제공할 수 있습니다.
사전 요구 사항
- Cinder 노드에 대한 루트 수준 액세스.
-
Ceph
볼륨
풀입니다. - Ceph 블록 장치와 상호 작용할 시크릿의 사용자 및 UUID입니다.
절차
Cinder 구성 파일을 편집합니다.
[root@cinder ~]# vim /etc/cinder/cinder.conf
[DEFAULT]
섹션에서 Ceph를 Cinder의 백엔드로 활성화합니다.enabled_backends = ceph
Glance API 버전이 2로 설정되어 있는지 확인합니다.
enabled_backends
에서 여러 cinder 백엔드를 구성하는 경우glance_api_version = 2
설정은[ceph]
섹션이 아닌[DEFAULT]
섹션에 있어야 합니다.glance_api_version = 2
-
cinder.conf
파일에[ceph]
섹션을 생성합니다.[ceph]
섹션의 다음 단계에 Ceph 설정을 추가합니다. volume_driver
설정을 지정하고 Ceph 블록 장치 드라이버를 사용하도록 설정합니다.volume_driver = cinder.volume.drivers.rbd.RBDDriver
클러스터 이름 및 Ceph 구성 파일 위치를 지정합니다. 일반적인 배포에서는 Ceph 클러스터의 클러스터 이름이
ceph
이고 Ceph 구성 파일이/etc/ceph/ceph.conf
에 있습니다. Ceph 클러스터 이름이ceph
가 아닌 경우 클러스터 이름 및 구성 파일 경로를 적절하게 지정합니다.rbd_cluster_name = us-west rbd_ceph_conf = /etc/ceph/us-west.conf
기본적으로 Red Hat OpenStack Platform은 Ceph 볼륨을
rbd
풀에 저장합니다. 이전에 생성된volumes
풀을 사용하려면rbd_pool
설정을 지정하고volumes
풀을 설정합니다.rbd_pool = volumes
Red Hat OpenStack Platform에는 볼륨의 기본 사용자 이름 또는 시크릿의 UUID가 없습니다.
rbd_user
를 지정하고cinder
사용자로 설정합니다. 그런 다음rbd_secret_uuid
설정을 지정하고uuid-secret.txt
파일에 저장된 생성된 UUID로 설정합니다.rbd_user = cinder rbd_secret_uuid = 4b5fd580-360c-4f8c-abb5-c83bb9a3f964
다음 설정을 지정합니다.
rbd_flatten_volume_from_snapshot = false rbd_max_clone_depth = 5 rbd_store_chunk_size = 4 rados_connect_timeout = -1
Ceph 블록 장치를 사용하도록 Cinder를 구성하면 구성 파일은 다음과 유사할 수 있습니다.
예제
[DEFAULT] enabled_backends = ceph glance_api_version = 2 … [ceph] volume_driver = cinder.volume.drivers.rbd.RBDDriver rbd_cluster_name = ceph rbd_pool = volumes rbd_user = cinder rbd_ceph_conf = /etc/ceph/ceph.conf rbd_flatten_volume_from_snapshot = false rbd_secret_uuid = 4b5fd580-360c-4f8c-abb5-c83bb9a3f964 rbd_max_clone_depth = 5 rbd_store_chunk_size = 4 rados_connect_timeout = -1
참고기본
[lvm]
섹션 및 해당 설정을 제거하는 것이 좋습니다.
3.2. Ceph 블록 장치를 사용하도록 Cinder 백업 구성
Red Hat OpenStack Platform은 Ceph 블록 장치를 사용하도록 Cinder 백업을 구성할 수 있습니다.
사전 요구 사항
- Cinder 노드에 대한 루트 수준 액세스.
절차
Cinder 구성 파일을 편집합니다.
[root@cinder ~]# vim /etc/cinder/cinder.conf
-
구성 파일의
[ceph]
섹션으로 이동합니다. backup_driver
설정을 지정하고 Ceph 드라이버로 설정합니다.backup_driver = cinder.backup.drivers.ceph
backup_ceph_conf
설정을 지정하고 Ceph 구성 파일의 경로를 지정합니다.backup_ceph_conf = /etc/ceph/ceph.conf
참고Cinder 백업 Ceph 구성 파일은 Cinder에 사용되는 Ceph 구성 파일과 다를 수 있습니다. 예를 들어 다른 Ceph 스토리지 클러스터를 가리킬 수 있습니다.
백업에 사용할 Ceph 풀을 지정합니다.
backup_ceph_pool = backups
참고Cinder 백업에 사용되는 Ceph 구성 파일은 Cinder에 사용되는 Ceph 구성 파일과 다를 수 있습니다.
backup_ceph_user
설정을 지정하고 사용자를cinder-backup
으로 지정합니다.backup_ceph_user = cinder-backup
다음 설정을 지정합니다.
backup_ceph_chunk_size = 134217728 backup_ceph_stripe_unit = 0 backup_ceph_stripe_count = 0 restore_discard_excess_bytes = true
Cinder 옵션을 포함하는 경우
cinder.conf
파일의[ceph]
섹션은 다음과 유사할 수 있습니다.예제
[ceph] volume_driver = cinder.volume.drivers.rbd.RBDDriver rbd_cluster_name = ceph rbd_pool = volumes rbd_user = cinder rbd_ceph_conf = /etc/ceph/ceph.conf rbd_flatten_volume_from_snapshot = false rbd_secret_uuid = 4b5fd580-360c-4f8c-abb5-c83bb9a3f964 rbd_max_clone_depth = 5 rbd_store_chunk_size = 4 rados_connect_timeout = -1 backup_driver = cinder.backup.drivers.ceph backup_ceph_user = cinder-backup backup_ceph_conf = /etc/ceph/ceph.conf backup_ceph_chunk_size = 134217728 backup_ceph_pool = backups backup_ceph_stripe_unit = 0 backup_ceph_stripe_count = 0 restore_discard_excess_bytes = true
Cinder 백업이 활성화되어 있는지 확인합니다.
[root@cinder ~]# cat /etc/openstack-dashboard/local_settings | grep enable_backup
enable_backup
이False
로 설정된 경우local_settings
파일을 편집하여True
로 설정합니다.예제
OPENSTACK_CINDER_FEATURES = { 'enable_backup': True, }
3.3. Glance에서 Ceph 블록 장치를 사용하도록 구성
Red Hat OpenStack Platform은 Glance에서 Ceph 블록 장치를 사용하도록 구성할 수 있습니다.
사전 요구 사항
- Glance 노드에 대한 루트 수준 액세스.
절차
기본적으로 Ceph 블록 장치를 사용하려면
/etc/glance/glance-api.conf
파일을 편집합니다. 다른 풀, 사용자 또는 Ceph 구성 파일 설정을 사용한 경우 적절한 값을 적용합니다. 필요한 경우 다음 설정의 주석을 제거하고 그에 따라 값을 변경합니다.[root@glance ~]# vim /etc/glance/glance-api.conf
stores = rbd default_store = rbd rbd_store_chunk_size = 8 rbd_store_pool = images rbd_store_user = glance rbd_store_ceph_conf = /etc/ceph/ceph.conf
COW(Copy-On-Write) 복제를 활성화하려면
show_image_direct_url
을True
로 설정합니다.show_image_direct_url = True
중요CoW를 활성화하면 Glance API를 통해 백엔드 위치를 노출하므로 엔드포인트에 공개적으로 액세스할 수 없습니다.
필요한 경우 캐시 관리를 비활성화합니다.
플레이버
는keystone+cachemanagement
가 아닌keystone
으로만 설정해야 합니다.flavor = keystone
Red Hat은 다음과 같은 이미지 속성을 권장합니다.
hw_scsi_model=virtio-scsi hw_disk_bus=scsi hw_qemu_guest_agent=yes os_require_quiesce=yes
virtio-scsi
컨트롤러는 성능이 향상되고 삭제 작업을 지원합니다. SCSI/ECDHE 드라이브를 사용하는 시스템의 경우 모든 Cinder 블록 장치를 해당 컨트롤러에 연결합니다. 또한 QEMU 게스트 에이전트를 활성화하고 QEMU 게스트 에이전트를 통해fs-freeze/thaw
호출을 보냅니다.
3.4. Ceph 블록 장치를 사용하도록 Nova 구성
Red Hat OpenStack Platform은 Ceph 블록 장치를 사용하도록 Nova를 구성할 수 있습니다.
모든 가상 시스템이 Ceph 블록 장치를 사용할 수 있도록 임시 백엔드 스토리지 장치를 사용하도록 각 Nova 노드를 구성해야 합니다.
사전 요구 사항
- Nova 노드에 대한 루트 수준 액세스.
절차
Ceph 구성 파일을 편집합니다.
[root@nova ~]# vim /etc/ceph/ceph.conf
Ceph 구성 파일의
[client]
섹션에 다음 섹션을 추가합니다.[client] rbd cache = true rbd cache writethrough until flush = true rbd concurrent management ops = 20 admin socket = /var/run/ceph/guests/$cluster-$type.$id.$pid.$cctid.asok log file = /var/log/ceph/qemu-guest-$pid.log
admin 소켓 및 로그 파일에 대한 새 디렉터리를 생성하고
qemu
사용자 및libvirtd
그룹을 사용하도록 디렉터리 권한을 변경합니다.[root@nova ~]# mkdir -p /var/run/ceph/guests/ /var/log/ceph/ [root@nova ~]# chown qemu:libvirt /var/run/ceph/guests /var/log/ceph/
참고SELinux 또는 AppArmor에서 디렉터리를 허용해야 합니다.
각 Nova 노드에서
/etc/nova/nova.conf
파일을 편집합니다.[libvirt]
섹션에서 다음 설정을 구성합니다.예제
[libvirt] images_type = rbd images_rbd_pool = vms images_rbd_ceph_conf = /etc/ceph/ceph.conf rbd_user = cinder rbd_secret_uuid = 4b5fd580-360c-4f8c-abb5-c83bb9a3f964 disk_cachemodes="network=writeback" inject_password = false inject_key = false inject_partition = -2 live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST,VIR_MIGRATE_TUNNELLED" hw_disk_discard = unmap
rbd_user_secret
의 UUID를uuid-secret.txt
파일의 UUID로 바꿉니다.
3.5. OpenStack 서비스 다시 시작
Red Hat OpenStack Platform 서비스를 다시 시작하면 Ceph 블록 장치 드라이버를 활성화할 수 있습니다.
사전 요구 사항
- Red Hat OpenStack Platform 노드에 대한 루트 수준 액세스.
절차
- 블록 장치 풀 이름과 Ceph 사용자 이름을 구성 파일에 로드합니다.
해당 구성 파일을 수정한 후 적절한 OpenStack 서비스를 다시 시작합니다.
[root@osp ~]# systemctl restart openstack-cinder-volume [root@osp ~]# systemctl restart openstack-cinder-backup [root@osp ~]# systemctl restart openstack-glance-api [root@osp ~]# systemctl restart openstack-nova-compute