⑩ OpenStack高可用集群部署方案(train版)—OpenStack对接Ceph存储

十八、OpenStack对接Ceph存储

参考Ceph官方安装文档

Openstack环境中,数据存储可分为临时性存储与永久性存储。

临时性存储:主要由本地文件系统提供,并主要用于nova虚拟机的本地系统与临时数据盘,以及存储glance上传的系统镜像;

永久性存储:主要由cinder提供的块存储与swift提供的对象存储构成,以cinder提供的块存储应用最为广泛,块存储通常以云盘的形式挂载到虚拟机中使用。

Openstack中需要进行数据存储的三大项目主要是nova项目(虚拟机镜像文件),glance项目(共用模版镜像)与cinder项目(块存储)。

下图为cinder,glance与nova访问ceph集群的逻辑图:

ceph与openstack集成主要用到ceph的rbd服务,ceph底层为rados存储集群,ceph通过librados库实现对底层rados的访问;

openstack各项目客户端调用librbd,再由librbd调用librados访问底层rados;
实际使用中,nova需要使用libvirtdriver驱动以通过libvirt与qemu调用librbd;cinder与glance可直接调用librbd;

写入ceph集群的数据被条带切分成多个object,object通过hash函数映射到pg(构成pg容器池pool),然后pg通过几圈crush算法近似均匀地映射到物理存储设备osd(osd是基于文件系统的物理存储设备,如xfs,ext4等)。

图片来自博客园 Netonline

CEPH PG数量设置与详细介绍

在创建池之前要设置一下每个OSD的最大PG 数量

PG PGP官方计算公式计算器

参数解释:

  • Target PGs per OSD:预估每个OSD的PG数,一般取100计算。当预估以后集群OSD数不会增加时,取100计算;当预估以后集群OSD数会增加一倍时,取200计算。
  • OSD #:集群OSD数量。
  • %Data:预估该pool占该OSD集群总容量的近似百分比。
  • Size:该pool的副本数。

依据参数使用公式计算新的 PG 的数目:
PG 总数= ((OSD总数*100)/最大副本数)/池数
3x100/3/3=33.33 ;舍入到2的N次幕为32

一、OpenStack集群上的操作

openstack集群作为ceph的客户端;下面需要再openstack集群上进行ceph客户端的环境配置

1. OpenStack全部节点上添加ceph的yum源

在openstack所有控制和计算节点安装ceph Octopus源码包,centos8有默认安装,但是版本一定要跟连接的ceph版本一致

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

rm -f /etc/yum.repos.d/ceph-nautilus.repo
cat >/etc/yum.repos.d/ceph.repo <<EOF
[Ceph]
name=Ceph packages for \$basearch
baseurl=https://mirrors.aliyun.com/ceph/rpm-octopus/el8/\$basearch
enabled=1
gpgcheck=0
type=rpm-md

[Ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-octopus/el8/noarch
enabled=1
gpgcheck=0
type=rpm-md

[ceph-source]
name=Ceph source packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-octopus/el8/SRPMS
enabled=1
gpgcheck=0
type=rpm-md
EOF

yum clean all && yum makecache

2. 安装Ceph客户端

#openstack全部节点安装ceph;已配置yum源,直接安装即可;目的是可以在openstack集群使用ceph的命令
yum install ceph -y

2.1 glance服务所在节点安装python3-rbd

glance-api服务运行在3个控制节点,因此三台控制节点都必须安装

yum install python3-rbd -y

2.2 cinder-volume与nova-compute服务所在节点安装ceph-common

cinder-volumenova-compute服务运行在3个计算(存储)节点;因此三台计算节点都必须安装

yum install ceph-common -y

4. 需要有ceph的配置文件(ceph集群上操作)

将配置文件和密钥复制到openstack集群各节点

配置文件就是生成的ceph.conf;而密钥是ceph.client.admin.keyring,当使用ceph客户端连接至ceph集群时需要使用的密默认密钥,这里我们所有节点都要复制,命令如下

#复制ceph集群默认admin密钥文件到openstack集群
scp -rp /etc/ceph/ceph.client.admin.keyring controller01:/etc/ceph/
scp -rp /etc/ceph/ceph.client.admin.keyring controller02:/etc/ceph/
scp -rp /etc/ceph/ceph.client.admin.keyring controller03:/etc/ceph/
scp -rp /etc/ceph/ceph.client.admin.keyring compute01:/etc/ceph/
scp -rp /etc/ceph/ceph.client.admin.keyring compute02:/etc/ceph/
scp -rp /etc/ceph/ceph.client.admin.keyring compute03:/etc/ceph/

#复制ceph配置文件到openstack集群
scp -rp /etc/ceph/ceph.conf controller01:/etc/ceph/ceph.conf
scp -rp /etc/ceph/ceph.conf controller02:/etc/ceph/ceph.conf
scp -rp /etc/ceph/ceph.conf controller03:/etc/ceph/ceph.conf
scp -rp /etc/ceph/ceph.conf compute01:/etc/ceph/ceph.conf
scp -rp /etc/ceph/ceph.conf compute02:/etc/ceph/ceph.conf
scp -rp /etc/ceph/ceph.conf compute03:/etc/ceph/ceph.conf

二、Ceph集群上的操作

1. 需求说明

※Glance 作为openstack中镜像服务,支持多种适配器,支持将镜像存放到本地文件系统,http服务器,ceph分布式文件系统,glusterfs和sleepdog等开源的分布式文件系统上。目前glance采用的是本地filesystem的方式存储,存放在默认的路径/var/lib/glance/images下,当把本地的文件系统修改为分布式的文件系统ceph之后,原本在系统中镜像将无法使用,所以建议当前的镜像删除,部署好ceph之后,再统一上传至ceph中存储。

※Nova 负责虚拟机的生命周期管理,包括创建,删除,重建,开机,关机,重启,快照等,作为openstack的核心,nova负责IaaS中计算重要的职责,其中nova的存储格外重要,默认情况下,nova将instance的数据存放在/var/lib/nova/instances/%UUID目录下,使用本地的存储空间。使用这种方式带来的好处是:简单,易实现,速度快,故障域在一个可控制的范围内。然而,缺点也非常明显:compute出故障,上面的虚拟机down机时间长,没法快速恢复,此外,一些特性如热迁移live-migration,虚拟机容灾nova evacuate等高级特性,将无法使用,对于后期的云平台建设,有明显的缺陷。对接 Ceph 主要是希望将实例的系统磁盘文件储存到 Ceph 集群中。与其说是对接 Nova,更准确来说是对接 QEMU-KVM/libvirt,因为 librbd 早已原生集成到其中。

※Cinder 为 OpenStack 提供卷服务,支持非常广泛的后端存储类型。对接 Ceph 后,Cinder 创建的 Volume 本质就是 Ceph RBD 的块设备,当 Volume 被虚拟机挂载后,Libvirt 会以 rbd 协议的方式使用这些 Disk 设备。除了 cinder-volume 之后,Cinder 的 Backup 服务也可以对接 Ceph,将备份的 Image 以对象或块设备的形式上传到 Ceph 集群。

2. 原理解析

使用ceph的rbd接口,需要通过libvirt,所以需要在客户端机器上安装libvirt和qemu,关于ceph和openstack结合的结构如下,同时,在openstack中,需要用到存储的地方有三个:

  1. glance的镜像,默认的本地存储,路径在/var/lib/glance/images目录下,
  2. nova虚拟机存储,默认本地,路径位于/var/lib/nova/instances目录下,
  3. cinder存储,默认采用LVM的存储方式。

3. 创建pool池

为 Glance、Nova、Cinder 创建专用的RBD Pools池

需要配置hosts解析文件,这里最开始已经配置完成,如未添加hosts解析需要进行配置

在cephnode01管理节点上操作;命名为:volumes,vms,images

#ceph默认创建了一个pool池为rbd
[root@cephnode01 ~]# ceph osd lspools
1 device_health_metrics
2 .rgw.root
3 zone-dc1.rgw.log
4 zone-dc1.rgw.control
5 zone-dc1.rgw.meta
-----------------------------------
    
#为 Glance、Nova、Cinder 创建专用的 RBD Pools,并格式化
ceph osd pool create images 32 32
ceph osd pool create volumes 32 32
ceph osd pool create vms 32 32

rbd pool init volumes
rbd pool init images
rbd pool init vms

-----------------------------------
    
#查看pool的pg_num和pgp_num大小
[root@cephnode01 ~]# ceph osd pool get vms pg_num
pg_num: 32
[root@cephnode01 ~]# ceph osd pool get vms pgp_num
pgp_num: 32

-----------------------------------
    
#查看ceph中的pools;忽略之前创建的pool
[root@cephnode01 ~]# ceph osd lspools
...
8 images
9 volumes
10 vms

[root@cephnode01 ~]# ceph osd pool stats
...
pool images id 8
  nothing is going on

pool volumes id 9
  nothing is going on

pool vms id 10
  nothing is going on

记录:删除存储池的操作

#cephadm中需要进入容器
podman exec -it ceph-dfc1628e-f739-11ea-ad44-0050568280f6-mon.cephnode01 bash
#在ceph.conf配置文件中添加如下内容
[mon]
mon allow pool delete = true
#退出容器
exit

#重启ceph-mon服务
systemctl restart ceph-dfc1628e-f739-11ea-ad44-0050568280f6@mon.cephnode01.service
##执行删除pool命令
ceph osd pool delete volumes volumes --yes-i-really-really-mean-it

4. ceph授权认证

在cephnode01管理节点上操作

4.1 通过ceph管理节点为Glance、cinder创建用户

针对pool设置权限,pool名对应创建的pool

[root@cephnode01 ~]# ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
[client.glance]
    key = AQBjyGFfA96jCRAAlnZBfLIGGFoqg1fF821U7Q==

[root@cephnode01 ~]# 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'
[client.cinder]
    key = AQBuyGFfrTxYCRAAN8jpf5hheaJVBaP6wY9gaQ==

4.2 配置openstack节点与ceph的ssh连接

#在cephnode01上配置免密登录到全部openstack节点;之前已经生成了ssh秘钥文件;直接发送即可
for ip in 163 195 227 162 194 226 ;do sshpass -pZxzn@2020 ssh-copy-id -o StrictHostKeyChecking=no 10.15.253.$ip ;done

4.3 推送client.glance和client.cinder秘钥

#将创建client.glance用户生成的秘钥推送到运行glance-api服务的控制节点
ceph auth get-or-create client.glance | tee /etc/ceph/ceph.client.glance.keyring
[client.glance]
    key = AQBjyGFfA96jCRAAlnZBfLIGGFoqg1fF821U7Q==

ceph auth get-or-create client.glance | ssh root@controller01 tee /etc/ceph/ceph.client.glance.keyring
ceph auth get-or-create client.glance | ssh root@controller02 tee /etc/ceph/ceph.client.glance.keyring
ceph auth get-or-create client.glance | ssh root@controller03 tee /etc/ceph/ceph.client.glance.keyring

#同时修改秘钥文件的属主与用户组
ssh root@controller01 chown glance:glance /etc/ceph/ceph.client.glance.keyring
ssh root@controller02 chown glance:glance /etc/ceph/ceph.client.glance.keyring
ssh root@controller03 chown glance:glance /etc/ceph/ceph.client.glance.keyring

nova-compute与cinder-volume都部署在计算节点,不必重复操作,如果计算节点与存储节点分离需要分别推送;

#将创建client.cinder用户生成的秘钥推送到运行cinder-volume服务的节点
ceph auth get-or-create client.cinder | ssh root@compute01 tee /etc/ceph/ceph.client.cinder.keyring
ceph auth get-or-create client.cinder | ssh root@compute02 tee /etc/ceph/ceph.client.cinder.keyring
ceph auth get-or-create client.cinder | ssh root@compute03 tee /etc/ceph/ceph.client.cinder.keyring

#同时修改秘钥文件的属主与用户组
ssh root@compute01 chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
ssh root@compute02 chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
ssh root@compute03 chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring

5. 添加到Libvirt守护进程

5.1 在ceph管理节点上为nova节点创建keyring文件

  • nova-compute所在节点需要将client.cinder用户的秘钥文件存储到libvirt中;当基于ceph后端的cinder卷被attach到虚拟机实例时,libvirt需要用到该秘钥以访问ceph集群;
  • 在ceph管理节点向计算(存储)节点推送client.cinder秘钥文件,生成的文件是临时性的,将秘钥添加到libvirt后可删除
ceph auth get-key client.cinder | ssh root@compute01 tee /etc/ceph/client.cinder.key
ceph auth get-key client.cinder | ssh root@compute02 tee /etc/ceph/client.cinder.key
ceph auth get-key client.cinder | ssh root@compute03 tee /etc/ceph/client.cinder.key

#AQBuyGFfrTxYCRAAN8jpf5hheaJVBaP6wY9gaQ==

5.2 在计算节点将秘钥加入libvirt

全部计算节点配置;以compute01节点为例;

  • 生成随机 UUID,作为Libvirt秘钥的唯一标识,全部计算节点可共用此uuid;
  • 只需要生成一次,所有的cinder-volume、nova-compute都是用同一个UUID,请保持一致;
[root@compute01 ~]# uuidgen
5de9c673-2fef-4b59-adf6-0782e8deb05b 

#创建Libvirt秘钥文件,修改为生成的uuid
[root@compute01 ~]# cat >> /etc/ceph/secret.xml <<EOF
<secret ephemeral='no' private='no'>
  <uuid>5de9c673-2fef-4b59-adf6-0782e8deb05b</uuid>
  <usage type='ceph'>
    <name>client.cinder secret</name>
  </usage>
</secret>
EOF

scp -rp /etc/ceph/secret.xml compute02:/etc/ceph/
scp -rp /etc/ceph/secret.xml compute03:/etc/ceph/

#定义Libvirt秘钥;全部计算节点执行
[root@compute01 ~]# virsh secret-define --file /etc/ceph/secret.xml
Secret 5de9c673-2fef-4b59-adf6-0782e8deb05b created

#设置秘钥的值为client.cinder用户的key,Libvirt;凭此key就能以Cinder的用户访问Ceph集群
[root@compute01 ~]# virsh secret-set-value --secret 5de9c673-2fef-4b59-adf6-0782e8deb05b --base64 $(cat /etc/ceph/client.cinder.key)
Secret value set


#查看每台计算节点上的秘钥清单
[root@compute01 ~]# virsh secret-list
 UUID                                   Usage
-------------------------------------------------------------------
 5de9c673-2fef-4b59-adf6-0782e8deb05b   ceph client.cinder secret

[root@compute02 ~]# virsh secret-list
 UUID                                   Usage
-------------------------------------------------------------------
 5de9c673-2fef-4b59-adf6-0782e8deb05b   ceph client.cinder secret
 
[root@compute03 ~]# virsh secret-list
 UUID                                   Usage
-------------------------------------------------------------------
 5de9c673-2fef-4b59-adf6-0782e8deb05b   ceph client.cinder secret

三、配置glance集成ceph

Glance 为 OpenStack 提供镜像及其元数据注册服务,Glance 支持对接多种后端存储。与 Ceph 完成对接后,Glance 上传的 Image 会作为块设备储存在 Ceph 集群中。新版本的 Glance 也开始支持 enabled_backends 了,可以同时对接多个存储提供商。

写时复制技术(copy-on-write):内核只为新生成的子进程创建虚拟空间结构,它们复制于父进程的虚拟空间结构,但是不为这些段分配物理内存,它们共享父进程的物理空间,当父子进程中有更改相应的段的行为发生时,再为子进程相应的段分配物理空间。写时复制技术大大降低了进程对资源的浪费。

打开copy-on-write功能

1. 配置glance-api.conf

全部控制节点进行配置;以controller01节点为例;
只修改涉及glance集成ceph的相关配置

#备份glance-api的配置文件;以便于恢复
cp /etc/glance/glance-api.conf{,.bak2}

#删除glance-api如下的默认配置
[glance_store]
Local File  
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
#启用映像的写时复制
openstack-config --set /etc/glance/glance-api.conf DEFAULT show_image_direct_url True
#变更默认使用的本地文件存储为ceph rbd存储
openstack-config --set /etc/glance/glance-api.conf glance_store stores rbd
openstack-config --set /etc/glance/glance-api.conf glance_store default_store rbd
openstack-config --set /etc/glance/glance-api.conf glance_store rbd_store_pool images
openstack-config --set /etc/glance/glance-api.conf glance_store rbd_store_user glance
openstack-config --set /etc/glance/glance-api.conf glance_store rbd_store_ceph_conf /etc/ceph/ceph.conf
openstack-config --set /etc/glance/glance-api.conf glance_store rbd_store_chunk_size 8

变更配置文件,重启服务

systemctl restart openstack-glance-api.service
lsof -i:9292

2. 上传镜像测试

ceph官网介绍 QEMU和块设备

对接 Ceph 之后,通常会以 RAW 格式创建 Glance Image,而不再使用 QCOW2 格式,否则创建虚拟机时需要进行镜像复制,没有利用 Ceph RBD COW 的优秀特性。

#从QEMU中检索块设备映像信息
[root@controller01 tools]# qemu-img info cirros-0.5.1-x86_64-disk.img 
image: cirros-0.5.1-x86_64-disk.img
file format: qcow2
virtual size: 112M (117440512 bytes)
disk size: 16M
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
-----------------------------------

#将镜像从qcow2格式转换为raw格式
[root@controller01 tools]# qemu-img convert -f qcow2 -O raw cirros-0.5.1-x86_64-disk.img  cirros-0.5.1-x86_64-disk.raw

[root@controller01 tools]# ls
cirros-0.5.1-x86_64-disk.img  
cirros-0.5.1-x86_64-disk.raw

[root@controller01 tools]# qemu-img info cirros-0.5.1-x86_64-disk.raw 
image: cirros-0.5.1-x86_64-disk.raw
file format: raw
virtual size: 112M (117440512 bytes)
disk size: 17M
-----------------------------------

#上传镜像;查看glance和ceph联动情况
[root@controller01 tools]# openstack image create --container-format bare --disk-format raw --file cirros-0.5.1-x86_64-disk.raw --unprotected --public cirros_raw
-----------------------------------------------------------+
| Field            | Value                                                           
-----------------------------------------------------------+
| checksum         | 01e7d1515ee776be3228673441d449e6                                 
| container_format | bare                                                             
| created_at       | 2020-09-17T07:10:36Z                                             
| disk_format      | raw                                                             
| file             | /v2/images/b1b485a5-e3a5-4cbc-a746-52a82f4f6c07/file             
| id               | b1b485a5-e3a5-4cbc-a746-52a82f4f6c07                             
| min_disk         | 0                                                               
| min_ram          | 0                                                               
| name             | cirros_raw                                                       
| owner            | 88662bccaa414ab6995785aff65ad5f3                                 
| properties       | direct_url='rbd://dfc1628e-f739-11ea-ad44-0050568280f6/images/b1b485a5-e3a5-4cbc-a746-52a82f4f6c07/snap', os_hash_algo='sha512', os_hash_value='d663dc8d739adc772acee23be3931075ea82a14ba49748553ab05f0e191286a8fe937d00d9f685ac69fd817d867b50be965e82e46d8cf3e57df6f86a57fa3c36', os_hidden='False'
| protected        | False                                                           
| schema           | /v2/schemas/image                                               
| size             | 117440512                                                       
| status           | active                                                           
| tags             |                                                                 
| updated_at       | 2020-09-17T07:10:47Z                                             
| virtual_size     | None                                                             
| visibility       | public                                                           
-----------------------------------------------------------+

3. 查看镜像和glance池数据

  • 查看openstack镜像列表
[root@controller01 tools]# openstack image list
+--------------------------------------+--------------+--------+
| ID                                   | Name         | Status |
+--------------------------------------+--------------+--------+
| 5afd4dde-0734-4fe4-961e-e458c2540e54 | cirros-qcow2 | active |
| b1b485a5-e3a5-4cbc-a746-52a82f4f6c07 | cirros_raw   | active |
+--------------------------------------+--------------+--------+
  • 查看images池的数据
[root@controller01 tools]# rbd ls images
volume-fc7d6151-0f46-46d9-9a81-3dc041313754
  • 查看上传的镜像详细rbd信息
[root@controller01 tools]# rbd info images/b1b485a5-e3a5-4cbc-a746-52a82f4f6c07
rbd image 'b1b485a5-e3a5-4cbc-a746-52a82f4f6c07':
    size 112 MiB in 14 objects
    order 23 (8 MiB objects)
    snapshot_count: 1
    id: d8c387c31779
    block_name_prefix: rbd_data.d8c387c31779
    format: 2
    features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
    op_features: 
    flags: 
    create_timestamp: Thu Sep 17 15:10:36 2020
    access_timestamp: Thu Sep 17 15:10:36 2020
    modify_timestamp: Thu Sep 17 15:10:36 2020
  • 查看上传的镜像的快照列表
[root@controller01 tools]# rbd snap ls images/b1b485a5-e3a5-4cbc-a746-52a82f4f6c07
SNAPID  NAME  SIZE     PROTECTED  TIMESTAMP               
     4  snap  112 MiB  yes        Thu Sep 17 15:10:46 2020
  • glance中的数据存储到了ceph块设备中
[root@controller01 tools]# rados ls -p images
rbd_data.d8c387c31779.0000000000000004
rbd_data.d8c387c31779.000000000000000a
rbd_data.d8c387c31779.000000000000000c
rbd_data.d8c387c31779.0000000000000003
rbd_data.d8c387c31779.0000000000000005
rbd_data.d8c387c31779.0000000000000002
rbd_object_map.d8c387c31779
rbd_directory
rbd_data.d8c387c31779.0000000000000008
rbd_data.d8c387c31779.000000000000000b
rbd_info
rbd_data.d8c387c31779.0000000000000000
rbd_data.d8c387c31779.0000000000000001
rbd_data.d8c387c31779.0000000000000009
rbd_data.d8c387c31779.0000000000000006
rbd_id.b1b485a5-e3a5-4cbc-a746-52a82f4f6c07
rbd_data.d8c387c31779.0000000000000007
rbd_data.d8c387c31779.000000000000000d
rbd_header.d8c387c31779
rbd_object_map.d8c387c31779.0000000000000004
  • 在dashboard界面查看镜像列表
  • 在ceph监控界面查看上传的镜像

4. Ceph执行image镜像的步骤过程详解

4.1 创建raw格式的Image时;Ceph中执行了以下步骤:

  • 在 Pool images 中新建了一个 {glance_image_uuid} 块设备,块设备的 Object Size 为 8M,对应的 Objects 有 2 个,足以放下 cirros.raw 13M 的数据。
  • 对新建块设备执行快照。
  • 对该快照执行保护。
rbd -p ${GLANCE_POOL} create --size ${SIZE} ${IMAGE_ID}
rbd -p ${GLANCE_POOL} snap create ${IMAGE_ID}@snap
rbd -p ${GLANCE_POOL} snap protect ${IMAGE_ID}@snap

4.2 删除raw格式的Image时;Ceph中执行了以下步骤:

  • 先取消快照保护
  • 对快照执行删除
  • 对镜像执行删除
rbd -p ${GLANCE_POOL} snap unprotect ${IMAGE_ID}@snap
rbd -p ${GLANCE_POOL} snap rm ${IMAGE_ID}@snap
rbd -p ${GLANCE_POOL} rm ${IMAGE_ID} 

总结

将openstack集群中的glance镜像的数据存储到ceph中是一种非常好的解决方案,既能够保障镜像数据的安全性,同时glance和nova在同个存储池中,能够基于copy-on-write(写时复制)的方式快速创建虚拟机,能够在秒级为单位实现vm的创建。

四、使用Ceph作为Cinder的后端存储

1. 配置cinder.conf

全部计算节点进行配置;以compute01节点为例;只修改glance集成ceph的相关配置

#备份cinder.conf的配置文件;以便于恢复
cp /etc/cinder/cinder.conf{,.bak2}
#后端使用ceph存储已经在部署cinder服务时进行配置
openstack-config --set /etc/cinder/cinder.conf DEFAULT enabled_backends ceph
openstack-config --set /etc/cinder/cinder.conf DEFAULT glance_api_version 2

openstack-config --set /etc/cinder/cinder.conf ceph volume_driver cinder.volume.drivers.rbd.RBDDriver
openstack-config --set /etc/cinder/cinder.conf ceph rbd_pool volumes
openstack-config --set /etc/cinder/cinder.conf ceph rbd_ceph_conf /etc/ceph/ceph.conf
openstack-config --set /etc/cinder/cinder.conf ceph rbd_flatten_volume_from_snapshot false
openstack-config --set /etc/cinder/cinder.conf ceph rbd_max_clone_depth 5
openstack-config --set /etc/cinder/cinder.conf ceph rbd_store_chunk_size 4
openstack-config --set /etc/cinder/cinder.conf ceph rados_connect_timeout -1
openstack-config --set /etc/cinder/cinder.conf ceph rbd_user cinder
#注意替换cinder用户访问ceph集群使用的Secret UUID
openstack-config --set /etc/cinder/cinder.conf ceph rbd_secret_uuid 5de9c673-2fef-4b59-adf6-0782e8deb05b 
openstack-config --set /etc/cinder/cinder.conf ceph volume_backend_name ceph

2. 重启cinder-volume服务

全部计算节点重启cinder-volume服务;

systemctl restart openstack-cinder-volume.service
systemctl status openstack-cinder-volume.service

3. 验证服务状态

任意openstack控制节点上查看;

openstack volume service list

4. 创建空白卷Volume测试

4.1 设置卷类型

在任意控制节点为cinder的ceph后端存储创建对应的type,在配置多存储后端时可区分类型;

[root@controller01 ~]# cinder type-create ceph
+--------------------------------------+------+-------------+-----------+
| ID                                   | Name | Description | Is_Public |
+--------------------------------------+------+-------------+-----------+
| e2323803-2423-4a69-b9b0-95d3c53b8f31 | ceph | -           | True      |
+--------------------------------------+------+-------------+-----------+

#可通过 cinder type-list 或 openstack volume type list 查看

为ceph type设置扩展规格,键值volume_backend_name,value值ceph

[root@controller01 ~]# cinder type-key ceph set volume_backend_name=ceph
[root@controller01 ~]# cinder extra-specs-list

4.2 创建一个volume卷

任意控制节点上创建一个1GB的卷;最后的数字1代表容量为1G

[root@controller01 ~]# openstack volume create --type ceph --size 1 ceph-volume
+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| attachments         | []                                   |
| availability_zone   | nova                                 |
| bootable            | false                                |
| consistencygroup_id | None                                 |
| created_at          | 2020-09-17T08:38:09.000000           |
| description         | None                                 |
| encrypted           | False                                |
| id                  | fc7d6151-0f46-46d9-9a81-3dc041313754 |
| migration_status    | None                                 |
| multiattach         | False                                |
| name                | ceph-volume                          |
| properties          |                                      |
| replication_status  | None                                 |
| size                | 1                                    |
| snapshot_id         | None                                 |
| source_volid        | None                                 |
| status              | creating                             |
| type                | ceph                                 |
| updated_at          | None                                 |
| user_id             | 02c765a9c45c4daa9642cbc29d826514     |
+---------------------+--------------------------------------+

4.3 验证

查看创建好的卷

[root@controller01 ~]# openstack volume list
+--------------------------------------+-------------+-----------+------+-------------
| ID                                   | Name        | Status    | Size | Attached to 
+--------------------------------------+-------------+-----------+------+-------------
| fc7d6151-0f46-46d9-9a81-3dc041313754 | ceph-volume | available |    1 |             
+--------------------------------------+-------------+-----------+------+-------------

#检查ceph集群的volumes池
[root@controller01 ~]# rbd ls volumes
volume-fc7d6151-0f46-46d9-9a81-3dc041313754
[root@controller01 ~]# rbd info volumes/volume-fc7d6151-0f46-46d9-9a81-3dc041313754
[root@controller01 ~]# rados ls -p volumes

openstack创建一个空白 Volume,Ceph相当于执行了以下指令

rbd -p ${CINDER_POOL} create --new-format --size ${SIZE} volume-${VOLUME_ID}

5. 从镜像创建Volume测试

从镜像创建 Volume 的时候应用了 Ceph RBD COW Clone 功能,这是通过glance-api.conf [DEFAULT] show_image_direct_url = True 来开启。这个配置项的作用是持久化 Image 的 location,此时 Glance RBD Driver 才可以通过 Image location 执行 Clone 操作。并且还会根据指定的 Volume Size 来调整 RBD Image 的 Size。

5.1 删除僵尸镜像的方法

[root@controller01 ~]# openstack image list
+--------------------------------------+--------------+--------+
| ID                                   | Name         | Status |
+--------------------------------------+--------------+--------+
| 5afd4dde-0734-4fe4-961e-e458c2540e54 | cirros-qcow2 | active |
| b1b485a5-e3a5-4cbc-a746-52a82f4f6c07 | cirros_raw   | active |

一直存在的cirros_qcow2镜像为对接ceph之前的镜像,现在已无法使用,所以将之删除

#把镜像属性变为非可用状态
openstack image set --deactivate 5afd4dde-0734-4fe4-961e-e458c2540e54
#进入数据库
mysql -uroot -p
use glance;
select id, status, name from images where id='5afd4dde-0734-4fe4-961e-e458c2540e54';
update images set deleted=1 where id='5afd4dde-0734-4fe4-961e-e458c2540e54';

5.2 为cirros_raw镜像创建一个1G的卷

[root@controller01 tools]# openstack image list
+--------------------------------------+------------+--------+
| ID                                   | Name       | Status |
+--------------------------------------+------------+--------+
| b1b485a5-e3a5-4cbc-a746-52a82f4f6c07 | cirros_raw | active |
+--------------------------------------+------------+--------+

[root@controller01 tools]# openstack volume create --image b1b485a5-e3a5-4cbc-a746-52a82f4f6c07 --type ceph --size 1 cirros_raw_image
+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| attachments         | []                                   |
| availability_zone   | nova                                 |
| bootable            | false                                |
| consistencygroup_id | None                                 |
| created_at          | 2020-09-17T09:23:45.000000           |
| description         | None                                 |
| encrypted           | False                                |
| id                  | 94207b0b-7f05-48ec-bb5c-3df4c4c40f22 |
| migration_status    | None                                 |
| multiattach         | False                                |
| name                | cirros_raw_image                     |
| properties          |                                      |
| replication_status  | None                                 |
| size                | 1                                    |
| snapshot_id         | None                                 |
| source_volid        | None                                 |
| status              | creating                             |
| type                | ceph                                 |
| updated_at          | None                                 |
| user_id             | 02c765a9c45c4daa9642cbc29d826514     |
+---------------------+--------------------------------------+
[root@controller01 tools]# openstack volume list
+--------------------------------------+------------------+-----------+------+--------
| ID                                   | Name             | Status    | Size | Attached to |
+--------------------------------------+------------------+-----------+------+--------
| 94207b0b-7f05-48ec-bb5c-3df4c4c40f22 | cirros_raw_image | available |    1 |         
| fc7d6151-0f46-46d9-9a81-3dc041313754 | ceph-volume      | available |    1 |         
+--------------------------------------+------------------+-----------+------+--------

5.3 查看images池的Objects信息

[root@controller01 tools]# rbd ls volumes
volume-94207b0b-7f05-48ec-bb5c-3df4c4c40f22 #cirros_raw_image
volume-fc7d6151-0f46-46d9-9a81-3dc041313754 #ceph_volume

[root@controller01 tools]# rbd info volumes/volume-94207b0b-7f05-48ec-bb5c-3df4c4c40f22
rbd image 'volume-94207b0b-7f05-48ec-bb5c-3df4c4c40f22':
    size 1 GiB in 256 objects
    order 22 (4 MiB objects)
    snapshot_count: 0
    id: e994839b0ff3
    block_name_prefix: rbd_data.e994839b0ff3
    format: 2
    features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
    op_features: 
    flags: 
    create_timestamp: Thu Sep 17 17:23:46 2020
    access_timestamp: Thu Sep 17 17:23:46 2020
    modify_timestamp: Thu Sep 17 17:23:46 2020
    parent: images/b1b485a5-e3a5-4cbc-a746-52a82f4f6c07@snap
    overlap: 112 MiB
  
[root@controller01 tools]# rados ls -p volumes
rbd_object_map.e994839b0ff3
rbd_directory
rbd_object_map.de7e6b1e2de
rbd_children
rbd_header.e994839b0ff3
rbd_info
rbd_id.volume-94207b0b-7f05-48ec-bb5c-3df4c4c40f22
rbd_id.volume-fc7d6151-0f46-46d9-9a81-3dc041313754
rbd_header.de7e6b1e2de
rbd_trash

在openstack上从镜像创建一个Volume,Ceph相当于执行了以下指令

rbd clone ${GLANCE_POOL}/${IMAGE_ID}@snap ${CINDER_POOL}/volume-${VOLUME_ID}

if [[ -n "${SIZE}" ]]; then
    rbd resize --size ${SIZE} ${CINDER_POOL}/volume-${VOLUME_ID}
fi

6. 为镜像创建的卷生成快照测试

任意控制节点操作;

6.1 创建cirros_raw_image卷的快照

[root@controller01 tools]# openstack volume snapshot create --volume cirros_raw_image cirros_raw_image_snap01
+-------------+--------------------------------------+
| Field       | Value                                |
+-------------+--------------------------------------+
| created_at  | 2020-09-17T09:31:50.420158           |
| description | None                                 |
| id          | 40dc1b6b-8c85-48a9-aca7-d4e9857c9d7b |
| name        | cirros_raw_image_snap01              |
| properties  |                                      |
| size        | 1                                    |
| status      | creating                             |
| updated_at  | None                                 |
| volume_id   | 94207b0b-7f05-48ec-bb5c-3df4c4c40f22 |
+-------------+--------------------------------------+

6.2 查看快照列表

[root@controller01 tools]# openstack volume snapshot list
+--------------------------------------+-------------------------+-------------+------
| ID                                   | Name                    | Description | Status    | Size |
+--------------------------------------+-------------------------+-------------+------
| 40dc1b6b-8c85-48a9-aca7-d4e9857c9d7b | cirros_raw_image_snap01 | None        | available |    1 |
+--------------------------------------+-------------------------+-------------+------

6.3 在ceph上查镜像看创建的快照

rbd snap ls volumes/volume-94207b0b-7f05-48ec-bb5c-3df4c4c40f22

查看快照详细信息

[root@cephnode01 ~]# rbd info volumes/volume-94207b0b-7f05-48ec-bb5c-3df4c4c40f22
rbd image 'volume-94207b0b-7f05-48ec-bb5c-3df4c4c40f22':
    size 1 GiB in 256 objects
    order 22 (4 MiB objects)
    snapshot_count: 1
    id: e994839b0ff3
    block_name_prefix: rbd_data.e994839b0ff3
    format: 2
    features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
    op_features: 
    flags: 
    create_timestamp: Thu Sep 17 17:23:46 2020
    access_timestamp: Thu Sep 17 17:23:46 2020
    modify_timestamp: Thu Sep 17 17:23:46 2020
    parent: images/b1b485a5-e3a5-4cbc-a746-52a82f4f6c07@snap
    overlap: 112 MiB

在openstack上对镜像的卷创建快照,Ceph相当于执行了以下指令

rbd -p ${CINDER_POOL} snap create volume-${VOLUME_ID}@snapshot-${SNAPSHOT_ID}
rbd -p ${CINDER_POOL} snap protect volume-${VOLUME_ID}@snapshot-${SNAPSHOT_ID} 

7. 创建 Volume卷备份测试

如果说快照时一个时间机器,那么备份就是一个异地的时间机器,它具有容灾的含义。所以一般来说 Ceph Pool backup 应该与 Pool images、volumes 以及 vms 处于不同的灾备隔离域。

https://www.cnblogs.com/luohaixian/p/9344803.html

https://docs.openstack.org/zh_CN/user-guide/backup-db-incremental.html

一般的,备份具有以下类型:

  • 全量备份
  • 增量备份:
  • 差异备份

五、使用Ceph作为Nova的虚拟机存储

Nova是OpenStack中的计算服务。 Nova存储与默认的运行虚拟机相关联的虚拟磁盘镜像,在/var/lib/nova/instances/%UUID目录下。Ceph是可以直接与Nova集成的存储后端之一。

在虚拟磁盘映像的计算节点上使用本地存储有一些缺点:

  • 镜像存储在根文件系统下。大镜像可能导致文件系统被填满,从而导致计算节点崩溃。
  • 计算节点上的磁盘崩溃可能导致虚拟磁盘丢失,因此无法进行虚拟机恢复。

Nova 为 OpenStack 提供计算服务,对接 Ceph 主要是希望将实例的系统磁盘文件储存到 Ceph 集群中。与其说是对接 Nova,更准确来说是对接QEMU-KVM/libvirt,因为 librbd 早已原生集成到其中。

如果需要从ceph rbd中启动虚拟机,必须将ceph配置为nova的临时后端;
推荐在计算节点的配置文件中启用rbd cache功能;
为了便于故障排查,配置admin socket参数,这样每个使用ceph rbd的虚拟机都有1个socket将有利于虚拟机性能分析与故障解决;
相关配置只涉及全部计算节点ceph.conf文件的[client]与[client.cinder]字段,以compute163节点为例

1. 配置ceph.conf

  • 如果需要从ceph rbd中启动虚拟机,必须将ceph配置为nova的临时后端;
  • 推荐在计算节点的配置文件中启用rbd cache功能;
  • 为了便于故障排查,配置admin socket参数,这样每个使用ceph rbd的虚拟机都有1个socket将有利于虚拟机性能分析与故障解决;

全部计算节点配置ceph.conf文件相关的[client][client.cinder]字段,以compute01节点为例;

#创建ceph.conf文件中指定的socker与log相关的目录,并更改属主
mkdir -p /var/run/ceph/guests/ /var/log/qemu/
chown qemu:libvirt /var/run/ceph/guests/ /var/log/qemu/

#编辑配置文件
[root@compute01 ~]# vim /etc/ceph/ceph.conf
[client]
rbd cache = true
rbd cache writethrough until flush = true
admin socket = /var/run/ceph/guests/$cluster-$type.$id.$pid.$cctid.asok
log file = /var/log/qemu/qemu-guest-$pid.log
rbd concurrent management ops = 20

[client.cinder]
keyring = /etc/ceph/ceph.client.cinder.keyring

2. 配置nova.conf

在全部计算节点配置nova后端使用ceph集群的vms池,以compute01节点为例;

#备份glance-api的配置文件;以便于恢复
cp /etc/nova/nova.conf{,.bak2}
#有时候碰到硬盘太大,比如需要创建80G的虚拟机,则会创建失败,需要修改nova.conf里面的vif超时参数
openstack-config --set /etc/nova/nova.conf DEFAULT vif_plugging_timeout 0
openstack-config --set /etc/nova/nova.conf DEFAULT vif_plugging_is_fatal False

#支持虚拟机硬件加速;前面已添加
openstack-config --set /etc/nova/nova.conf libvirt virt_type qemu
openstack-config --set /etc/nova/nova.conf libvirt images_type rbd
openstack-config --set /etc/nova/nova.conf libvirt images_rbd_pool vms
openstack-config --set /etc/nova/nova.conf libvirt images_rbd_ceph_conf /etc/ceph/ceph.conf
openstack-config --set /etc/nova/nova.conf libvirt rbd_user cinder
openstack-config --set /etc/nova/nova.conf libvirt rbd_secret_uuid 5de9c673-2fef-4b59-adf6-0782e8deb05b

openstack-config --set /etc/nova/nova.conf libvirt disk_cachemodes \"network=writeback\"
openstack-config --set /etc/nova/nova.conf libvirt live_migration_flag \"VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST,VIR_MIGRATE_TUNNELLED\"

#禁用文件注入
openstack-config --set /etc/nova/nova.conf libvirt inject_password false
openstack-config --set /etc/nova/nova.conf libvirt inject_key false
openstack-config --set /etc/nova/nova.conf libvirt inject_partition -2 
#虚拟机临时root磁盘discard功能;unmap参数在scsi接口类型磁盘释放后可立即释放空间
openstack-config --set /etc/nova/nova.conf libvirt hw_disk_discard unmap

3. 重启计算服务

在全部计算节点操作;

systemctl restart libvirtd.service openstack-nova-compute.service
systemctl status libvirtd.service openstack-nova-compute.service

4. 配置live-migration热迁移

4.1 修改/etc/libvirt/libvirtd.conf

在全部计算节点操作,以compute01节点为例;
以下给出libvirtd.conf文件的修改处所在的行num

#compute01
[root@compute01 ~]# egrep -vn "^$|^#" /etc/libvirt/libvirtd.conf 
20:listen_tls = 0
34:listen_tcp = 1
52:tcp_port = "16509"
#取消注释,并修改监听端口
65:listen_addr = "10.15.253.162"
#取消注释,同时取消认证
167:auth_tcp = "none"

#compute02
[root@compute02 ~]# egrep -vn "^$|^#" /etc/libvirt/libvirtd.conf 
20:listen_tls = 0
34:listen_tcp = 1
52:tcp_port = "16509"
65:listen_addr = "10.15.253.194"
167:auth_tcp = "none"

#compute03
[root@compute03 ~]# egrep -vn "^$|^#" /etc/libvirt/libvirtd.conf 
20:listen_tls = 0
34:listen_tcp = 1
52:tcp_port = "16509"
65:listen_addr = "10.15.253.226"
167:auth_tcp = "none"

4.2 修改/etc/sysconfig/libvirtd

在全部计算节点操作,以compute01节点为例;设置libvirtd 服务监听

[root@compute01 ~]# egrep -vn "^$|^#" /etc/sysconfig/libvirtd
12:LIBVIRTD_ARGS="--listen"

[root@compute02 ~]# egrep -vn "^$|^#" /etc/sysconfig/libvirtd
12:LIBVIRTD_ARGS="--listen"

[root@compute03 ~]# egrep -vn "^$|^#" /etc/sysconfig/libvirtd
12:LIBVIRTD_ARGS="--listen"

4.3 计算节点设置免密访问

所有计算节点都必须相互设置免密,迁移必备!以compute01为例;

[root@compute01 ~]# yum install sshpass -y
[root@compute01 ~]# usermod  -s /bin/bash nova
[root@compute01 ~]# passwd nova #密码设置为Zxzn@2020
[root@compute01 ~]# su - nova
[nova@compute01 ~]# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
[nova@compute01 ~]# for ip in 162 194 226 ;do sshpass -pZxzn@2020 ssh-copy-id -o StrictHostKeyChecking=no nova@10.15.253.$ip ;done

4.4 设置iptables

测试环境已经关闭了iptables,因此暂时不需要设置;正式环境需要配置

  • live-migration时,源计算节点主动连接目的计算节点tcp 16509端口,可以使用virsh -c qemu+tcp://{node_ip or node_name}/system连接目的计算节点测试;
  • 迁移前后,在源目地计算节点上的被迁移instance使用tcp 49152~49161端口做临时通信;
  • 因虚拟机已经启用iptables相关规则,此时切忌随意重启iptables服务,尽量使用插入的方式添加规则;
  • 同时以修改配置文件的方式写入相关规则,切忌使用iptables saved命令;

在全部计算节点操作;

iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 16509 -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 49152:49161 -j ACCEPT 

4.5 需重启服务;按以下步骤

全部计算节点操作;

systemctl mask libvirtd.socket libvirtd-ro.socket libvirtd-admin.socket libvirtd-tls.socket libvirtd-tcp.socket
service libvirtd restart
systemctl restart openstack-nova-compute.service
[root@compute01 ~]# netstat -lantp|grep libvirtd
tcp        0      0 10.15.253.162:16509     0.0.0.0:*    LISTEN   375421/libvirtd

5. 验证是否集成

如果使用ceph提供的volume做启动盘,即虚拟机运行镜像文件存放在共享存储上,此时可以方便地进行live-migration热迁移

5.1 创建基于ceph存储的bootable可启动存储卷

  • 当nova从rbd启动instance实例时,镜像格式必须是raw格式,否则虚拟机在启动时glance-api与cinder均会报错;
  • 上传镜像时已经进行了格式转换,将*.img文件转换为*.raw文件
#将镜像从qcow2格式转换为raw格式
[root@controller01 tools]# qemu-img convert -f qcow2 -O raw cirros-0.5.1-x86_64-disk.img  cirros-0.5.1-x86_64-disk.raw

[root@controller01 tools]# ll
total 33032
-rw-r--r--. 1 root root  16338944 Apr 14 12:35 cirros-0.5.1-x86_64-disk.img
-rw-r--r--  1 root root 117440512 Sep 16 17:58 cirros-0.5.1-x86_64-disk.raw

[root@controller01 tools]# openstack image list
+--------------------------------------+------------+--------+
| ID                                   | Name       | Status |
+--------------------------------------+------------+--------+
| b1b485a5-e3a5-4cbc-a746-52a82f4f6c07 | cirros_raw | active |
+--------------------------------------+------------+--------+

5.2 创建bootable卷

[root@controller01 ~]# openstack volume create --image b1b485a5-e3a5-4cbc-a746-52a82f4f6c07 --type ceph --size 1 ceph-boot

[root@controller01 ~]# cinder list
+--------------------------------------+-----------+------------------+------+-------------+----------+-------------+
| ID                                   | Status    | Name             | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+------------------+------+-------------+----------+-------------+
| c58b6729-9e0d-422a-aef6-39f0caea3750 | available | ceph-boot        | 1    | ceph        | true     |             |
| 94207b0b-7f05-48ec-bb5c-3df4c4c40f22 | available | cirros_raw_image | 1    | ceph        | true     |             |
| fc7d6151-0f46-46d9-9a81-3dc041313754 | available | ceph-volume      | 1    | ceph        | false    |             |
+--------------------------------------+-----------+------------------+------+-------------+----------+-------------+

5.3 创建主机规格类型

#Flavor:类型模板,虚机硬件模板被称为类型模板,包括RAM和硬盘大小,CPU核数等
#创建一台1核cpu 512M内存和1G硬盘的类型模板与CirrOS映像一起使用进行测试
openstack flavor create --id 2 --vcpus 1 --ram 512 --disk 1  m3.nano

[root@controller01 ~]# openstack flavor list
+----+---------+-----+------+-----------+-------+-----------+
| ID | Name    | RAM | Disk | Ephemeral | VCPUs | Is Public |
+----+---------+-----+------+-----------+-------+-----------+
| 0  | m1.nano | 128 |    1 |         0 |     1 | True      |
| 1  | m2.nano | 256 |    1 |         0 |     1 | True      |
| 2  | m3.nano | 512 |    1 |         0 |     1 | True      |
+----+---------+-----+------+-----------+-------+-----------+

5.4 创建安全规则

默认情况下,default安全组适用于所有实例,并包括拒绝对实例进行远程访问的防火墙规则。对于CirrOS之类的Linux映像,建议至少允许ICMP和ssh

#查看安全组
[root@controller01 ~]# openstack security group list
a1848678-ba40-45d0-ad1e-0fe543690417
#许可ICMP协议(ping命令)
openstack security group rule create --proto icmp a1848678-ba40-45d0-ad1e-0fe543690417
#允许SSH访问(22端口)
openstack security group rule create --proto tcp --dst-port 22 a1848678-ba40-45d0-ad1e-0fe543690417
#查看安全组规则
openstack security group rule list a1848678-ba40-45d0-ad1e-0fe543690417

5.5 创建秘钥对(可选)

生产中登陆最好不要用常规的密码验证登陆,启动实例前要 将公共的秘钥添加
秘钥在文档开始时的配置基础环境中已经生成,所以可以直接添加

openstack keypair create --public-key ~/.ssh/id_rsa.pub controller01_key
openstack keypair list

5.6 创建虚拟网络

创建虚拟网络的两种方式

建立公共提供商网络

source ~/admin-openrc
openstack network create --share --external --provider-physical-network provider --provider-network-type flat provider

创建子网;子网根据实际的物理网络更改

openstack subnet create --network provider --allocation-pool start=10.15.253.89,end=10.15.253.100 --dns-nameserver 114.114.114.114 --gateway 10.0.0.1 --subnet-range 10.15.253.0/12 provider_subnet

5.7 实例创建

要启动实例,必须至少指定实例类型,映像名称,网络,安全组,密钥和实例名称
部署的网络环境可以在提供商网络和自助服务网络上启动实例

#可用类型
openstack flavor list
#可用卷镜像
[root@controller01 ~]# cinder list
| 1d6431c1-e6b9-4013-898b-503c8ee136af | available | ceph-boot
#可用安全组
[root@controller01 ~]# openstack security group list
| a1848678-ba40-45d0-ad1e-0fe543690417 | default |
#可用网络
[root@controller01 ~]# openstack network list
| 872a1b15-3fd0-4822-8671-e8847cc4f159 | provider |

创建实例,也可以通过web界面创建

任意控制节点操作;启动后,虚拟机运行在volumes池;

#--boot-volume: 指定具有bootable属性的卷
#--nic net-id: 指网络id,不是subnet-id
#--security-group: 指定安全组,在admin管理员用户下请使用管理员默认安全组

nova boot --flavor m3.nano --boot-volume c58b6729-9e0d-422a-aef6-39f0caea3750 --nic net-id=872a1b15-3fd0-4822-8671-e8847cc4f159 --security-group a1848678-ba40-45d0-ad1e-0fe543690417 ceph-cirros01

#查看实例详细信息
openstack server show ceph-cirros01

重启实例的方法

#如果重启报错则使用hard重启
nova reboot --hard ceph-cirros01

nova reboot 是软重启虚拟机
nova reboot --hard 是硬重启虚拟机
nova reset-state 是重置虚拟机状态

删除实例的方法

openstack server list
进入数据库
use nova;
update instances set deleted=1 where display_name='实例名称';

5.8 查看基于ceph创建的卷是否已经连接到实例

5.9 对rbd启动的虚拟机进行live-migration热迁移

使用nova show ceph-cirros01查看实例详细信息得知从rbd启动的实例在迁移前位于compute02节点;

或使nova hypervisor-servers compute02进行验证;

#将实例迁移到compute01节点上
nova live-migration ceph-cirros01 compute01

#迁移过程中可查看状态
nova list 

#迁移完成后,查看instacn所在节点
nova hypervisor-servers compute01