OpenStack里那么多服务,我平时被人问得最多的除了Nova就是Cinder。Cinder这个名字你只要搞过OpenStack就绕不开,它负责的是整个平台的块存储服务,云硬盘、虚拟机的数据盘、快照这些全都归它管。很多人搭好了环境却不知道怎么把存储用起来,或者一遇到卷创建失败、挂载不上就抓瞎。这篇就把Cinder从概念到实操捋一遍,卷类型怎么建、后端怎么配、命令行怎么敲、出问题怎么排查,全部按实际干活的方式讲清楚,适合刚搭完OpenStack准备上业务的人,也适合已经踩了不少坑想找排查思路的老手。
1. 先搞懂Cinder在OpenStack里的定位与核心思想
Cinder全称是OpenStack Block Storage,提供的是块级别的存储服务。它解决的问题说起来很简单:虚拟机跑在计算节点上,默认的本地磁盘是临时的,一旦虚拟机删除或者迁移,数据就跟着没了。为了让数据能够持久化、能够独立于虚拟机存在,就需要一套统一的存储服务,Cinder就是干这个的。
1.1 为什么计算和存储要拆成两个服务
Nova管计算实例,Cinder管存储卷,两者分开的原因不是架构师闲得没事,而是现实需求逼出来的。计算资源通常是弹性伸缩的,扩容缩容很频繁,而数据存储则要求稳定持久,两者生命周期完全不一样。如果存储跟着计算走,那虚拟机一删数据就没了;如果计算跟着存储走,那调度就会变得极其僵硬。拆开之后,卷可以独立创建、独立挂载到任意一台虚拟机、独立备份和迁移,计算节点宕机了数据也在,虚拟机删了卷还在,这才是云平台该有的形态。
另外拆分之后还有一个好处:Cinder通过驱动机制支持几十种后端存储,LVM、NFS、Ceph、各种商业存储阵列都能接进来。这样底层存储的差异被Cinder屏蔽掉,上层用户只需要看到统一的卷接口就行。实际用起来,你会感受到这种设计的价值——你创建卷的时候根本不用关心这块盘背后是分布式存储还是一台NAS,只要指定卷类型就够了。
1.2 四个核心组件各自都在忙什么
Cinder的核心组件有四个,我分开讲一下它们各自的分工。
cinder-api是整个Cinder的入口,所有API请求都先进这里,不管是命令行、Horizon界面还是其他服务调用,都得通过它来路由。它做的事情相当于前台接待,收请求、做初步校验,然后交给后台处理。
cinder-scheduler是调度器,负责决定每个卷应该创建在哪个后端存储上。它会根据卷类型、容量需求、后端存储的空闲情况等条件来筛选。这层调度逻辑跟Nova的scheduler思路很像,核心目标就是把卷放到最合适的存储池里。
cinder-volume是真正干活的组件,它直接和后端存储打交道,创建卷、删除卷、挂载连接、扩容快照,这些操作最终都是它来执行。它从调度器收到任务后,通过对应的驱动调用底层存储接口完成实际动作。
cinder-backup负责把卷备份到对象存储(比如Swift或者Ceph的RGW),是数据安全的最后一道保险。
实际部署中,cinder-api和cinder-scheduler通常部署在控制节点,cinder-volume可以部署在控制节点也可以独立部署在存储节点,取决于你的后端存储方案。如果后端是网络存储(比如Ceph或者商业存储),cinder-volume放控制节点问题不大;如果用本地LVM做后端,那cinder-volume就必须跑在真正持有物理卷的那台机器上,这是很多人配置LVM后端时容易踩的坑。
1.3 你天天打交道的卷、卷类型和快照
卷这个概念不复杂,可以理解成一块云上的硬盘,独立于虚拟机存在,格式上是块设备,可以挂给虚拟机当数据盘或者启动盘。
卷类型(Volume Type)就比较重要了,它是卷的配置模板,决定了卷最终落到哪个后端存储、有没有启用压缩、是不是SSD等属性。创建卷类型只是第一步,关键是要把卷类型和后端存储关联起来,再通过extra-specs来设置具体参数,这个在第二章细讲。
快照则是卷在某个时间点的只读副本,基于快照可以恢复数据,也可以快速创建新卷。LVM后端利用的是LVM的thin snapshot机制,Ceph后端利用的是RBD的快照机制,本质都是在底层存储层面做引用计数,所以快照创建通常是秒级的。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 上手前的准备工作:认证、卷类型与后端配置
不管你是用命令行还是Horizon界面,动手创建卷之前,环境上有些准备工作必须做好。多数人失败都是因为跳过了这一节。
2.1 让命令行认识你的OpenStack环境
用命令行操作OpenStack之前,第一件事是导入认证变量。一般是通过source你个人的openrc文件来导入用户名、密码、项目名、认证地址等信息。这一步不做,后面所有openstack命令都会报认证失败。
bash复制source /root/admin-openrc.sh
openstack token issue
执行openstack token issue看到输出了token信息,说明认证通了。这一步看似简单,实际经常出问题的是openrc文件里的OS_PROJECT_NAME和OS_USER_DOMAIN_NAME填得不一致,或者认证URL里端口写错。建议在刚刚创建Cinder服务后先执行一次token验证,排除基础认证问题再继续。
2.2 创建卷类型并指定后端驱动
卷类型的设计理念是:让使用者不用关心底层基础设施细节。用户创建卷时只需要说"我要一块高性能盘"或者"我要一块普通盘",至于这块盘是放在SSD存储池还是机械盘存储池,由管理员提前配好。
创建卷类型和执行关联的命令如下:
bash复制# 创建卷类型
cinder type-create lvm-ssd
cinder type-create nfs
