Cinder服务的基本使用

1. Cinder概述

OpenStack早期版本是使用nova-volume为云平台提供持久性块存储服务。从Folsom版本后,就把作为Nova组成部分的nova-volume分离出来,形成了独立的Cinder组件。Cinder本身并不直接提供块存储设备实际的管理和服务,而是在虚拟机和具体的存储设备之间引入一个抽象的“逻辑存储卷”。Cinder与Neutron类似也是通过Plugins-Agent的方式添加了不同厂家的DRIVE来整合多种厂家的后端存储设备,并通过提供统一API接口的方式为云平台提供持久性块设备存储服务,类似于Amazon的EBS(Elastic Block Storage)。Cinder服务的实现在OpenStack众多服务中,只依赖Keystone服务提供认证。可能有些人觉得Cinder提供的Volume作为云主机的云磁盘,因此Cinder与Nova也有依赖关系。其实,这是一种错误的理解,Cinder-Volume创建的“逻辑存储卷”不仅可以用于云主机的云磁盘,也可以用于其他场景,其创建卷的过程与Nova创建的云主机的状态并没有直接关联。或者换个角度来看,Nova创建的云主机也可以不用挂载Cinder创建的Volume而正常运行。


2. Cinder架构

在OpenStack中,块存储服务Cinder为Nova项目虚拟机实例提供了数据持久性的存储服务。此外,块存储还提供了Volumes管理的基础架构,同时还负责Volumes的快照和类型管理。从功能层面来看,Cinder以插件架构的形式为各种存储后端提供了统一API访问接口的抽象层实现,使得存储客户端可以通过统一的API访问不同的存储资源,而不用担心底层各式各样的存储驱动。Cinder提供的块存储通常以存储卷的形式挂载到虚拟机后才能使用,目前一个Volume同时只能挂载到一个虚拟机,但是不同的时刻可以挂载到不同的虚拟机,因此Cinder块存储与AWS的EBS不同,不能像EBS一样提供共享存储解决方案。除了挂载到虚拟机作为块存储使用外,用户还可以将系统镜像写入块存储并从有加载镜像的Volume启动系统(SAN BOOT)。

Cinder的逻辑架构如图3-1所示,除了cinder-client外,其余均是Cinder服务的核心组件,共有4个:cinder-api、cinder-scheduler、cinder-volume和cinder-backup。而cinder-client其实就是封装了Cinder提供REST接口的CLI工具。

图3-1 cinder逻辑架构图

(1)cinder-api

对外提供REST API,对操作需求进行解析,对API进行路由并寻找相应的处理方法,包含卷的CRUD,快照的CRUD、备份、Volume Type的管理、卷的挂载/卸载等操作。Cinder API本质上其实是一个WSGI App,启动Cinder API服务相当于启动一个名为osapi_volume的WSGI服务去监听Client的HTTP请求。OpenStack定义了两种类型的Cinder资源,包括核心资源(Core Resoure)和扩展资源(Extension Resoure)。而核心资源及其API路由器分为V1及V2两个版本,分别放在V1和V2两个目录下,其中API路由器(目录中的router.py)负责把HTTP请求分发到其管理的核心资源中去;V1的核心资源则包括卷(Volume)、卷类型(Volume Type)、快照(Snapshot)的操作管理,比如创建和删除一个卷,或为某个卷做一个快照等;V2的核心资源增加了Qos、limit及备份的操作管理(H版本以后)。

(2)Cinder-scheduler

负责收集后端存储Backends上报的容量、能力信息。根据指定的算法完成卷到cinder-volume的映射。在Folsom版本中,cinder-scheduler服务只是实现了简单调度(Simple Scheduler)算法和随机调度(Chancer Scheduler)算法。简单调度算法就是获取活动卷的服务节点,按剩余容量从小到大排列,选择剩余容量最多的Host节点;随机调度算法就是在满足条件的节点中随机挑选出一个Host节点。在G版本后有了类似nova-scheduler的基于过滤和权重的新调度策略FilterScheduler。

(3)Cinder-volume

多节点部署,使用不同的配置文件、接入不同的backend设备,由各存储厂商插入driver代码与设备交互完成设备容量和能力信息收集、卷操作。每个存储节点都会运行一个cinder-volume服务,若干个这样的存储节点联合起来可以构成一个存储资源池。

(4)Cinder-backup

实现卷的数据备份到其他介质。目前支持的有以Ceph、Swift和IBM TSM(Tivoli Storage Manager)为后端存储的备份存储系统,其中默认的是采用Swift备份存储系统。与Cinder-volume类似,Cinder-backup也通过Driver插件架构的形式与不同的存储备份后端交互。

(5)Cinder-db

提供存储卷、快照、备份、service等数据,支持Mysql、PG、MSSQL等SQL数据库。


3. 块存储服务

(1)查看服务状态

使用“openstack volume service list”命令查询块存储服务状态,命令代码如下所示:

[root@controller ~]# openstack volume service list
+------------------+-------------+------+---------+-------+----------------------------+
| Binary           | Host        | Zone | Status  | State | Updated At                 |
+------------------+-------------+------+---------+-------+----------------------------+
| cinder-scheduler | controller  | nova | enabled | up    | 2024-06-24T06:31:16.000000 |
| cinder-volume    | compute@lvm | nova | enabled | up    | 2024-06-24T06:31:09.000000 |
+------------------+-------------+------+---------+-------+----------------------------+

(2)创建块存储

通过使用命令“openstack volume create”创建块存储,命令格式如下:

[root@controller ~]# openstack help volume create 
usage: openstack volume create [-h] [-f {json,shell,table,value,yaml}]
                               [-c COLUMN] [--max-width ]
                               [--fit-width] [--print-empty] [--noindent]
                               [--prefix PREFIX] [--size ]
                               [--type ]
                               [--image  | --snapshot  | --source  | --source-replicated ]
                               [--description ] [--user ]
                               [--project ]
                               [--availability-zone ]
                               [--consistency-group consistency-group>]
                               [--property ] [--hint ]
                               [--multi-attach] [--bootable | --non-bootable]
                               [--read-only | --read-write]
                               

通过命令创建块存储,大小为2G,名称为“volume”。命令如下所示:

[root@controller ~]# openstack volume create --size 2 volume
+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| attachments         | []                                   |
| availability_zone   | nova                                 |
| bootable            | false                                |
| consistencygroup_id | None                                 |
| created_at          | 2024-06-25T07:06:37.000000           |
| description         | None                                 |
| encrypted           | False                                |
| id                  | 17f43dd4-8724-49ce-9149-3b3fafc71201 |
| migration_status    | None                                 |
| multiattach         | False                                |
| name                | volume                               |
| properties          |                                      |
| replication_status  | None                                 |
| size                | 2                                    |
| snapshot_id         | None                                 |
| source_volid        | None                                 |
| status              | creating                             |
| type                | __DEFAULT__                          |
| updated_at          | None                                 |
| user_id             | 6df4273959974bd98b12b75b931373eb     |
+---------------------+--------------------------------------+

(3)查看块存储

使用“openstack volume list”命令查看块存储列表信息。命令如下:

[root@controller ~]# openstack volume list
+--------------------------------------+--------+-----------+------+-------------+
| ID                                   | Name   | Status    | Size | Attached to |
+--------------------------------------+--------+-----------+------+-------------+
| 17f43dd4-8724-49ce-9149-3b3fafc71201 | volume | available |    2 |             |
+--------------------------------------+--------+-----------+------+-------------+

 通过openstack命令查看某一块存储的详细信息。命令如下:

[root@controller ~]# openstack volume show volume
+--------------------------------+--------------------------------------+
| Field                          | Value                                |
+--------------------------------+--------------------------------------+
| attachments                    | []                                   |
| availability_zone              | nova                                 |
| bootable                       | false                                |
| consistencygroup_id            | None                                 |
| created_at                     | 2024-06-25T07:06:37.000000           |
| description                    | None                                 |
| encrypted                      | False                                |
| id                             | 17f43dd4-8724-49ce-9149-3b3fafc71201 |
| migration_status               | None                                 |
| multiattach                    | False                                |
| name                           | volume                               |
| os-vol-host-attr:host          | compute@lvm#LVM                      |
| os-vol-mig-status-attr:migstat | None                                 |
| os-vol-mig-status-attr:name_id | None                                 |
| os-vol-tenant-attr:tenant_id   | b0895efd70784108b94740a6bdfee44c     |
| properties                     |                                      |
| replication_status             | None                                 |
| size                           | 2                                    |
| snapshot_id                    | None                                 |
| source_volid                   | None                                 |
| status                         | available                            |
| type                           | __DEFAULT__                          |
| updated_at                     | 2024-06-25T07:06:40.000000           |
| user_id                        | 6df4273959974bd98b12b75b931373eb     |
+--------------------------------+--------------------------------------+

(4)挂载云硬盘

块存储设备创建成功后,可以在OpenStack上将该设备挂载至云主机上,可以作为一块云硬盘来进行使用。给云主机添加一块磁盘。

将块存储挂载至云主机的命令为“openstack server add volume”,其命令格式为:

[root@controller ~]# openstack help server add volume
usage: openstack server add volume [-h] [--device ]  

Add volume to server

positional arguments:
             Server (name or ID)
             Volume to add (name or ID)

使用命令将创建的“volume”块存储添加至云主机“test”上。命令如下: 

[root@controller ~]# openstack server add volume test volume

使用命令查看块存储的列表信息,命令代码如下所示:

[root@controller ~]# openstack volume list
+--------------------------------------+--------+--------+------+-------------------------------+
| ID                                   | Name   | Status | Size | Attached to                   |
+--------------------------------------+--------+--------+------+-------------------------------+
| 17f43dd4-8724-49ce-9149-3b3fafc71201 | volume | in-use |    2 | Attached to test on /dev/vdb  |
+--------------------------------------+--------+--------+------+-------------------------------+
4. 扩展卷

(1)扩展卷大小

创建完卷后可能因为需求的变更,需要对已有的卷进行扩容操作,这时需要用到“openstack volume set”命令修改卷的信息。命令格式如下:

[root@controller ~]# openstack  help  volume set
usage: openstack volume set [-h] [--name ] [--size ]
                            [--description ] [--no-property]
                            [--property ]
                            [--image-property ] [--state ]
                            [--type ]
                            [--retype-policy ]
                            [--bootable | --non-bootable]
                            [--read-only | --read-write]

 通过命令将 “volume” 卷大小从2G扩容至3G,使用–size参数可修改已创建好的卷大小。命令操作如下所示:

[root@controller ~]# openstack volume list
+--------------------------------------+--------+--------+------+-------------------------------+
| ID                                   | Name   | Status | Size | Attached to                   |
+--------------------------------------+--------+--------+------+-------------------------------+
| 17f43dd4-8724-49ce-9149-3b3fafc71201 | volume | in-use |    2 | Attached to test on /dev/vdb  |
+--------------------------------------+--------+--------+------+-------------------------------+
[root@controller ~]# openstack volume set --size 3 volume
[root@controller ~]# openstack volume list
+--------------------------------------+--------+-----------+------+-------------+
| ID                                   | Name   | Status    | Size | Attached to |
+--------------------------------------+--------+-----------+------+-------------+
| 17f43dd4-8724-49ce-9149-3b3fafc71201 | volume | available |    3 |             |
+--------------------------------------+--------+-----------+------+-------------+

(2)验证卷大小

将扩容后的卷“volume”挂载至云主机“test”上,操作命令如下所示:

[root@controller ~]# openstack server add volume test volume
[root@controller ~]# openstack volume list
+--------------------------------------+--------+--------+------+-------------------------------+
| ID                                   | Name   | Status | Size | Attached to                   |
+--------------------------------------+--------+--------+------+-------------------------------+
| 17f43dd4-8724-49ce-9149-3b3fafc71201 | volume | in-use |    3 | Attached to test on /dev/vdb  |
+--------------------------------------+--------+--------+------+-------------------------------+

可以看到卷“volume”挂载至云主机“test”上盘符的名称为/dev/vdb,使用dashboard的控制台界面,输入命令“lsblk”查看云硬盘大小是否为3G。命令操作如下所示:

可以看到显示盘符“vdb”大小为3G。此时云硬盘已经扩展完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新宽网络

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值