35.openstack管理及实验

openstack管理及实验

keystone身份认证

参数:

实验:

创建角色、用户及用户组
  1. 远程登录controller节点。执行以下命令,切换用户stack,并进入"devstack"目录,导 入用户admin的环境变量。
bash 复制代码
source keystonerc_admin 
  1. 执行以下命令,创建角色"Role_cli"。
bash 复制代码
openstack role create Role_cli
  1. 执行以下命令,创建在项目admin中的用户"User_cli_01",并设置密码。
bash 复制代码
openstack user create --domain default --project admin --password-prompt User_cli_01

#--password-pprompt 是交互式设置密码
  1. 执行以下命令,为用户"User_cli_01"在项目"admin"中添加角色"Role_cli"。
bash 复制代码
openstack role add --project admin --user User_cli_01 Role_cli
  1. 参考步骤3~4,执行以下命令,创建用户"User_cli_02"。
bash 复制代码
openstack user create --project admin --domain default --password 123 User_cli_02
  1. 为"User_cli_02"在项目"admin"中添加角色"admin"。
bash 复制代码
openstack role add --project admin --user User_cli_02 admin
  1. 执行以下命令,查看角色的分配情况。
bash 复制代码
openstack role assignment list --names| grep User_cli
  1. 执行以下命令,创建用户组"Group_cli"。
bash 复制代码
openstack group create Group_cli
  1. 执行以下命令,为用户组"Group_cli"添加用户成员"User_cli_01"和"User_cli_02"。
bash 复制代码
openstack group add user Group_cli User_cli_01 User_cli_02
  1. 执行以下命令,编辑用户"User_cli_01"的环境变量"User_cli_01-openrc.sh"。
bash 复制代码
cp keystonerc_admin keystonerc_User_cli_01  
vim keystonerc_User_cli_01

#修改
export OS_USERNAME=User_cli_01 
export PS1='[\u@\h \W(keystone_User_cli_01)]\$ ' 
  1. 执行以下命令,导入用户"User_cli_01"的环境变量"Keystonerc_User_cli_01"。
bash 复制代码
source Keystonerc_User_cli_01
  1. 执行以下命令,查看项目列表,只能查看到项目admin。
bash 复制代码
openstack project list
  1. 参考步骤10~12,编辑并导入用户"User_cli_02"的环境变量 "Keystonerc_User_cli_02",查看项目列表,可以查看到所有的项目。
bash 复制代码
cp keystonerc_admin keystonerc_User_cli_02 
vim keystonerc_User_cli_02

#修改
export OS_USERNAME=User_cli_02 
export PS1='[\u@\h \W(keystone_User_cli_02)]\$ ' 

openstack project list

禁用用户,删除用户

  1. 执行以下命令,导入keystonerc_admin环境变量。
bash 复制代码
source keystonerc_admin 
  1. 执行以下命令,从用户组"Group_cli"中移除用户"User_cli_02"。
bash 复制代码
openstack group remove user Group_cli User_cli_02
  1. 执行以下命令,查看用户组"Group_cli"是否包含用户"User_cli_02"。
bash 复制代码
openstack group contains user Group_cli User_cli_02
  1. 执行以下命令,禁用用户"User_cli_02"。
bash 复制代码
openstack user set --disable User_cli_02
  1. 执行以下命令,查看用户"User_cli_02"的禁用状态。
bash 复制代码
openstack user show User_cli_02
  1. 执行以下命令,删除用户"User_cli_02"。
bash 复制代码
openstack user delete User_cli_02
  1. 执行以下命令,查看用户列表。
bash 复制代码
openstack user list

创建项目,修改项目配额

  1. 执行以下命令,创建项目"Project_cli"。
bash 复制代码
openstack project create --domian default Project_cli
  1. 执行以下命令,为用户"User_cli_01"在项目"Project_cli"中添加角色"admin"。
bash 复制代码
openstack role add --project Project_cli --user User_cli_01 admin
  1. 执行以下命令,查看角色的分配情况。
bash 复制代码
openstack role assginment list --names | grep User_cli_01
  1. 执行以下命令,修改用户"User_cli_01"的环境变量"keystonerc_User_cli_01",修改 "OS_PTOJECT_NAME"参数为"Project_cli"。
bash 复制代码
vim keystonerc_User_cli_01 

#修改
export OS_PROJECT_NAME=Project_cli
  1. 执行以下命令,导入用户"User_cli_01"的环境变量。
bash 复制代码
source keystonerc_User_cli_01
  1. 执行以下命令,查看项目列表。
\ 复制代码
openstack project list
  1. 执行以下命令,查看项目"Project_cli"的默认配额。
bash 复制代码
openstack quota show Project_cli
  1. 执行以下命令,修改项目"Project_cli"的默认配额,如将实例数量修改为"5",卷数量 修改为"5",网络修改为"10"。
bash 复制代码
openstack quota set --instance 5 --volumes 5 --networks 10 Project_cli
  1. 执行以下命令,查看项目"Project_cli"配额的变化。
bash 复制代码
openstack quota show Project_cli | grep -E "instance|volumes|neworks"

glance镜像管理

作用:为虚拟机提供操作系统模板

配置文件: /etc/glance/glance-api.conf

下载镜像(cirros)

  1. 远程登录controller,本机上传镜像。

  2. 执行以下命令,查看镜像文件详细信息。

bash 复制代码
qemu-img info cirros-0.5.2-x86_64-disk.img

创建并注册镜像

  1. 执行以下命令,导入用户admin的环境变量。
bash 复制代码
source keystonerc_admin 
  1. 执行以下命令,创建镜像"Img_cli",镜像格式为"QCOW2",镜像设置为"private"。
bash 复制代码
openstack image create --file ./cirros-0.5.2-x86_64-disk.img --disk-farmat qcow2 --container-format bare --min-disk 1 --min-ram 128 --private Img_cli
  1. 执行以下命令,查看镜像列表。
bash 复制代码
openstack image list
  1. 执行以下命令,移除用户"User_cli_01"在项目"Project_cli"中的角色"admin"。
bash 复制代码
openstack role remove --user User_cli_01 --project Project_cli admin
  1. 执行以下命令,查看是否存在用户组"Group_cli"的角色。
bash 复制代码
openstack role assginment list --names | grep Group_cli
  1. 如有回显信息,执行以下命令,移除用户组"Group_cli"的角色。
bash 复制代码
openstack role remove --project Project_cli --group Group_cli admin
  1. 执行以下命令,添加用户"User_cli_01"在项目"Project_cli"中的角色"Role_cli"。
bash 复制代码
openstack role add --project Project_cli --user User_cli_01 Role_cli
  1. 执行以下命令,查看角色的分配情况。
bash 复制代码
openstack role assginment list --names |grep User_cli_01
  1. 执行以下命令,导入用户"User_cli_01"的环境变量。
bash 复制代码
source keystonerc_User_cli_01 
  1. 执行以下命令,查看镜像列表中是否会显示镜像"Img_cli"。
bash 复制代码
openstack image list 

修改镜像

  1. 执行以下命令,导入用户admin的环境变量。
bash 复制代码
source keystonerc_admin 
  1. 执行以下命令,将镜像"Img_cli"设置为"public"。
bash 复制代码
openstack image set --public Img_cli
  1. 执行以下命令,查看镜像"Img_cli"的详细信息,镜像可见性已经变为public。
bash 复制代码
openstack image show Img_cli 
  1. 执行以下命令,导入用户"User_cli_01"的环境变量,查看镜像列表中是否会显示镜像 "Img_cli"。
bash 复制代码
source keystonerc_User_cli_01 
openstack image list 

共享镜像

在web端没用共享镜像的功能

  1. 执行以下命令,导入用户admin的环境变量。
bash 复制代码
source keystonerc_admin
  1. 执行以下命令,将镜像设置为"shared"。
bash 复制代码
openstack image set --shared Img_cli
  1. 执行以下命令,导入用户"User_cli_01"的环境变量,查看镜像列表中是否会显示镜像 "Img_cli"。
bash 复制代码
source keystonerc_User_cli_01 
openstack image list 
  1. 执行以下命令,导入用户admin的环境变量,并查看镜像列表和项目列表。
bash 复制代码
source keystonerc_admin 
openstack image list 
openstack project list

记录镜像"Img_cli"和项目"Project_cli"的ID。(这里可以不用ID,使用NAME)

  1. 执行以下命令,将镜像"Img_cli"添加到项目"Project_cli"中。
bash 复制代码
openstack image project PROJECT_ID(NAME) IMAGE_ID(NMAE) 
  1. 执行以下命令,导入用户"User_cli_01"的环境变量,查看是否能显示共享镜像。
bash 复制代码
source keystonerc_User_cli_01 
openstack image list 
  1. 执行以下命令,更新状态为"accept",接收共享镜像。
bash 复制代码
openstack image set --accept IMAGE_ID
  1. 执行以下命令,再次查看是否能显示共享镜像。
bash 复制代码
openstack image list 

结论:状态为"accept"时,用户才能查看并使用共享的镜像

转换镜像格式

QCOW2格式支持镜像的压缩,所以通常会将其他格式的镜像转换成QCOW2格式再上传到OpenStack 中。以下将以VMDK格式的Ubuntu镜像为例,介绍如何进行镜像转换。本实验中Ubuntu镜像文件已使 用浏览器提前下载到本地Downloads文件夹,下载地址:http://cloud images.ubuntu.com/bionic/current/,选择"bionic-server-cloudimg-amd64.vmdk"进行下载。也可以直接使 用wget命令下载到虚拟机中,下载地址:http://cloud-images.ubuntu.com/bionic/current/bionic-server cloudimg-amd64.vmdk,但下载时间可能较长。

  1. 本地上传镜像,查看镜像详细情况
bash 复制代码
source keystonerc_admin 
qemu-img info bionic-server-cloudimg-amd64.vmdk 
  1. 执行以下命令,将镜像从VMDK格式转换为QCOW2格式。
bash 复制代码
openstack image convert -f vmdk -O qcow2 -c -p bionic-server-cloudimg-amd64.vmdk bionic-server-cloudimg-amd64.qcow2

其中: -f:指定输入磁盘镜像格式

​ -O:指定输出格式

​ -c:目标只能被压缩成QCOW2格式

​ -p:显示转换进度

  1. 执行以下命令,查看镜像转换后的详细信息。
bash 复制代码
qemu-img info bionic-server-cloudimg-amd64.qcow2
  1. 执行以下命令,创建镜像"Ubuntu_cli",镜像格式为"QCOW2",镜像状态为 "public"。(相当于上传镜像)
bash 复制代码
openstack image create --disk-format qcow2 --container-foermat bare --min-disk 1 --min-ram 128 --public --file ./bionic-server-cloudimg-amd64.qcow2 Ubuntu_cli

导出镜像

将镜像保存

  1. 执行以下命令,查看镜像列表。
bash 复制代码
openstack image list
  1. 执行以下命令,保存镜像"Ubuntu_cli"到本地。
bash 复制代码
openstack image save --file Ubuntu.qcow2 Ubuntu.cli

删除镜像

这里的删除镜像指的是,删除已经上传的镜像,如果是本地的镜像直接rm -f 删除即可

bash 复制代码
oppenstack image delete Ubuntu.cli

nova计算

主要负责:虚拟机的生命周期计算,其他计算资源生命周期

不负责:承担虚拟机的物理主机自身管理,全面的系统状态管理

检查RabbitMQ服务是否正常:

bash 复制代码
[root@controller ~ 09:33:47]# systemctl status rabbitmq.server.service
Unit rabbitmq.server.service could not be found.
[root@controller ~ 09:34:41]# systemctl status rabbitmq-server.service
● rabbitmq-server.service - RabbitMQ broker
   Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; enabled; ven>
  Drop-In: /etc/systemd/system/rabbitmq-server.service.d
           └─90-limits.conf
   Active: active (running) since Wed 2025-10-29 09:13:20 CST; 21min ago
nova-api
nova-conductor

•引入nova-conductor的好处:

▫安全性上考虑。之前每个nova-compute都是直接访问数据库的。如果由于某种原因,某个计算节点被 攻陷了,那攻击者就可以获取访问数据库的全部权限,肆意操作数据库。

▫方便升级。将数据库和nova-compute解耦,如果数据库的模式改变,nova-compute就不用升级了。

▫性能上考虑。之前数据库的访问在nova-compute中直接访问且数据库访问是阻塞性的,由于nova compute只有一个os线程,所以当一个绿色线程去访问数据库的时候会阻塞其他绿色线程,导致绿色线 程无法并发。但是nova-conductor是通过rpc 调用,rpc调用是绿色线程友好的,一个rpc call的执行返回 前不会阻塞其他绿色线程的执行。这样就会提高了操作的并发。

配置文件:/etc/nova/nova.conf

nova-scheduler

调度过程分为两步:

  • 通过过滤器选择满足条件的计算节点;

  • 通过权重选择最优的节点。

Filter

当 Filter scheduler 需要执行调度操作时,会让 filter 对计算节点进行判断,filter 返回 True 或 False。 Nova.conf 中的 available_filters 选项用于配置 scheduler 可用的 filter,默认是所有 nova 自带的 filter 都可以用于滤操作。

bash 复制代码
[root@controller ~]# vim /etc/nova/nova.conf
 1931 available_filters=nova.scheduler.filters.all_filters

另外还有一个选项 enabled_filters ,用于指定 scheduler 真正使用的 filter,默认值如下

bash 复制代码
[root@controller ~]# vim /etc/nova/nova.conf
 1938 
enabled_filters=AvailabilityZoneFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter

scheduler 按照列表中的顺序依次过滤。 下面依次介绍每个 filter。

RetryFilter

RetryFilter 的作用是刷掉之前已经调度过的节点。

AvailabilityZoneFilter

为提高容灾性和提供隔离服务,可以将计算节点划分到不同的Availability Zone中。

RamFilter

RamFilter 将不能满足 flavor 内存需求的计算节点过滤掉。

DiskFilter

DiskFilter 将不能满足 flavor 磁盘需求的计算节点过滤掉。

CoreFilter

CoreFilter 将不能满足 flavor vCPU 需求的计算节点过滤掉。

ComputeFilter

ComputeFilter 保证只有 nova-compute 服务正常工作的计算节点才能够被 nova-scheduler调度。

ComputeCapabilitiesFilter

ComputeCapabilitiesFilter 根据计算节点的特性来筛选。

ImagePropertiesFilter

ImagePropertiesFilter 根据所选 image 的属性来筛选匹配的计算节点。

ServerGroupAntiAffinityFilter(反亲和性)

ServerGroupAntiAffinityFilter 可以尽量将 Instance 分散部署到不同的节点上。

ServerGroupAffinityFilter

与 ServerGroupAntiAffinityFilter 的作用相反,ServerGroupAffinityFilter 会尽量将 instance 部署到同 一个计算节点上。

Weight

Scheduler 会对每个计算节点打分,得分最高的获胜。

创建一个实例,观看日志

先开机debug:

bash 复制代码
[root@controller ~]# vim /etc/nova/nova.conf
694 debug=True
[root@controller ~]# systemctl restart openstack-nova*
查看日志
bash 复制代码
[root@controller nova(keystone_admin)]# cat /var/log/nova/nova-scheduler.log | grep Filter
bash 复制代码
[root@controller nova(keystone_admin)]# cat /var/log/nova/nova-scheduler.log | grep weight
nova-compute

用于对接后端虚拟机


配置compute节点配置文件,定义driver:

bash 复制代码
[root@compute ~]# vim /etc/nova/nova.conf
 53 compute_driver=libvirt.LibvirtDriver
 [root@compute ~]# cd /usr/lib/python3.6/site-packages/nova/virt/
 [root@compute virt]# ls 
arch.py        driver.py    storage_users.py  block_device.py  event.py     virtapi.pym  configdrive.py   vmwareapi  disk      zvm   fake.py    hyperv    image    __init__.py     netutils.py  interfaces.template  osinfo.py    imagecache.py  ironic          hardware.py  images.py    libvirt    powervm    __pycache__ 
RabbitMQ性能查看

启用 RabbitMQ 管理 plugin

查看RabbitMQ服务状态:

bash 复制代码
[root@controller ~ 09:34:58]# rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node rabbit@controller:
rabbitmq_management
The following plugins have been configured:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch
Applying plugin configuration to rabbit@controller...
The following plugins have been enabled:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch

started 3 plugins.
[root@controller ~ 09:36:30]# iptables -F
[root@controller ~ 09:36:57]# rabbitmqctl add_user user_admin passwd_admin 
Adding user "user_admin" ...
[root@controller ~ 09:37:30]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor p>
   Active: inactive (dead)
     Docs: man:firewalld(1)
     
#然后还需要创建一个 用户,用来登录管理控制台了     
[root@controller ~ 09:37:49]#  rabbitmqctl set_user_tags user_admin administrator 
Setting tags for user "user_admin" to [administrator] ...

[root@controller ~ 09:38:26]# ps aux | grep nova
nova        1769  0.1  0.8 831608 32408 ?        Ss   09:12   0:02 /usr/bin/python3 /usr/bin/nova-novncproxy --web /usr/share/novnc/
nova        2123  0.5  2.1 1994528 78804 ?       Ssl  09:12   0:08 /usr/bin/python3 /usr/bin/nova-compute
nova        7566  0.6  2.0 314428 75064 ?        Ss   09:13   0:11 /usr/bin/python3 /usr/bin/nova-scheduler
nova        7586  0.1  3.6 609472 134684 ?       Sl   09:13   0:02 nova_api_wsgi   -DFOREGROUND
nova        7587  0.1  3.6 609472 134716 ?       Sl   09:13   0:02 nova_api_wsgi   -DFOREGROUND
nova        7588  0.1  3.6 609472 134844 ?       Sl   09:13   0:02 nova_api_wsgi   -DFOREGROUND
nova        7589  0.1  3.5 609472 132748 ?       Sl   09:13   0:02 nova_api_wsgi   -DFOREGROUND
nova        7590  0.0  0.2 266104  7660 ?        Sl   09:13   0:00 nova_metadata_w -DFOREGROUND
nova        7591  0.0  0.2 266104  7660 ?        Sl   09:13   0:00 nova_metadata_w -DFOREGROUND
nova        7592  0.0  0.2 331640  7652 ?        Sl   09:13   0:00 nova_metadata_w -DFOREGROUND
nova        7593  0.0  0.2 266104  7660 ?        Sl   09:13   0:00 nova_metadata_w -DFOREGROUND
nova        7608  0.6  1.6 314080 60332 ?        Ss   09:13   0:10 /usr/bin/python3 /usr/bin/nova-conductor
nova        7854  0.3  1.8 318664 67144 ?        S    09:13   0:04 /usr/bin/python3 /usr/bin/nova-conductor
nova        7855  0.3  1.7 318688 66768 ?        S    09:13   0:04 /usr/bin/python3 /usr/bin/nova-conductor
nova        7856  0.3  1.7 318580 66524 ?        S    09:13   0:04 /usr/bin/python3 /usr/bin/nova-conductor
nova        7857  0.3  1.8 318628 67264 ?        S    09:13   0:04 /usr/bin/python3 /usr/bin/nova-conductor
nova        7868  0.0  1.9 316304 71612 ?        S    09:13   0:00 /usr/bin/python3 /usr/bin/nova-scheduler
nova        7869  0.0  1.9 316312 71632 ?        S    09:13   0:00 /usr/bin/python3 /usr/bin/nova-scheduler
root       10536  0.0  0.0  12216  1208 pts/0    S+   09:39   0:00 grep --color=auto nova
[root@controller ~ 09:39:45]# source keystonerc_admin 

[root@controller ~(keystone_admin)]# openstack compute service list
+----+----------------+------------+----------+---------+-------+----------------------------+
| ID | Binary         | Host       | Zone     | Status  | State | Updated At                 |
+----+----------------+------------+----------+---------+-------+----------------------------+
|  1 | nova-conductor | controller | internal | enabled | up    | 2025-10-29T01:41:27.000000 |
|  3 | nova-scheduler | controller | internal | enabled | up    | 2025-10-29T01:41:29.000000 |
|  5 | nova-compute   | controller | nova     | enabled | up    | 2025-10-29T01:41:33.000000 |
|  6 | nova-compute   | computer   | nova     | enabled | up    | 2025-10-29T01:41:27.000000 |
+----+----------------+------------+----------+---------+-------+----------------------------+
创建虚拟机过程(简单)
  1. 客户(可以是 OpenStack 最终用户,也可以是其他程序)向 API(nova-api)发送请求:"帮我创 建一个 Instance"
  2. API对请求做一些必要处理后,向 Messaging(RabbitMQ)发送了一条消息:"让 Scheduler 创建 一个 Instance"
  3. Scheduler(nova-scheduler)从 Messaging 获取到 API 发给它的消息,然后执行调度算法,从若 干计算节点中选出节点 A。 请参考 看 nova-scheduler 如何选择计算节点
  4. Scheduler 向 Messaging 发送了一条消息:"在计算节点 A 上创建这个 Instance"
  5. 计算节点 A 的 Compute(nova-compute)从 Messaging 中获取到 Scheduler 发给它的消息,然 后通过本节点的 Hypervisor Driver 创建 Instance。请参考 nova-compute 部署 instance详解
  6. 在 Instance 创建的过程中,Compute 如果需要查询或更新数据库信息,会通过 Messaging 向 Conductor(nova-conductor)发送消息,Conductor 负责数据库访问。
Hypervisor、主机聚合和可用分区管理
  1. 远程登录controller。执行以下命令,导入用户admin的环境变量。
bash 复制代码
source keystonerc_admin
  1. 执行以下命令,查看OpenStack Hypervisor的列表。
bash 复制代码
openstack hypervisor list
#或者
openstack hypervisor list --long
  1. 执行以下命令,查看OpenStack主机的列表。
bash 复制代码
openstack host list
  1. 执行以下命令,创建主机聚合"HostAggr_cli"。
bash 复制代码
openstack aggregate create --zone nova HostAggr_cli
  1. 执行以下命令,为主机聚合"HostAggr_cli"添加主机"controller"。
bash 复制代码
openstack aggregate add host HostAgger_cli controller

验证:

  1. 执行以下命令,验证同一个主机是否可以加入不同的AZ。
bash 复制代码
openstack aggregate create --zone AZ_cli HostAggr_cli_test
openstack aggregate show HostAggr_cli_test
openstack aggregate add host HostAggr_cli_test controller 
#不可以
  1. 执行以下命令,验证同一个主机是否可以加入不同的主机聚合。
bash 复制代码
openstack aggregate set --zone nova HostAggr_cli_test
openstack aggregate show HostAggr_cli_test 
openstack aggregate add host HostAggr_cli_test controller
#可以

一个主机可以在多个主机聚合,但是只能在一个可用域

  1. 执行以下命令,为主机聚合"HostAggr_cli_test"移除主机"controller"。
bash 复制代码
openstack aggregate remove host HostAgger_cli_test controller
  1. 执行以下命令,删除主机聚合"HostAggr_cli_test"。
bash 复制代码
openstack aggregate delete HostAgger_cli_test
  1. 执行以下命令,查看主机聚合列表。
bash 复制代码
openstack aggregate list
规格管理
  1. 执行以下命令,创建规格"Flavor_cli",要求设置如下:
    • VCPUs:规格的VCPU数量,如"1"。
    • RAM (MB):规格的RAM大小,如"128"。
    • Root Disk (GB):规格的根磁盘大小,如"1"。
    • 该规格仅对项目"Project_cli"可见。
    • 其他保持默认。
bash 复制代码
openstack flavor create --disk 1 --ram 128 --vcpu 1 --private --project project_cli Flavor_cli
  1. 执行以下命令,移除规格"Flavor_cli"对项目"Project_cli"可见。
bash 复制代码
openstack flavor unset --project project_cli Flavor_cli
  1. 执行以下命令,查看规格"Flavor_cli"的详细信息。
bash 复制代码
openstack flavor show Flavor_cli

规格"Flavor_cli"仍不是"Public"。若要变更规格为"Public",可以先删除原先的规格,再创建新的规 格

  1. 执行以下命令,删除规格"Flavor_cli"。
bash 复制代码
openstack flavor delete Flavor_cli
  1. 执行以下命令,创建规格"Flavor_cli", 要求配置如下:
    • VCPUs:规格的VCPU数量,如"1"。
    • RAM (MB):规格的RAM大小,如"128"。
    • Root Disk (GB):规格的根磁盘大小,如"1"。
    • 其他保持默认。
bash 复制代码
openstack flavor create --disk 1 --ram 128 --vcpus 1 Flavor_cli
密钥对和虚拟机组管理
  1. 执行以下命令,创建密钥对"KeyPair_cli"。
bash 复制代码
openstack keypair create KeyPair_cli
  1. 执行以下命令,创建虚拟机组"ServerGroup_cli",策略设置为"Affinity"(关联)。
bash 复制代码
openstack server group create --policy affinity ServerGroup_cli

记录虚拟机组"ServerGroup_cli"的ID。

虚拟机实例操作
发放虚拟机实例
  1. 执行以下命令,创建虚拟机实例"Instance_cli_01",要求配置如下:
    • 可用分区:nova。
    • 镜像:Img_cli。
    • 规格:Flavor_cli。
    • 密钥对:KeyPair_cli。
    • 虚拟机组:ServerGroup_cli。
    • 网络:shared 。
bash 复制代码
openstack server create --availability-zone nova --image Img_cli --flavor Flavor_cli --network shared --key-name KeyPair_cli --hint group=9c63da74-81ce-4b06-9143-3cc9d1f8e0e9 Instance_cli_01
  1. 执行以下命令,查看虚拟机实例列表,虚拟机实例"Instance_cli_01"状态为"Active"表 示虚拟机实例创建成功。
bash 复制代码
openstack server list
虚拟机实例开启、关闭与重启
  1. 执行以下命令,关闭虚拟机实例"Instance_cli_01"。
bash 复制代码
openstack server stop Instance_cli_01
  1. 执行以下命令,查看虚拟机实例"Instance_cli_01"的状态。
bash 复制代码
openstack server show Instance_cli_01 | grep status
| status                              | SHUTOFF 
  1. 执行以下命令,启动虚拟机实例"Instance_cli_01"。
bash 复制代码
openstack server start Instance_cli_01
  1. 查看虚拟机实例"Instance_cli_01"的状态。
bash 复制代码
openstack server show Instance_cli_01 | grep status
| status                              | ACTIVE
  1. 行以下命令,软重启虚拟机实例"Instance_cli_01"。
bash 复制代码
openstack server reboot Instance_cli_01
#或者
openstack server reboot --soft Instance_cli_01

openstack server show Instance_cli_01 | grep status
| status                              | REBOOT 
  1. 执行以下命令,硬重启虚拟机实例"Instance_cli_01"。
bash 复制代码
openstack server reboot --hard Instance_cli_01

openstack server show Instance_cli_01 | grep status
| status                              | HARD_REBOOT

注意:软重启就是重启操作系统,硬重启就是关电源再插电源

虚拟机实例锁定、解锁
  1. 执行以下命令,锁定虚拟机实例"Instance_cli_01"。
bash 复制代码
openstack server lock Instance_cli_01

nova show Instance_cli_01 | grep lock
| locked                               | True  
  1. 执行以下命令,解锁虚拟机实例"Instance_cli_01"。
bash 复制代码
openstack server unlock Instance_cli_01

nova show Instance_cli_01 | grep lock
| locked                               | False
虚拟机实例暂停、挂起和恢复
  1. 执行以下命令,暂停虚拟机实例"Instance_cli_01"。
bash 复制代码
openstack server pause Instance_cli_01
  1. 执行以下命令,查看虚拟机实例"Instance_cli_01"的状态。
bash 复制代码
openstack server show Instance_cli_01 | grep status
| status               | PAUSED 
  1. 执行以下命令,恢复虚拟机实例"Instance_cli_01"。
bash 复制代码
openstack server unpause Instance_cli_01
  1. 执行以下命令,挂起虚拟机实例"Instance_cli_01"。
bash 复制代码
openstack server suspend Instance_cli_01
  1. 查看虚拟机实例"Instance_cli_01"的状态。
bash 复制代码
openstack server show Instance_cli_01 | grep status
| status                              | SUSPENDED               
  1. 执行以下命令,恢复虚拟机实例"Instance_cli_01"。
bash 复制代码
openstack server resume Instance_cli_01

openstack server show Instance_cli_01 | grep status
| status                              | ACTIVE 
虚拟机实例废弃和取消废弃
  1. 执行以下命令,废弃虚拟机实例"Instance_cli_01"。
bash 复制代码
openstack server shelve Instance_cli_01
  1. 执行以下命令,查看虚拟机实例"Instance_cli_01"的状态。
bash 复制代码
openstack server show Instance_cli_01 | grep status
| status                              | SHELVED_OFFLOADED  
  1. 执行以下命令,取消废弃虚拟机实例"Instance_cli_01"。
bash 复制代码
openstack server unshelve Instance_cli_01
  1. 查看虚拟机实例"Instance_cli_01"的状态。
bash 复制代码
openstack server show Instance_cli_01 | grep status
| status                              | ACTIVE 

注意:暂停是指将实例状态保存到内存,挂起是指将实例状态保存到磁盘,废弃是将cpu资源释放将实例作为镜像保存

虚拟机实例规格调整、快照和重建
  1. 执行以下命令,为虚拟机实例"Instance_cli_01"创建快照"Instance_Snap_cli"。
bash 复制代码
openstack server image create --name Instance_Snap_cli Instance_cli_01
  1. 执行以下命令,查看镜像列表。
bash 复制代码
openstack image list
  1. 执行以下命令,查看规格的详细信息。
bash 复制代码
openstack flavor show Flavor_cli
  1. 执行以下命令,创建一个新规格"Flavor_cli_new",将规格的RAM (MB)设置为"156", VCPU 和RAM设置与"Flave_cli"保持一致。
bash 复制代码
openstack flavor create --disk 1 --ram 156 --vcpus 1 Flavor_cli_new
  1. 执行以下命令,为虚拟机实例"Instance_cli_01"调整实例大小。
bash 复制代码
openstack server rebuild --image Instance_Snap_cli Instance_cli_01
  1. 执行以下命令,查看虚拟机实例"Instance_cli_01"的状态。
bash 复制代码
openstack server list | grep Instance_cli_01
  1. 执行以下命令,确认虚拟机实例Resize。
bash 复制代码
openstack server resize confirm Instance_cli_01
  1. 执行以下命令,恢复虚拟机实例快照"Instance_Snap_cli"。
bash 复制代码
openstack server rebuild --image Instance_Snap_cli Instance_cli_01
  1. 执行以下命令,查看虚拟机实例"Instance_cli_01"的镜像。
bash 复制代码
openstack server show Instance_cli_01 | grep image
| image                               | Instance_Snap_cli (1246205a-4736-4a32-bd4f-c48f644a9ac6)
虚拟机实例删除
  1. 执行以下命令,删除虚拟机实例"Instance_cli_01"。
bash 复制代码
openstack server delete Instance_cli_01
  1. 执行以下命令,查看虚拟机实例列表,是否删除成功。
bash 复制代码
openstack server list

cinder块存储管理

cinder 通过volume来连接后端磁盘

配置文件:/etc/cinder/cinder.conf

bash 复制代码
[root@controller ~ 14:15:08]# systemctl status openstack-cinder-api.service 
● openstack-cinder-api.service - OpenStack Cinder API Server
   Loaded: loaded (/usr/lib/systemd/system/openstack-cinder-api.service; enabled>
   Active: active (running) since Wed 2025-10-29 14:14:57 CST; 1min 8s ago
 Main PID: 1758 (cinder-api)
    Tasks: 5 (limit: 48807)
   Memory: 142.5M

[root@controller ~ 14:16:07]# vim /etc/cinder/cinder.conf 
 592 scheduler_default_filters = 
AvailabilityZoneFilter,CapacityFilter,CapabilitiesFilter
 #该配置文件的节点的AZ设置为az1
 395 storage_availability_zone=az1
 #创建卷时,不指定az默认使用nova AZ
 401 default_availability_zone=nova 
 

#验证AZ实验:
[root@controller ~ 14:18:57]# systemctl restart openstack-cinder*
[root@controller ~ 14:19:49]# source keystonerc_admin 

[root@controller ~(keystone_admin)]# openstack volume create --size 1 volume1 
Availability zone 'nova' is invalid. (HTTP 400) (Request-ID: req-beaf1a1c-867a-4ae0-801c-8fc085bd5eb8)
[root@controller ~(keystone_admin)]# openstack volume create --size 1 --availability-zone az2 volume1
Availability zone 'az2' is invalid. (HTTP 400) (Request-ID: req-38e932fb-8a55-4408-8f4e-b1a9f81c08ec)
[root@controller ~(keystone_admin)]# openstack volume create --size 1 --availability-zone az1 volume1
+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| attachments         | []                                   |
| availability_zone   | az1                                  |
| bootable            | false                                |
| consistencygroup_id | None                                 |
| created_at          | 2025-10-29T06:22:07.201112           |
| description         | None                                 |
| encrypted           | False                                |
| id                  | 927a3b1e-d980-484c-8ea3-3627cc5e3b7d |
| migration_status    | None                                 |
| multiattach         | False                                |
| name                | volume1                              |
| properties          |                                      |
| replication_status  | None                                 |
| size                | 1                                    |
| snapshot_id         | None                                 |
| source_volid        | None                                 |
| status              | creating                             |
| type                | iscsi                                |
| updated_at          | None                                 |
| user_id             | 489aad4348634475854bd558e5ca05d1     |
+---------------------+--------------------------------------+

卷类型和QoS管理

  1. 远程登录ECS。执行以下命令,导入用户admin的环境变量。
bash 复制代码
source keystonerc_admin
  1. 执行以下命令,创建卷类型"VolumeType_cli",类型为"public"。
bash 复制代码
openstack volumetype create --public VolumeType_cli
  1. 执行以下命令,查看卷类型列表。
bash 复制代码
openstack volume type list
  1. 执行以下命令,创建卷QoS"QoS_cli",使用对象为"back-end"。
bash 复制代码
openstack volume qos create --consume back-end QoS_cli
  1. 执行以下命令,查看卷QoS列表。
bash 复制代码
openstack volume qos list
  1. 执行以下命令,将卷QoS"QoS_cli"分配给卷类型"VolumeType_cli"。
bash 复制代码
openstack volume qos associate QoS_cli VolumeType_cli
  1. 执行以下命令,查看卷QoS分配的卷类型。
bash 复制代码
openstack volume qos show QoS_cli

卷管理

创建卷
  1. 步骤 1 执行以下命令,创建卷"Volume_cli_01",要求配置如下:
    • 卷名称:"Volume_cli_01"。
    • 卷来源:"Img_cli"。
    • 类型:"VolumeType_cli"。
    • 大小:1 GB。
    • 可用分区:"nova"。
    • 启动卷。
bash 复制代码
openstack volume create --image Img_cli --type VolumeType_cli --size 1 --avavilability-zone nova --bootable Volume_cli_01
  1. 执行以下命令,查看卷列表。
bash 复制代码
openstack volume list 
挂载和卸载卷
  1. 创建计算实例"Instance_cli_01"。
bash 复制代码
openstack server create --availability-zone nova --image Img_cli --flavor Flavor_cli --network shared --keypair KeyPair_cli --hint group SERVERGROUP_ID Instance_cli_01
  1. 执行以下命令,将卷"Volume_cli_01"挂载给虚拟机实例"Instance_cli_01"。
bash 复制代码
openstack server add volume Instance_cli_01 Volume_cli_01
  1. 执行以下命令,查看卷的挂载情况。
bash 复制代码
openstack volume list 
  1. 执行以下命令,将卷"Volume_cli_01"从虚拟机实例"Instance_cli_01"卸载。
bash 复制代码
openstack server remove vollume Instance_cli_01 Volume_cli_01
  1. 再次查看卷的挂载情况。
bash 复制代码
openstack volume list 
上传卷到镜像
  1. 执行以下命令,将卷"Volume_cli_01"上传到镜像"Volume_Img_cli",镜像格式设置为 "QCOW2"。
bash 复制代码
openstack image create --volume Volume_cli_01 --disk-format qcow2 Vollume_Img_cli
  1. 执行以下命令,查看刚刚创建的镜像。
bash 复制代码
openstack image list 
创建卷快照
  1. 执行以下命令,为卷"Volume_cli_01"创建卷快照"Volume_Snap_cli"。
bash 复制代码
openstack volume snapshot create Volume_cli_01 Volume_Snap_cli
  1. 执行以下命令,查看刚刚创建的卷快照。
bash 复制代码
openstack volume snapshot list

注意:已挂载的卷支持创建快照,但是已挂载状态下卷可能处于不断写入状态,所以会提醒警告

卷扩容
  1. 执行以下命令,将卷"Volume_cli_01"扩容至2 GB。
bash 复制代码
openstack volume set --size 2 Volume_cli_01
  1. 执行以下命令,查看刚刚扩容的卷。
bash 复制代码
openstack volume show Volume_cli_01
基于卷快照创建卷
  1. 执行以下命令,基于卷快照"Volume_Sanp_cli"创建卷"Volume_cli_02"。
bash 复制代码
openstack volume create --snapshot Volume_Snap_cli Volume_cli_02
  1. 执行以下命令,查看刚刚创建的卷。
bash 复制代码
openstack volume list 
基于卷发放虚拟机实例
  1. 执行以下命令,基于卷"Volume_cli_02"发放虚拟机实例"Instance_cli_02",规格设置 为"Flavor_cli"。
bash 复制代码
openstack server create --availability-zone nave --volume Volume_cli_02 --network shared --flavor Flavor_cli Instance_cli_02
  1. 执行以下命令,查看虚拟机实例列表。
bash 复制代码
openstack server list 
  1. 执行以下命令,将卷"Volume_cli_02"设置为非启动卷。
bash 复制代码
openstack volume set --non-bootable Volume_cli_02
  1. 再次发放虚拟机实例,验证是否能成功。
bash 复制代码
openstack server create --availability-zone nave --volume Volume_cli_02 --network shared --flavor Flavor_cli Instance_cli_03

#发现不能创建实例

注意:卷是非启动盘不能用此创建实例

更新卷状态
  1. 执行以下命令,查看卷"Volume_cli_01"的状态。
bash 复制代码
openstack volume list | grep Volume_cli_01 
  1. 执行以下命令,更新卷"Volume_cli_01"的状态。
bash 复制代码
openstack volume set --stat error Volume_cli_01
  1. 重复步骤1,查看卷的状态。
删除卷
  1. 执行以下命令,删除卷"Volume_cli_01"。
bash 复制代码
openstack volmue delete Volume_cli_01

由提示无法删除卷的原因可知,卷"Volume_cli_01"存在卷快照"Volume_Snap_cli",需要先删除卷快 照,才能删除该卷。

  1. 执行以下命令,删除卷快照"Volume_Snap_cli"。
bash 复制代码
openstack volume snapshot delete Volume_Snap_cli 
  1. 重复步骤1,再次删除卷,查看是否有报错。
bash 复制代码
openstack volmue delete Volume_cli_01

可以删除

  1. 执行以下命令,查看卷列表。
bash 复制代码
openstack volume list
  1. 执行以下命令,删除卷"Volume_cli_02",查看是否成功。
bash 复制代码
openstack volume delete Volume_cli_02 

**由提示无法删除卷的原因可知,卷"Volume_cli_02"的状态不能是"in-use",需要先将卷从虚拟机实例 上卸载,状态变为"available"后再删除。 **

  1. 执行以下命令,将卷"Volume_cli_02"从虚拟机实例"Instance_cli_02"上卸载。
bash 复制代码
openstack server remove volume Volume_cli_02 Instance_cli_02

由提示无法卸载卷的原因可知,待删除的卷为系统卷(即和虚拟机之间存在内容联系)无法卸载,因此该卷也无法删除,除非删除虚拟机实例。

  1. 执行以下命令,删除虚拟机实例"Instance_cli_02"。
bash 复制代码
openstack server delete Instance_cli_02 
  1. 执行以下命令,再次查看卷"Volume_cli_02"的状态。
bash 复制代码
openstack volume list | grep Volume_cli_02 
  1. 执行以下命令,再次删除卷"Volume_cli_02",查看是否成功。
bash 复制代码
openstack volume delete Volume_cli_02
  1. 执行以下命令,再次查看卷列表,是否删除成功。
bash 复制代码
openstack volume list 

swift对象存储

使用命令swift stat可以显示Swift中的帐户、容器和对象的信息。

Swift为帐户,容器和对象分别定义了Ring(环)将虚拟节点(分区)映射到一组物理存储设备上,包括 Account Ring、 Container Ring 、 Object Ring。

Ring记录了存储对象与物理位置的映射关系,通过Zone、 Device、 Partition和Replica来维护映射信 息。

bash 复制代码
#查看磁盘容量
[root@controller ~ 15:38:25]# lsblk
NAME                                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0                                       7:0    0     2G  0 loop /srv/node/swiftloopback
loop1                                       7:1    0  20.6G  0 loop 
├─cinder--volumes-cinder--volumes--pool_tmeta
│                                         253:3    0    20M  0 lvm  
│ └─cinder--volumes-cinder--volumes--pool 253:5    0  19.6G  0 lvm  
└─cinder--volumes-cinder--volumes--pool_tdata
                                          253:4    0  19.6G  0 lvm  
  └─cinder--volumes-cinder--volumes--pool 253:5    0  19.6G  0 lvm  
sda                                         8:0    0   200G  0 disk 
├─sda1                                      8:1    0     1G  0 part /boot
└─sda2                                      8:2    0   199G  0 part 
  ├─cs-root                               253:0    0    70G  0 lvm  /
  ├─cs-swap                               253:1    0   3.9G  0 lvm  [SWAP]
  └─cs-home                               253:2    0 125.1G  0 lvm  /home
sdb                                         8:16   0    20G  0 disk 
sr0                                        11:0    1  12.8G  0 rom 

#建两个分区
[root@controller ~ 15:38:38]# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xd92dfd3b.

Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd92dfd3b

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-41943039, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943039, default 41943039): +10G

Created a new partition 1 of type 'Linux' and of size 10 GiB.

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 
First sector (20973568-41943039, default 20973568): 
Last sector, +sectors or +size{K,M,G,T,P} (20973568-41943039, default 41943039): 

Created a new partition 2 of type 'Linux' and of size 10 GiB.

Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd92dfd3b

Device     Boot    Start      End  Sectors Size Id Type
/dev/sdb1           2048 20973567 20971520  10G 83 Linux
/dev/sdb2       20973568 41943039 20969472  10G 83 Linux

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

[root@controller ~ 15:39:34]# lsblk
NAME                                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0                                       7:0    0     2G  0 loop /srv/node/swiftloopback
loop1                                       7:1    0  20.6G  0 loop 
├─cinder--volumes-cinder--volumes--pool_tmeta
│                                         253:3    0    20M  0 lvm  
│ └─cinder--volumes-cinder--volumes--pool 253:5    0  19.6G  0 lvm  
└─cinder--volumes-cinder--volumes--pool_tdata
                                          253:4    0  19.6G  0 lvm  
  └─cinder--volumes-cinder--volumes--pool 253:5    0  19.6G  0 lvm  
sda                                         8:0    0   200G  0 disk 
├─sda1                                      8:1    0     1G  0 part /boot
└─sda2                                      8:2    0   199G  0 part 
  ├─cs-root                               253:0    0    70G  0 lvm  /
  ├─cs-swap                               253:1    0   3.9G  0 lvm  [SWAP]
  └─cs-home                               253:2    0 125.1G  0 lvm  /home
sdb                                         8:16   0    20G  0 disk 
├─sdb1                                      8:17   0    10G  0 part 
└─sdb2                                      8:18   0    10G  0 part 
sr0                                        11:0    1  12.8G  0 rom  


#下面为默认挂给swift的虚拟设备分区,将其卸载
[root@controller ~ 15:40:13]# umount /srv/node/swiftloopback
[root@controller ~ 15:40:23]# cd /srv/node/
[root@controller node 15:40:38]# ls
swiftloopback
#删除原来挂载点,新建新的挂载点
[root@controller node 15:40:39]# rm -rf swiftloopback/
[root@controller node 15:41:10]# mkdir obs1 obs2
[root@controller node 15:41:21]# ls
obs1  obs2

#持久化挂载
[root@controller node 15:41:23]# vim /etc/fstab 
#修改加入
#/srv/loopback-device/swiftloopback	/srv/node/swiftloopback	ext4	noatime,nodiratime,nofail,loop,user_xattr	0	0
/dev/sdb1 /srv/node/obs1 xfs defaults        0       0
/dev/sdb2 /srv/node/obs2 xfs defaults        0       0

#将两个分区格式化
[root@controller node 15:43:19]# mkfs.xfs /dev/sdb1
[root@controller node 15:43:36]# mkfs.xfs /dev/sdb2

#测试是否挂载成功
[root@controller node 15:43:38]# mount -a
[root@controller node 15:43:41]# lsblk
NAME                                          MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop1                                           7:1    0  20.6G  0 loop 
├─cinder--volumes-cinder--volumes--pool_tmeta 253:3    0    20M  0 lvm  
│ └─cinder--volumes-cinder--volumes--pool     253:5    0  19.6G  0 lvm  
└─cinder--volumes-cinder--volumes--pool_tdata 253:4    0  19.6G  0 lvm  
  └─cinder--volumes-cinder--volumes--pool     253:5    0  19.6G  0 lvm  
sda                                             8:0    0   200G  0 disk 
├─sda1                                          8:1    0     1G  0 part /boot
└─sda2                                          8:2    0   199G  0 part 
  ├─cs-root                                   253:0    0    70G  0 lvm  /
  ├─cs-swap                                   253:1    0   3.9G  0 lvm  [SWAP]
  └─cs-home                                   253:2    0 125.1G  0 lvm  /home
sdb                                             8:16   0    20G  0 disk 
├─sdb1                                          8:17   0    10G  0 part /srv/node/obs1
└─sdb2                                          8:18   0    10G  0 part /srv/node/obs2
sr0                                            11:0    1  12.8G  0 rom  

#修改obs1目录和obs2目录权限
[root@controller node 15:43:49]# chown swift:swift obs1
[root@controller node 15:44:37]# chown swift:swift obs2
[root@controller node 15:44:41]# ll
total 0
drwxr-xr-x 2 swift swift 6 Oct 30 15:43 obs1
drwxr-xr-x 2 swift swift 6 Oct 30 15:43 obs2

#创建swfit ring:
[root@controller node 15:44:43]# cd /etc/swift/
[root@controller swift 15:44:56]# ls
account.builder      container.builder          internal-client.conf  object-server.conf
account.ring.gz      container-reconciler.conf  object.builder        proxy-server
account-server       container.ring.gz          object-expirer.conf   proxy-server.conf
account-server.conf  container-server           object.ring.gz        swift.conf
backups              container-server.conf      object-server

[root@controller swift 15:45:58]# swift-ring-builder container.builder create 12 2 1
[root@controller swift 15:46:18]# swift-ring-builder account.builder create 12 2 1
[root@controller swift 15:46:33]# swift-ring-builder object.builder create 12 2 1
#12表示ring分区数量为2^12
#2表示2个副本
#1表示最少1个小时后才能更改ring配置

#查看ring的端口号
[root@controller swift 15:47:10]# cat account-server.conf | grep bind_port
bind_port = 6002
[root@controller swift 15:47:35]# cat container-server.conf | grep bind_port
bind_port = 6001
[root@controller swift 15:47:46]# cat object-server.conf | grep bind_port
bind_port = 6000


#创建ring映射关系:
[root@controller swift 15:48:13]# swift-ring-builder account.builder add z1-192.168.108.10:6002/obs1 100
WARNING: No region specified for z1-192.168.108.10:6002/obs1. Defaulting to region 1.
Device d0r1z1-192.168.108.10:6002R192.168.108.10:6002/obs1_"" with 100.0 weight got id 0
[root@controller swift 15:48:44]# swift-ring-builder account.builder add z2-192.168.108.10:6002/obs2 100
[root@controller swift 15:49:19]# swift-ring-builder container.builder add z1-192.168.108.10:6001/obs1 100
[root@controller swift 15:49:41]# swift-ring-builder container.builder add z2-192.168.108.10:6001/obs2 100
[root@controller swift 15:50:04]# swift-ring-builder object.builder add z1-192.168.108.10:6000/obs1 100
[root@controller swift 15:50:20]# swift-ring-builder object.builder add z2-192.168.108.10:6000/obs2 100


#再平衡
[root@controller swift 15:50:38]# swift-ring-builder account.builder rebalance
[root@controller swift 15:50:59]# swift-ring-builder object.builder rebalance
[root@controller swift 15:52:23]# swift-ring-builder container.builder rebalance


#在web端新建容器,上传文件测试
[root@controller swift 15:54:49]# find /srv/node -name *data
/srv/node/obs1/objects/3550/4e7/ddef754c5edea1969372796b3eca94e7/1761810851.63322.data
/srv/node/obs2/objects/3550/4e7/ddef754c5edea1969372796b3eca94e7/1761810851.63322.data
#删除后查看
[root@controller swift 15:54:55]# find /srv/node -name *data
[root@controller swift 15:55:26]# 

heat编排管理

heat作用

Heat是一种通过OpenStack原生REST API使用声明性模板格式编排复合云应用程序的服务,提供与其他 OpenStack核心项目的紧密集成

  • Heat模板以文本文件的形式描述了云应用程序的基础架构,文本文件可供用户读写,并且支持通过 版本控制工具进行管理
  • Heat模板指定资源之间的关系,使得Heat能够调用OpenStack API以正确的顺序创建用户所需的基 础架构,从而完全启动用户的应用程序

neutron网络管理

Neutron 由如下组件构成:

Neutron Server

对外提供 OpenStack 网络 API,接收请求,并调用 Plugin 处理请求。

Plugin

处理 Neutron Server 发来的请求,维护 OpenStack 逻辑网络状态, 并调用 Agent 处理请求。

Agent

处理 Plugin 的请求,负责在 network provider 上真正实现各种网络功能。

network provider

提供网络服务的虚拟或物理网络设备,例如 Linux Bridge,Open vSwitch 或者其他支持 Neutron 的物 理交换机。

Queue

Neutron Server,Plugin 和 Agent 之间通过 Messaging Queue 通信和调用。

Database

存放 OpenStack 的网络状态信息,包括 Network, Subnet, Port, Router 等。

创建网络

  1. 登录到controller,执行以下命令,导入用户admin的环境变量。
bash 复制代码
source keystonerc_admin
  1. 先创建一个镜像和规格
bash 复制代码
openstack image create --file ./cirros-0.5.2-x86_64-disk.img --disk-format qcow2 --private --min-ram 128 --min-disk 1 Img_cli

openstack flavor create --vcpus 1 --ram 128 --disk 1 Flavor_cli 
  1. 行以下命令,创建网络"Network_cli_01",设置为"Shared"。
bash 复制代码
openstack network create --share Network_cli_01
  1. 执行以下命令,查看网络列表。
\ 复制代码
openstack network list

5.执行以下命令,创建网络"Network_cli_01"的子网"Subnet_cli_01",配置要求如下:

  • 网络地址:"192.168.3.0/24"。

  • 子网地址池:"192.168.3.100~192.168.3.200"。

  • 网关地址:"192.168.3.1"。

bash 复制代码
openstack subnet create --network Network_cli_01 --subnet-range 192.168.3.0/24 --allocation-pool start=192.168.3.100,end=192.168.3.200 --gateway 192.168.3.1 Subnet_cli_01
  1. 执行以下命令,创建网络"Network_cli_02"和网络子网"Subnet_cli_02",子网配置要求如下,其他与网络"Network_cli_01"和网络子网"Subnet_cli_01"保持一致:
  • 网络地址:"192.168.4.0/24"。

  • 子网地址池:"192.168.4.100~192.168.4.200"。

  • 网关地址:"192.168.4.1"。

bash 复制代码
openstack network create --share Network_cli_02

openstack subnet create --network Network_cli_02 --subnet-range 192.168.4.0/24 --allocation-pool start=192.168.4.100,end=192.168.4.200 --gateway 192.168.4.1 Subnet_cli_02

验证:虚拟机实例相互访问

  1. 执行以下命令,发放2个虚拟机实例"Instance_cli_test",配置要求如下:

    • 虚拟机实例名称:Instance_cli_test。

    • 数量:2。

    • 选择启动源:Image。

    • 分配镜像:Img_cli。

    • 分配规格:Flavor_cli。

    • 分配网络:Network_cli_01。

    • 其他保持默认。

bash 复制代码
openstack server create --image Img_cli --flavor Flacor_cli --network Network_cli_01 --min 2 --max 2 Instance_cli_test 
  1. 再web界面ping测试,可以相互ping通

  2. 执行以下命令,发放虚拟机实例"Instance_cli_test-3",配置要求如下:

  • 虚拟机实例名称:Instance_cli_test-3。

  • 选择启动源:Image。

  • 分配镜像:Img_cli。

  • 分配规格:Flavor_cli。

  • 分配网络:Network_cli_02。

  • 其他保持默认。

bash 复制代码
openstack server create --image Img_cli --flavor Flavor_cli --network Network_cli_02 Instance_cli_test-3
  1. 验证虚拟机实例"Instance_cli_test-1"与"Instance_cli_test-3"是否可以相互Ping通。(不能ping通)

创建路由器

  1. 执行以下命令,创建路由器"Router_cli"
bash 复制代码
openstack router create --project admin Router_cli
  1. 配置路由器"Router_cli"的外部网络为"External"
bash 复制代码
openstack router set --external-gateway External Router_cli
  1. 执行以下命令,分别添加子网"Subnet_cli_01"和"Subnet_cli_02"在路由器"Router_cli"上的接口
bash 复制代码
openstack router add subnet Router_cli Subnet_cli_01

openstack router add subnet Router_cli Subnet_cli_02
  1. 执行以下命令,查看路由器"Router_cli"的接口信息
bash 复制代码
openstack router show Router_cli | grep interfaces_info
  1. 再次验证虚拟机实例"Instance_web_test-1"与"Instance_web_test-3"是否可以相互Ping通(可以ping通)

管理浮动IP

  1. 验证是否能够从外部Ping通虚拟机实例"Instance_cli_test-3"(不能)

  2. 执行以下命令,查看待分配虚拟机实例"Instance_cli_test-3"的网口

bash 复制代码
openstack port list --server Instance_cli_test-3 

记录待分配虚拟机实例"Instance_cli_test-3"的网口ID。

  1. 为虚拟机实例"Instance_cli_test-3"的网口创建并分配外部网络"External"的浮动IP。
bash 复制代码
openstack floating ip create --port PORT_ID External
  1. 验证是否能够从外部Ping通虚拟机实例"Instance_web_test-3"(不能)

  2. 执行以下命令,重新创建一个浮动IP,并查看其网口状态。

bash 复制代码
openstack floating ip create External
  1. 执行以下命令,重新创建一个浮动IP,并查看其网口状态
bash 复制代码
openstack floating ip list --long
  1. 执行以下命令,为虚拟机实例"Instance_cli_test-1"分配浮动IP
bash 复制代码
openstack server add floating ip Instance_cli_test-1 FLOATING_IP
  1. 执行以下命令,为虚拟机实例"Instance_cli_test-1" 解分配浮动IP
bash 复制代码
openstack server remove floating ip Instance_cli_test-1 FLOATING_IP
  1. 执行以下命令,释放全部已解分配的浮动IP
bash 复制代码
openstack floating ip delete FLOATING_IP

不创建实例将ip 利用无法释放floating ip

创建安全组

默认设置只有内部可以通过访问外网,所以应该设置安全组放行

  1. 执行以下命令,查看虚拟机实例"Instance_cli_test-3"当前应用的安全组
bash 复制代码
openstack server show Instance_cli_test-3

记录虚拟机实例"Instance_cli_test-3"的安全组名称和项目ID。

  1. 执行以下命令,查看虚拟机实例"Instance_cli_test-3"应用的安全组ID
bash 复制代码
openstack security group list --project PROJECT_ID
  1. 执行以下命令,查看虚拟机实例"Instance_cli_test-3"的安全组的规则ID
bash 复制代码
openstack security group rule list | grep SECURITY_GROUP_ID
  1. 执行以下命令,查看虚拟机实例"Instance_cli_test-3"的安全组的规则的详细信息(以下以第一条规则为例进行查看)
bash 复制代码
openstack security group rule show SECURITY_GROUP_RULE_ID
  1. 执行以下命令,创建安全组"SG_cli"
bash 复制代码
openstack security group create SG_cli
  1. 执行以下命令,添加安全组"SG_cli"的ICMP规则,要求配置如下:
  • 规则:All ICMP。

  • 方向:Ingress。

  • 远端:CIDR。

  • CIDR:0.0.0.0/0。

bash 复制代码
openstack security group rule create --protocol icmp --ingress --remote-ip 0.0.0.0/0 SG_cli
  1. 执行以下命令,添加安全组"SG_cli"的ICMP规则,要求配置如下:
  • 规则:All TCP。

  • 方向:Ingress。

  • 远端:CIDR。

  • CIDR:0.0.0.0/0。

bash 复制代码
openstack security group rule create --protocol tcp --ingress --remote-ip 0.0.0.0/0 SG_cli
  1. 执行以下命令,为虚拟机实例移除安全组"default"
bash 复制代码
openstack server remove security group Instance_cli_test-3 default
  1. 执行以下命令,为虚拟机实例添加安全组"SG_cli"
bash 复制代码
openstack server add security group Instance_cli_test-3 SG_cli
  1. 执行以下命令,再次查看虚拟机实例"Instance_cli_test-3"当前应用的安全组
bash 复制代码
openstack server show Instance_cli_test-3 | grep security_groups
  1. 再次验证是否能够从外部Ping通虚拟机实例"Instance_cli_test-3"(可以 )

openstack总和实验

创造一个实例可以连接外网

  1. 准备实例类型
bash 复制代码
source keystonerc_admin

openstack flavor create --disk 1 --vcpus 1 --ram 1000 m1.1u.1g
  1. 上传镜像
bash 复制代码
#将镜像从本地传入
#上传镜像到openstack

openstack image create --file ./cirros-0.5.2-x86_64-disk.img --disk-format qcow2 --public cirros-0.5.2
  1. 创建外部网络
bash 复制代码
openstack network create --project-domain admin --provider-network-type flat --provider-physical-network extnet --external waiwang

openstack subnet create --subnet-range 192.168.108.0/24 --gateway 192.168.108.2 --allocation-pool start=192.168.108.100,end=192.168.108.200 --network waiwang waiwang_subnet
  1. 创建内部网络
bash 复制代码
openstack network create --project-domain admin neiwang1

opensatck subnet create --subnet-range 172.16.0.0/24 --gateway 172.16.0.1 --allocation-pool start=172.16.0.100,end=172.16.0.200 dns-nameserver 8.8.8.8 --network neiwang1 neiwanng1_subnet 
  1. 创建路由器
bash 复制代码
openstack router create router1

opensatck router set --external-gateway waiwang router1

openstack router add subnet router1 neiwang1_subnet
  1. 创建实例
bash 复制代码
openstack server create --image cirros-0.5.2 --flavor m1.1u.1g --network neiwang1 Instance1

te --protocol icmp --ingress --remote-ip 0.0.0.0/0 SG_cli

复制代码
7. 执行以下命令,添加安全组"SG_cli"的ICMP规则,要求配置如下:

- 规则:All TCP。

- 方向:Ingress。

- 远端:CIDR。

- CIDR:0.0.0.0/0。

```bash
openstack security group rule create --protocol tcp --ingress --remote-ip 0.0.0.0/0 SG_cli
  1. 执行以下命令,为虚拟机实例移除安全组"default"
bash 复制代码
openstack server remove security group Instance_cli_test-3 default
  1. 执行以下命令,为虚拟机实例添加安全组"SG_cli"
bash 复制代码
openstack server add security group Instance_cli_test-3 SG_cli
  1. 执行以下命令,再次查看虚拟机实例"Instance_cli_test-3"当前应用的安全组
bash 复制代码
openstack server show Instance_cli_test-3 | grep security_groups
  1. 再次验证是否能够从外部Ping通虚拟机实例"Instance_cli_test-3"(可以 )

openstack总和实验

创造一个实例可以连接外网

外链图片转存中...(img-9z9Y14RP-1762252392498)

  1. 准备实例类型
bash 复制代码
source keystonerc_admin

openstack flavor create --disk 1 --vcpus 1 --ram 1000 m1.1u.1g
  1. 上传镜像
bash 复制代码
#将镜像从本地传入
#上传镜像到openstack

openstack image create --file ./cirros-0.5.2-x86_64-disk.img --disk-format qcow2 --public cirros-0.5.2
  1. 创建外部网络
bash 复制代码
openstack network create --project-domain admin --provider-network-type flat --provider-physical-network extnet --external waiwang

openstack subnet create --subnet-range 192.168.108.0/24 --gateway 192.168.108.2 --allocation-pool start=192.168.108.100,end=192.168.108.200 --network waiwang waiwang_subnet
  1. 创建内部网络
bash 复制代码
openstack network create --project-domain admin neiwang1

opensatck subnet create --subnet-range 172.16.0.0/24 --gateway 172.16.0.1 --allocation-pool start=172.16.0.100,end=172.16.0.200 dns-nameserver 8.8.8.8 --network neiwang1 neiwanng1_subnet 
  1. 创建路由器
bash 复制代码
openstack router create router1

opensatck router set --external-gateway waiwang router1

openstack router add subnet router1 neiwang1_subnet
  1. 创建实例
bash 复制代码
openstack server create --image cirros-0.5.2 --flavor m1.1u.1g --network neiwang1 Instance1
  1. 利用ssh或者到web界面登录 ping www.qq.com 查看是否能访问外网
相关推荐
峰顶听歌的鲸鱼20 小时前
9.OpenStack管理(三)
运维·笔记·分布式·openstack·学习方法
大海绵啤酒肚2 天前
OpenStack虚拟化平台之T版搭建部署
linux·运维·云计算·openstack
2301_787328496 天前
28.OpenStack块存储管理-cinder
云计算·openstack
key_Go7 天前
06.OpenStack网络管理
网络·openstack
key_Go12 天前
0.基于Centos-Stream8 搭建Openstack环境
linux·运维·centos·openstack
Q飞了12 天前
分布式存储Ceph与OpenStack、RAID的关系
分布式·ceph·openstack
求知若渴,虚心若愚。14 天前
OpenStack 计算节点的 “主机映射” 注册
openstack
刘某的Cloud20 天前
ceph设置标志位
linux·运维·ceph·openstack
howard200521 天前
2.1 欧拉集群安装Keystone认证服务
openstack·欧拉集群·keystone认证服务