OpenStack 学习笔记(四):编排管理与存储管理实践(上)
OpenStack管理
OpenStack编排管理-heat
heat作用
Heat是一种通过OpenStack原生REST API使用声明性模板格式编排复合云应用程序的服务,提供与其他OpenStack核心项目的紧密集成
- Heat模板以文本文件的形式描述了云应用程序的基础架构,文本文件可供用户读写,并且支持通过版本控制工具进行管理
- Heat模板指定资源之间的关系,使得Heat能够调用OpenStack API以正确的顺序创建用户所需的基础架构,从而完全启动用户的应用程序
heat与其他服务之间的关系
•Heat是位于Nova、Neutron等服务之上的一个组件,它充当了OpenStack对外接口的角色,用户不需要直接接触OpenStack其他服务,只需把对各种资源的需求写在Heat模版里,Heat就会自动调用相关服务的接口来配置资源,从而满足用户的需求。
heat架构
用户在Horizon中或者命令行中提交包含模板和参数输入的请求,Horizon或者命令行工具会把请求转化为REST格式的API调用,然后调用Heat-api或者是Heat-api-cfn。Heat-api 和Heat-api-cfn会验证模板的正确性,然后通过消息队列传递给Heat Engine来处理请求。
•Heat中的模板是OpenStack资源的集合(虚拟机、网络、存储、告警、浮动IP、安全组、伸缩组、嵌套stack等),通过定义模板,可以将需要创建的资源在模板中描述,用此模板可以多次创建需要的资源。
heat组件
Heat-api:提供REST API服务,是其他组件与Heat交互的入口,接收API请求并传送给heat-engine。
•Heat-api-cfn:提供兼容AWS CloudFormation的API,接收API请求并转发给heat-engine。
•Heat-engine:Heat的核心,主要实现任务调度、资源生命周期管理等作用,自身并不提供资源创建功能,只负责编排资源后交由其他组件去处理。
# 查看heat相关进程
[root@controller ~]# ps -e | grep heat
heat engine架构
heat模板
Heat模板默认编写语言-YAML语法
- YAML Ain’t Markup Language
- 使用缩进(一个或多个空格)排版
- 序列项用短划线表示
- MAP中的key-value对用冒号表示
heat web实验
创建实例
创建网络
名称 Public_net
ID 6a1a6c1c-f0c9-4538-9bcf-e57d7be1c37e
创建image
ID 73ca0239-e6fd-49da-9c40-0b63606ca331
编写hot模板
把下面这段写到heat.txt文件中
heat_template_version: 2018-08-31description: Simple template to deploy a stack with two virtual machine instancesparameters:image_name_1: type: string label: Image ID description: SCOIMAGE Specify an image name for instance1 default: 73ca0239-e6fd-49da-9c40-0b63606ca331 #替换自己的image idpublic_net:type: stringlabel: Network IDdescription: SCONETWORK Network to be used for the compute instancedefault: 6a1a6c1c-f0c9-4538-9bcf-e57d7be1c37e #替换自己的外网 idresources:mykey:type: OS::Nova::KeyPairproperties:save_private_key: truename: mykeyweb_secgroup:type: OS::Neutron::SecurityGroupproperties:rules:- protocol: tcpremote_ip_prefix: 0.0.0.0/0port_range_min: 22port_range_max: 22- protocol: icmpprivate_net:type: OS::Neutron::Netproperties: name: private_netprivate_subnet:type: OS::Neutron::Subnetproperties: network_id: { get_resource: private_net }cidr: "192.168.99.0/24"ip_version: 4vrouter:type: OS::Neutron::Routerproperties: external_gateway_info: network: { get_param: public_net }vrouter_interface:type: OS::Neutron::RouterInterfaceproperties:router_id: { get_resource: vrouter }subnet_id: { get_resource: private_subnet }instance_port:type: OS::Neutron::Portproperties:network: { get_resource: private_net }security_groups: - default- { get_resource: web_secgroup }fixed_ips:- subnet_id: { get_resource: private_subnet }floating_ip:type: OS::Neutron::FloatingIPproperties:floating_network_id: { get_param: public_net }association:type: OS::Neutron::FloatingIPAssociationproperties:floatingip_id: { get_resource: floating_ip }port_id: { get_resource: instance_port }instance1: type: OS::Nova::Server properties:image: { get_param: image_name_1 }key_name: { get_resource: mykey }flavor: Flavor_web #替换自己创建的flavor名字networks:- port : { get_resource : instance_port }outputs:private_key:description: Private keyvalue: { get_attr: [ mykey, private_key ] }
创建堆栈:
OpenStack存储管理实验
实验介绍
本实验主要介绍如何通过OpenStack Dashboard和OpenStack CLI两种方式创建并管理卷类型和QOS,最后介绍了卷的创建、挂载及卸载、上传卷到镜像、创建卷快照并基于卷快照创建卷、基于卷发放虚拟机实例、卷扩容、更新卷状态以及删除卷等基本操作。
实验流程
OpenStack Dashboard操作
卷类型和QoS管理
使用admin用户登录OpenStack Dashboard界面,在左侧导航栏,选择“管理员> 卷> 卷类型”,进入卷类型列表,单击页面右上角的“创建卷类型”
创建QoS规格
单击待操作的卷类型所在行“Actions”列方框中的,在操作列表中选择“管理QoS规格关联”
卷管理
创建卷
弹出创建卷对话框,输入如下信息:
卷名称:自定义,如“Volume_web_01”。
卷来源:选择“镜像”。
使用镜像作为源:选择镜像“Img_web”。
类型:选择卷类型“VolumeType_web”。
大小:选择1 GB。
可用分区:选择“nova”。
其他保持默认。
挂载和卸载卷
弹出管理卷挂载对话框,在“连接到实例”下方选择待挂载的虚拟机实例“Instance_web_01”,单击“连接卷”
分离卷
上传卷到镜像
创建卷快照
卷扩容
基于卷快照创建卷
新创建的卷“Volume_web_02”相当于已恢复到卷“Volume_web_01”创建快照时的状态
基于卷发放虚拟机实例
编辑卷
若卷不是启动卷,则无法基于该卷发放虚拟机实例
更新卷状态
删除卷
删除卷“Volume_web_02”
配置NFS共享存储
nfs
[root@nfs ~]# mkdir /nfs_share
[root@nfs ~]# chmod -R 777 /nfs_share
[root@nfs ~]# yum -y install nfs-utils
[root@nfs ~]# echo "/nfs_share *(rw,sync,no_root_squash)" > /etc/exports
[root@nfs ~]# systemctl stop firewalld.service
[root@nfs ~]# systemctl restart nfs-server
[root@nfs ~]# systemctl enable nfs-server
Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service.
[root@nfs ~]# showmount -e localhost
Export list for localhost:
/nfs_share *
controller和compute
[root@controller ~]# mkdir /mnt/nfs_share
[root@controller ~]# chmod -R 777 /mnt/nfs_share
[root@controller ~]# showmount -e 192.168.108.12
Export list for 192.168.108.12:
/nfs_share *[root@compute ~]# mkdir /mnt/nfs_share
[root@compute ~]# chmod -R 777 /mnt/nfs_share
[root@compute ~]# showmount -e 192.168.108.12
Export list for 192.168.108.12:
/nfs_share *
controller
[root@controller ~]# vim /etc/cinder/cinder.conf
[root@controller ~]# cat /etc/cinder/nfs_shares
192.168.108.12:/nfs_share[root@controller ~]# mkdir -p /mnt/nfs_share
[root@controller ~]# chown -R cinder:cinder /mnt/nfs_share
[root@controller ~]# systemctl restart openstack-cinder-volume
创建卷类型:
创建卷:
以这个镜像作为源的卷创建新的实例Instance_web_02测试调整实例大小
去nfs上查看共享:
[root@nfs ~]# cd /nfs_share/
[root@nfs nfs_share]# ls
volume-ade705e8-5a3a-4068-88df-54085fcc5019
OpenStack CLI操作
卷类型和QoS管理
创建卷类型“VolumeType_cli”,类型为“public”,查看卷类型列表。
[root@controller ~(keystone_admin)]# openstack volume type create --public VolumeType_cli
+-------------+--------------------------------------+
| Field | Value |
+-------------+--------------------------------------+
| description | None |
| id | 0c2ff54a-a523-49ee-a0ec-435e0566fade |
| is_public | True |
| name | VolumeType_cli |
+-------------+--------------------------------------+[root@controller ~(keystone_admin)]# openstack volume type list
+--------------------------------------+----------------+-----------+
| ID | Name | Is Public |
+--------------------------------------+----------------+-----------+
| 0c2ff54a-a523-49ee-a0ec-435e0566fade | VolumeType_cli | True |
| f36391a9-b59a-4eb1-accb-47993e1a3cb2 | nfs | True |
| 4b1f7c20-54f3-4f5d-a091-69abb6617242 | VolumeType_web | True |
| 0482e78e-b20f-425a-a39d-1d741dc40e42 | iscsi | True |
| f6ddddce-66a9-42a6-ac35-ff7b28ce63af | __DEFAULT__ | True |
+--------------------------------------+----------------+-----------+
创建卷QoS“QoS_cli”,使用对象为“back-end”,查看卷QoS列表
[root@controller ~(keystone_admin)]# openstack volume qos create --consume back-end QoS_cli
+------------+--------------------------------------+
| Field | Value |
+------------+--------------------------------------+
| consumer | back-end |
| id | b16ae662-e771-4fe1-b4a9-1a7a2d70c840 |
| name | QoS_cli |
| properties | |
+------------+--------------------------------------+[root@controller ~(keystone_admin)]# openstack volume qos list
+--------------------------------------+---------+----------+----------------+------------+
| ID | Name | Consumer | Associations | Properties |
+--------------------------------------+---------+----------+----------------+------------+
| b16ae662-e771-4fe1-b4a9-1a7a2d70c840 | QoS_cli | back-end | | |
| 4efffda0-efaf-4849-a39b-ae4c2f29ac4b | QoS_web | back-end | VolumeType_web | |
+--------------------------------------+---------+----------+----------------+------------+
将卷QoS“QoS_cli”分配给卷类型“VolumeType_cli”,查看卷QoS分配的卷类型
[root@controller ~(keystone_admin)]# openstack volume qos associate QoS_cli VolumeType_cli
[root@controller ~(keystone_admin)]#
[root@controller ~(keystone_admin)]#
[root@controller ~(keystone_admin)]# openstack volume qos show QoS_cli
+--------------+--------------------------------------+
| Field | Value |
+--------------+--------------------------------------+
| associations | VolumeType_cli |
| consumer | back-end |
| id | b16ae662-e771-4fe1-b4a9-1a7a2d70c840 |
| name | QoS_cli |
| properties | |
+--------------+--------------------------------------+
卷管理
创建卷
创建卷“Volume_cli_01”,配置如下:
卷名称:“Volume_web_01”。
卷来源:“Img_cli”。
类型:“VolumeType_web”。
大小:1 GB。
可用分区:“nova”。
启动卷。查看卷列表
[root@controller ~(keystone_admin)]# openstack volume create --image Img_cli --type VolumeType_cli --size 1 --availability-zone nova --bootable Volume_cli_01
+---------------------+--------------------------------------+
| Field | Value |
+---------------------+--------------------------------------+
| attachments | [] |
| availability_zone | nova |
| bootable | false |
| consistencygroup_id | None |
| created_at | 2025-09-18T11:47:27.268013 |
| description | None |
| encrypted | False |
| id | 81cb8d61-d64a-4fc5-a385-6efb869c7925 |
| migration_status | None |
| multiattach | False |
| name | Volume_cli_01 |
| properties | |
| replication_status | None |
| size | 1 |
| snapshot_id | None |
| source_volid | None |
| status | creating |
| type | VolumeType_cli |
| updated_at | None |
| user_id | af704f24dc304c09a051f19c9f4d4efe |
+---------------------+--------------------------------------+[root@controller ~(keystone_admin)]# openstack volume list
+--------------------------------------+---------------+-----------+------+------------------------------------------+
| ID | Name | Status | Size | Attached to |
+--------------------------------------+---------------+-----------+------+------------------------------------------+
| 81cb8d61-d64a-4fc5-a385-6efb869c7925 | Volume_cli_01 | available | 1 | |
| ade705e8-5a3a-4068-88df-54085fcc5019 | Volume_web | in-use | 1 | Attached to Instance_web_02 on /dev/vda |
+--------------------------------------+---------------+-----------+------+------------------------------------------+