个人用云计算学习笔记 --26 OpenStack 核心服务

文章目录

OpenStack 核心服务

一、认证与权限管理(Keystone)

1. 核心概念

概念 定义 关键特性
Domain(域) 虚拟容器,包含 User、Group、Project 全局唯一,对应机构 / 数据中心,支持多域管理
User(用户) 访问 OpenStack 的个人、系统或服务 需通过 Credential 认证,关联 Token 访问资源
Group(用户组) 多个 User 的集合 批量分配权限,简化权限管理
Project(项目) 资源集合(计算、存储、网络等) 域内唯一,与 Tenant/Account 通用,公有云称租户
Role(角色) 权限集合 全局唯一,支持继承,决定用户操作权限
Token(令牌) 身份认证凭证 默认有效期 24 小时,服务间调用需携带
Endpoint(端点) 服务访问网络地址(URL) 分 public/internal/admin 三类接口

2. 常用操作命令

  • 域管理:openstack domain create/delete/list(创建 / 删除 / 查看域)

    python 复制代码
    # 创建新的domain叫domain-test
    [root@controller ~(keystone_admin)]# openstack domain create domain-test
    +-------------+----------------------------------+
    | Field       | Value                           |
    +-------------+----------------------------------+
    | description |                                 |
    | enabled     | True                             |
    | id         | c70009318d0141c7a84b26ff427ff9d6 |
    | name       | domain-test                     |
    | options     | {}                               |
    | tags       | []                               |
    +-------------+----------------------------------+
    #再次验证确实多了一个domain-test
    [root@controller ~(keystone_admin)]# openstack domain list
    +----------------------------------+-------------+---------+--------------------+
    | ID                               | Name       | Enabled | Description       |
    +----------------------------------+-------------+---------+--------------------+
    | 2c99588e109d427abb530cbb9aada74a | heat       | True   |                   |
    | c70009318d0141c7a84b26ff427ff9d6 | domain-test | True   |                   |
    | default                         | Default     | True   | The default domain |
    +----------------------------------+-------------+---------+--------------------+
    
    #查看
    [root@controller ~]# source keystonerc_admin
    [root@controller ~(keystone_admin)]# openstack domain list
    +----------------------------------+---------+---------+--------------------+
    | ID                               | Name   | Enabled | Description       |
    +----------------------------------+---------+---------+--------------------+
    | 2c99588e109d427abb530cbb9aada74a | heat   | True   |                   |
    | default                         | Default | True   | The default domain |
    +----------------------------------+---------+---------+--------------------+
    
    #删除
    [root@controller ~(keystone_admin)]# openstack domain set --disable domain-test 
    #设置domain禁用
    [root@controller ~(keystone_admin)]# openstack domain delete domain-test
    [root@controller ~(keystone_admin)]# openstack domain list
    +----------------------------------+---------+---------+--------------------+
    | ID                               | Name   | Enabled | Description       |
    +----------------------------------+---------+---------+--------------------+
    | 2c99588e109d427abb530cbb9aada74a | heat   | True   |                   |
    | default                         | Default | True   | The default domain |
    +----------------------------------+---------+---------+--------------------+

    开启多域登录界面:

    python 复制代码
    [root@controller ~(keystone_admin)]# cd /etc/openstack-dashboard/
    [root@controller openstack-dashboard(keystone_admin)]# ls
    cinder_policy.json glance_policy.json keystone_policy.json local_settings 
    local_settings.d neutron_policy.json nova_policy.d nova_policy.json
    [root@controller openstack-dashboard(keystone_admin)]# vim local_settings
    #修改配置文件83行如下,开启keystone支持多域
     83 OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
    [root@controller openstack-dashboard(keystone_admin)]# systemctl restart httpd 

    效果:

  • 用户管理:openstack user show/list(查看用户)、openstack user create --password 密码 用户名(创建用户)

    python 复制代码
    [root@controller ~(keystone_admin)]# openstack user list
    +----------------------------------+------------+
    | ID                               | Name       |
    +----------------------------------+------------+
    | 7ef9147a8abe485889ece90dce340ab1 | admin     |
    | 8624a4e61d6c4b589814c369af26cb5f | heat_admin |
    | 8770fb183087426eb29543f3d629b66f | glance     |
    | c3eba4bb5577404285b333e4de5c1909 | cinder     |
    | c286b069d5064a2b8050b3438f31ef7f | nova       |
    | 66fbd238901143d1a2b9e1e848117aff | placement |
    | 7e1d63925490464c897f75275c7364e6 | neutron   |创建新用户:user1
    | 1dd2bd1d566a4f4091e99441bb1da9b5 | swift     |
    | 9368227a55f44dba85e10bc7c696813c | heat       |
    | be5dc0149ba4402db25045a17a3d7a59 | heat-cfn   |
    | e1ddffa452504776bc845f6f4114cd14 | gnocchi   |
    | fda949b4ff944336bb3206d6f7e6bc4c | ceilometer |
    | 10286ba1e9974e6994fe9908ab0db617 | aodh       |
    +----------------------------------+------------+
    
    
    #创建用户user1密码HUAWEI
    [root@controller ~(keystone_admin)]# openstack user create --password HUAWEI 
    user1   
    +---------------------+----------------------------------+
    | Field               | Value                           |
    +---------------------+----------------------------------+
    | domain_id           | default                         |
    | enabled             | True                             |
    | id                 | 77ae3f5b216749ef8663c3bdb5679d36 |
    | name               | user1                           |
    | options             | {}                               |
    | password_expires_at | None                             |
    +---------------------+----------------------------------+
    #查看用户列表有没有新创建的用户user1,user1在最下面
    [root@controller ~(keystone_admin)]# openstack user list
    +----------------------------------+------------+
    | ID                               | Name       |
    +----------------------------------+------------+
    | 7ef9147a8abe485889ece90dce340ab1 | admin     |
    | 8624a4e61d6c4b589814c369af26cb5f | heat_admin |
    | 8770fb183087426eb29543f3d629b66f | glance     |
    | c3eba4bb5577404285b333e4de5c1909 | cinder     |
    | c286b069d5064a2b8050b3438f31ef7f | nova       |
    | 66fbd238901143d1a2b9e1e848117aff | placement |
    | 7e1d63925490464c897f75275c7364e6 | neutron   |
    | 1dd2bd1d566a4f4091e99441bb1da9b5 | swift     |
    | 9368227a55f44dba85e10bc7c696813c | heat       |
    | be5dc0149ba4402db25045a17a3d7a59 | heat-cfn   |
    | e1ddffa452504776bc845f6f4114cd14 | gnocchi   |
    | fda949b4ff944336bb3206d6f7e6bc4c | ceilometer |
    | 10286ba1e9974e6994fe9908ab0db617 | aodh       |
    | 77ae3f5b216749ef8663c3bdb5679d36 | user1     |
    +----------------------------------+------------+
    #查看user1用户详细信息
    [root@controller ~(keystone_admin)]# openstack user show user1
    +---------------------+----------------------------------+
    | Field               | Value                           |
    +---------------------+----------------------------------+
    | domain_id           | default                         |
    | enabled             | True                             |
    | id                 | 77ae3f5b216749ef8663c3bdb5679d36 |
    | name               | user1                           |
    | options             | {}                               |
    查看角色role:
    | password_expires_at | None                             |
    +---------------------+----------------------------------+
  • 组管理:openstack group create 组名(创建组)、openstack group add user 组名 用户名(添加用户到组)

    python 复制代码
    #创建组group1
    [root@controller ~(keystone_admin)]# openstack group create group1
    +-------------+----------------------------------+
    | Field       | Value                           |
    +-------------+----------------------------------+
    | description |                                 |
    | domain_id   | default                         |
    | id         | f259902c4c0242d3b392d951494e747f |
    | name       | group1                           |
    +-------------+----------------------------------+
    #列出所有的组
    [root@controller ~(keystone_admin)]# openstack group list
    +----------------------------------+--------+
    | ID                               | Name   |
    +----------------------------------+--------+
    | f259902c4c0242d3b392d951494e747f | group1 |
    +----------------------------------+--------+
    #查看group1组详细信息
    [root@controller ~(keystone_admin)]# openstack group show group1
    +-------------+----------------------------------+
    | Field       | Value                           |
    +-------------+----------------------------------+
    | description |                                 |
    | domain_id   | default                         |
    | id         | f259902c4c0242d3b392d951494e747f |
    | name       | group1                           |
    +-------------+----------------------------------+
    #将user1加入group1
    [root@controller ~(keystone_admin)]# openstack group add user group1 user1
    #查看user1是否隶属于group1
    [root@controller ~(keystone_admin)]# openstack group contains user group1 user1
    user1 in group group1
  • 角色分配:openstack role add --project 项目名 --group/--user 主体 角色名

    python 复制代码
    #查看角色role
    [root@controller ~(keystone_admin)]# openstack role list
    +----------------------------------+------------------+
    | ID                               | Name             |
    +----------------------------------+------------------+
    | 030b4ca553dc41349168eaca4fd43f42 | ResellerAdmin   |
    | 461321ea6a284081b692a469a15d7938 | SwiftOperator   |
    | 4ef39ef24f694c9aa6c1101622da0e92 | admin           |
    | 8b24d8bef4004573a8f3cb1f5a1517a8 | _member_         |
    | 973e0706bc66471a90d09f177bfb6a1d | member           |
    | a3af83fe8bf84014b01feae786f83b8b | heat_stack_owner |
    | ce4a3e671d9040359d6f6f55555bf429 | reader           |
    | e9cd36ba1b8744878cc15a05709ab1fd | heat_stack_user |
    +----------------------------------+------------------+
    
    #给group1赋予角色admin
    [root@controller ~(keystone_admin)]# openstack role add --project admin --group 
    group1 admin
    
    #验证group1角色
    [root@controller ~(keystone_admin)]# openstack role assignment list --names --
    group group1
    +-------+------+----------------+---------------+--------+--------+-----------+
    | Role | User | Group         | Project       | Domain | System | Inherited |
    +-------+------+----------------+---------------+--------+--------+-----------+
    | admin |     | group1@Default | admin@Default |       |       | False     |
    +-------+------+----------------+---------------+--------+--------+-----------+
  • 项目管理:openstack project create ProjectA(创建项目)

    python 复制代码
    #创建项目ProjectA
    [root@controller ~(keystone_admin)]# openstack project create ProjectA
    +-------------+----------------------------------+
    | Field       | Value                           |
    +-------------+----------------------------------+
    | description |                                 |
    | domain_id   | default                         |
    | enabled     | True                             |
    | id         | a6aa11ee311a46889ac34e49b8da47d1 |
    | is_domain   | False                           |
    | name       | ProjectA                         |
    | options     | {}                               |
    | parent_id   | default                         |
    | tags       | []                               |
    +-------------+----------------------------------+
    #查看验证命令
    [root@controller ~(keystone_admin)]# openstack project list
    [root@controller ~(keystone_admin)]# openstack project show projectA
    #ProjeectA分配给用户user1
    [root@controller ~(keystone_admin)]# openstack user set --project ProjectA user1
    #给项目ProjectA里的用户user1赋予角色admin
    [root@controller ~(keystone_admin)]# openstack role add --user user1 --project 
    ProjectA admin
  • 配额管理:openstack quota set --instance 数量 --cores 核心数 --ram 内存MB 项目名(修改项目资源配额)

    python 复制代码
    \#将Project配额设置为实例3,vcpu 5,内存5000MB
    [root@controller ~(keystone_admin)]# openstack quota set --instance 3 --cores 5 - -ram 5000 ProjectA

二、镜像管理(Glance)

1. 核心功能

  • 镜像生命周期管理:支持创建、上传、下载、注册、检索虚拟机镜像。

  • 存储后端:本地文件系统、Swift、Cinder、Ceph 等。

  • 支持格式:qcow2(动态扩展)、raw、iso、vmdk、vhd 等。

2. 镜像状态机

  • queued:没有上传 image 数据,只有 db 中的元数据。
  • saving:正在上传 image data,当注册一个镜像使用 POST /images 并且当前携带了一个 x-image-metalocation 头,这个镜像将不会进入 saving 状态 (镜像的数据已经是可以获得的,不能重传)。
  • active:当镜像数据上传完毕,镜像就可以被使用了 (可获得的),此时处于 active 状态。
  • deactivated:表示任何非管理员用户都无权访问镜像数据,禁止下载镜像,也禁止像镜像导出和镜像克隆之类的操作(请求镜像数据的操作)。
  • killed:表示上传过程中发生错误,并且镜像是不可读的。
  • deleted:glance 已经保存了该镜像的数据,但是该镜像不再可用,处于该状态的镜像将在不久后被自动删除。
  • pending_delete:与 deleted 相似,glance 还没有清除镜像数据,只是处于该状态的镜像不可恢复。

关键状态流转: queued(仅元数据)→ saving/uploading(数据上传中)→ active(可用)→ deactivated(禁止非管理员访问)→ deleted/pending_delete(删除相关)。

3. 关键操作

  • 上传镜像:Web 界面选择文件 + 指定格式;大文件推荐命令行(带进度条):glance image-create --name 名称 --file 路径 --disk-format 格式 --progress

  • 后端配置:修改/etc/glance/glance-api.conf,支持 Swift 作为后端(需配置存储区域、容器、认证信息)。

  • 镜像制作:可下载官方镜像(CentOS、CirrOS 等),或手动制作(安装系统→配置 cloud-init→清理→生成镜像)。

python 复制代码
#将/etc/glance/glance-api.conf中的#号开头的行(注释行),和空行过滤掉,显示出配置行
[root@controller ~]# grep -Ev '^#' /etc/glance/glance-api.conf | grep -Ev '^$'
[DEFAULT]
bind_host=0.0.0.0
bind_port=9292
workers=4
image_cache_dir=/var/lib/glance/image-cache
debug=False
log_file=/var/log/glance/api.log
log_dir=/var/log/glance
transport_url=rabbit://guest:guest@192.168.108.10:5672/
[cinder]
[cors]
[database]
connection=mysql+pymysql://glance:cb89fe4fee034ad6@192.168.108.10/glance
[file]
[glance.store.http.store]
[glance.store.rbd.store]
[glance.store.s3.store]
[glance.store.swift.store]
[glance.store.vmware_datastore.store]
[glance_store]
stores=file,http,swift
default_store=file
filesystem_store_datadir=/var/lib/glance/images/
[image_format]
[keystone_authtoken]
www_authenticate_uri=http://192.168.108.10:5000/v3
auth_type=password
auth_url=http://192.168.108.10:5000
username=glance
password=huawei
user_domain_name=Default
project_name=services
project_domain_name=Default[oslo_concurrency]
[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
driver=messagingv2
topics=notifications
[oslo_messaging_rabbit]
ssl=False
default_notification_exchange=glance
[oslo_middleware]
[oslo_policy]
policy_file=/etc/glance/policy.json
[paste_deploy]
flavor=keystone
[profiler]
[store_type_location_strategy]
[task]
[taskflow_executor]
[wsgi]
#下面为查看swift密码方式
[root@controller ~]# vim answers.txt
1137 CONFIG_SWIFT_HASH=f8715a7c2bf640b9       #这个密码配置到上面的配置文件
[root@controller ~]# vim /etc/glance/glance-api.conf
3111 default_store=swift
3982 swift_store_region = RegionOne
4090 swift_store_container = gqdglance
4118 swift_store_large_object_size = 5120
4160 swift_store_create_container_on_put = true
4182 swift_store_multi_tenant = true
4230 swift_store_admin_tenants = services
4391 swift_store_auth_address = http://192.168.108.10:5000/v3
4399 swift_store_user = swift
4408 swift_store_key = f8715a7c2bf640b9           #这里的swift密码是安装的时候决定的,
随机产生的,查看answers.txt
[root@controller ~(keystone_admin)]# systemctl restart openstack-glance* #重启glance进程

数据库中观察现象:

python 复制代码
[root@controller ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 23720
Server version: 10.3.28-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| aodh               |
| cinder             |
| glance             |
| gnocchi            |
| heat               |
| information_schema |
| keystone           |
| mysql              |
| neutron            |
| nova               || nova_api           |
| nova_cell0         |
| performance_schema |
| placement          |
| test               |
+--------------------+
15 rows in set (0.000 sec)
MariaDB [(none)]> use glance;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [glance]> show tables;
+----------------------------------+
| Tables_in_glance                 |
+----------------------------------+
| alembic_version                  |
| image_locations                  |
| image_members                    |
| image_properties                 |
| image_tags                       |
| images                           |
| metadef_namespace_resource_types |
| metadef_namespaces               |
| metadef_objects                  |
| metadef_properties               |
| metadef_resource_types           |
| metadef_tags                     |
| migrate_version                  |
| task_info                        |
| tasks                            |
+----------------------------------+
15 rows in set (0.000 sec)
MariaDB [glance]> select id,value from image_locations;
+----+---------------------------------------------------------------------------
---------------------------------------------------------------------------------
---+
| id | value                                                                     
                                                                                  
  |
+----+---------------------------------------------------------------------------
---------------------------------------------------------------------------------
---+
|  1 | file:///var/lib/glance/images/e846b42b-5024-479b-9f79-1ae181bfa14e         
                                                                                  
 |
|  2 | file:///var/lib/glance/images/bb8a4940-3bde-428c-83b4-9c98eb430721         
                                                                                  
 |
|  3 | 
swift+http://192.168.108.10:8080/v1/AUTH_03e49a46342d48ab9607b4919925e42c/gqdglan
ce_6a5a50d9-be54-4151-bd2f-4b1c08efdb18/6a5a50d9-be54-4151-bd2f-4b1c08efdb18 |
+----+---------------------------------------------------------------------------
---------------------------------------------------------------------------------
---+
3 rows in set (0.000 sec)

4.镜像image、实例instance、规格flavor三者区别

镜像、实例和规格的关系

用户可以从同一个镜像启动任意数量的实例

每个启动的实例都是基于镜像的一个副本,实例上的任何修改都不会影响到镜像

启动实例时,必须指定一个规格,实例按照规格使用资源

三、计算管理(Nova)

nova系统架构

•DB:用于数据存储的SQL数据库。

•API:接收 HTTP 请求、转换命令并通过oslo.messaging队列或 HTTP与其他组件通信的组件。

•Scheduler:为虚拟机选择合适的物理主机。

•Compute:虚拟机生命周期和复杂流程控制。

•Conductor:处理需要协调(构建/调整大小)的请求,充当数据库代理或处理对象转换。

•Placement:跟踪资源提供者的库存和使用情况。

•RPC:Remote Procedure Call,远程过程调用,是一个计算机通信协议。该协议允许运行于一台计算机

的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。

•API服务器处理REST请求,通常涉及数据库读写,将RPC消息发送到其他Nova服务(可选),并生成对

REST调用的响应。

•RPC消息传递是通过oslo.messaging库完成的,它是消息队列之上的抽象。

•Nova使用基于消息传递的"无共享"架构,大多数主要的nova组件可以在多个服务器上运行,并且有一个

监听RPC消息的管理器。

查看控制节点,计算节点的nova服务:

控制节点:

计算节点:

1. 核心功能
  • 虚拟机生命周期管理:创建、启动、暂停、重启、挂起、废弃、重建等。
  • 资源调度:通过过滤 + 权重算法选择最优计算节点。
  • 支持虚拟化平台:KVM、VMware、Xen、Ironic(裸金属)等。
2. 核心组件
  • Nova-API:接收 REST 请求,转换为 RPC 消息,校验参数与配额。

  • Nova-Scheduler:调度器,通过过滤器(Filter)和权重计算(Weight)选择计算节点。

  • Nova-Compute:执行虚拟机操作,调用 Hypervisor 驱动实现资源调度。

  • Nova-Conductor:数据库代理,解耦 Compute 与 DB,处理复杂流程(迁移、重建等)。

    引入nova-conductor的好处:

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

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

    性能上考虑。之前数据库的访问在nova-compute中直接访问且数据库访问是阻塞性的,由于novacompute只有一个os线程,所以当一个绿色线程去访问数据库的时候会阻塞其他绿色线程,导致绿色线程无法并发。但是nova-conductor是通过rpc

    调用,rpc调用是绿色线程友好的,一个rpc call的执行返回前不会阻塞其他绿色线程的执行。这样就会提高了操作的并发。

物理部署架构:
  • 无中心架构,支持水平扩展。
  • 控制节点部署:Nova-API、Nova-Scheduler、Nova-Conductor。
  • 计算节点部署:Nova-Compute。
  • 高可用(HA):多控制节点 + HAproxy 负载均衡。
3. 调度机制
  • 过滤阶段(默认过滤器):AvailabilityZoneFilter(可用域过滤)、ComputeFilter(服务状态过滤)、RamFilter(内存需求过滤)、ImagePropertiesFilter(镜像属性过滤)等。

  • 权重计算:默认按计算节点空闲内存打分,空闲内存越多权重越高。

    默认过滤器
    过滤器 功能 示例场景
    RetryFilter 过滤之前调度过失败的节点 节点 A 调度失败后,重新调度时被过滤
    AvailabilityZoneFilter 按可用域过滤 GPU 实例部署到 gpu_az,普通实例到 nogpu_az
    ComputeFilter 仅筛选 Nova-Compute 服务正常的节点 计算节点服务 down 则被过滤
    RamFilter 过滤不满足内存需求的节点 计算节点 10GB 内存,ram_allocation_ratio=5 则认为有 50GB
    DiskFilter 过滤不满足磁盘需求的节点 disk_allocation_ratio=1(默认不超配)
    ComputeCapabilitiesFilter 按计算节点特性过滤 仅 x86_64 架构节点部署实例
    ImagePropertiesFilter 按镜像属性过滤 镜像指定 hypervisor_type=kvm,仅 KVM 节点可部署
    ServerGroupAntiAffinityFilter 实例分散部署 3 个实例部署到 3 个不同计算节点
    ServerGroupAffinityFilter 实例集中部署 3 个实例部署到同一计算节点
4. 实例操作差异
操作 特点 适用场景
软重启(soft reboot) 重启操作系统,实例保持运行 系统故障修复,无需中断实例生命周期
硬重启(hard reboot) 关机后开机,实例状态重置 实例卡死场景
暂停(Pause) 状态保存到内存,恢复快 短时间暂停,需保留内存数据
挂起(Suspend) 状态保存到磁盘,释放内存 长时间暂停,节省资源
废弃(Shelve) 转为镜像保存到 Glance,删除实例 长期不用且需保留状态
锁定(Lock) 防止意外删除 重要实例保护,管理员可强制删除
5.创建虚拟机详细流程
  1. 用户通过 Dashboard/CLI 向 Keystone 申请授权。
  2. Keystone 生成 auth-token 返回。
  3. 向 Nova-API 发送 boot instance 请求(携带 Token)。
  4. Nova-API 向 Keystone 校验 Token。
  5. Keystone 返回认证结果与角色。
  6. Nova-API 与数据库通信。
  7. 初始化虚拟机数据库记录。
  8. Nova-API 向 Nova-Scheduler 请求资源。
  9. Nova-Scheduler 监听消息队列获取请求。
  10. Nova-Scheduler 查询数据库计算资源,执行调度算法。
  11. 更新数据库中虚拟机的物理主机信息。
  12. Nova-Scheduler 向 Nova-Compute 发送创建消息。
  13. Nova-Compute 从消息队列获取请求。
  14. Nova-Compute 向 Nova-Conductor 请求虚拟机信息。
  15. Nova-Conductor 接收消息。
  16. Nova-Conductor 查询虚拟机信息。
  17. Nova-Conductor 从数据库获取信息。
  18. Nova-Conductor 发送信息到消息队列。
  19. Nova-Compute 获取虚拟机信息。
  20. Nova-Compute 向 Glance-API 请求镜像(携带 Token)。
  21. Glance-API 校验 Token。
  22. 返回镜像 URL 给 Nova-Compute。
  23. Nova-Compute 向 Neutron-Server 请求网络(携带 Token)。
  24. Neutron-Server 校验 Token。
  25. 返回网络信息给 Nova-Compute。
  26. Nova-Compute 向 Cinder-API 请求存储(携带 Token)。
  27. Cinder-API 校验 Token。
  28. 返回存储信息给 Nova-Compute。
  29. Nova-Compute 调用虚拟化驱动创建虚拟机。
6. RabbitMQ 监控
(1)启用管理插件
bash 复制代码
rabbitmq-plugins enable rabbitmq_management
# 输出:started 3 plugins (rabbitmq_management、rabbitmq_management_agent、rabbitmq_web_dispatch)
(2)创建管理员用户
bash 复制代码
rabbitmqctl add_user user_admin passwd_admin
rabbitmqctl set_user_tags user_admin administrator
rabbitmqctl set_permissions -p / user_admin ".*" ".*" ".*"

四、块存储管理(Cinder)

Cinder作用

Cinder在虚拟机与具体存储设备之间引入了一层"逻辑存储卷"的抽象,Cinder本身不是一种存储技术,并

没有实现对块设备的实际管理和服务

Cinder只是提供了一个中间的抽象层,为后端不同的存储技术,提供了统一的接口

不同的块设备服务厂商在Cinder中以驱动的形式实现上述接口与OpenStack进行整合

1. 存储类型详解

类型 生命周期 存储对象 访问方式 适用场景
临时存储(Ephemeral) 随虚拟机终止释放 文件 本地磁盘 临时数据
块存储(Cinder) 独立于虚拟机 磁盘(逻辑卷) iSCSI/SAN 数据库、持久化数据
对象存储(Swift) 永久存储 对象 REST API 备份、非结构化数据
文件存储(Manila) 永久存储 文件 NFS/CIFS 多节点共享访问

2. 核心架构与组件

(1)架构组件
组件 功能 进程示例
Cinder-Client CLI 接口 命令行工具(openstack volume 系列命令)
Cinder-API 对外提供 REST API 进程:cinder-api(控制节点运行)
Cinder-Scheduler 卷调度 进程:cinder-scheduler(控制节点运行)
Cinder-Volume 执行卷操作,对接后端 进程:cinder-volume(存储节点运行)
Cinder-Backup 卷备份 进程:cinder-backup(支持 Swift/Ceph 后端)
数据库 存储卷、快照、备份元数据 支持 MySQL、PG、MSSQL
(2)默认后端 LVM 架构
  • 关系:物理磁盘 → 物理卷(PV)→ 卷组(VG)→ 逻辑卷(LV)
  • 实验环境配置(answers.txt):
ini 复制代码
CONFIG_CINDER_BACKEND=lvm
CONFIG_CINDER_VOLUMES_CREATE=y
CONFIG_CINDER_VOLUME_NAME=cinder-volumes
CONFIG_CINDER_VOLUMES_SIZE=20G
  • 查看卷组:
bash 复制代码
vgdisplay cinder-volumes
# 输出:VG Size <20.60 GiB,Alloc PE / Size 5020 / <19.61 GiB,Free PE / Size 253 / 1012.00 MiB

3. 关键配置与操作

(1)核心配置(/etc/cinder/cinder.conf)
ini 复制代码
# 调度器过滤器
scheduler_default_filters=AvailabilityZoneFilter,CapacityFilter,CapabilitiesFilter
# 可用域配置
storage_availability_zone=az1
default_availability_zone=nova
# LVM 后端配置
[lvm]
volume_backend_name=lvm
volume_driver=cinder.volume.drivers.lvm.LVMVolumeDriver
target_ip_address=192.168.108.10
target_helper=lioadm
volume_group=cinder-volumes
volumes_dir=/var/lib/cinder/volumes
(2)卷操作实验(AZ 过滤器)
bash 复制代码
# 配置 storage_availability_zone=az1,default_availability_zone=nova
# 创建卷不指定 AZ(默认 nova)→ 失败
openstack volume create --size 1 volume1
# 输出:Availability zone 'nova' is invalid. (HTTP 400)
# 创建卷指定 AZ=az2 → 失败
openstack volume create --size 1 --availability-zone az2 volume1
# 输出:Availability zone 'az2' is invalid. (HTTP 400)
# 创建卷指定 AZ=az1 → 成功
openstack volume create --size 1 --availability-zone az1 volume1
# 输出:| id | 43746d03-a0c5-4232-8f1b-6023ffe83545 | name | volume1 | status | creating |
(3)卷挂载流程
  1. Nova 调用 Cinder API,传递主机信息(hostname、iSCSI initiator name)。
  2. Cinder API 将信息传递给 Cinder-Volume。
  3. Cinder-Volume 调用驱动,授权主机访问卷,返回连接信息(iSCSI iqn、portal)。
  4. Nova 通过 brick 模块识别磁盘设备。
  5. Nova 通知 Cinder 挂载完成。
  6. Nova 将设备信息传递给 Hypervisor,映射到虚拟机。

4. 后端驱动支持

  • 路径:/usr/lib/python3.6/site-packages/cinder/volume/drivers
  • 支持驱动:LVM、SAN、Ceph、EMC、华为、IBM、NetApp 等。

五、对象存储管理(Swift)

1. 核心特性与存储结构

(1)核心特性
  • 无中心架构,高可用、最终一致性。
  • 支持海量非结构化数据(虚拟机镜像、备份、图片)。
  • 存储结构:Account(账户)→ Container(容器)→ Object(对象)。
  • 关键组件:Proxy Server(代理服务)、Ring(映射虚拟节点与物理设备)、Storage Node(存储节点)。
(2)Ring 类型
  • Account Ring:管理账户与物理设备映射。
  • Container Ring:管理容器与物理设备映射。
  • Object Ring:管理对象与物理设备映射。

2. 实验完整步骤(控制节点)

(1)磁盘准备
  1. 磁盘分区(新增 20GB 磁盘 /dev/sdb):
bash 复制代码
fdisk /dev/sdb
# n→p→1→回车→+10G→n→p→2→回车→回车→w
  1. 格式化分区为 XFS:
bash 复制代码
mkfs.xfs /dev/sdb1
mkfs.xfs /dev/sdb2
  1. 创建挂载目录并挂载:
bash 复制代码
mkdir /srv/node/obs1 /srv/node/obs2
# 修改 /etc/fstab
echo "/dev/sdb1 /srv/node/obs1 xfs defaults 0 0" >> /etc/fstab
echo "/dev/sdb2 /srv/node/obs2 xfs defaults 0 0" >> /etc/fstab
mount -a
systemctl daemon-reload
  1. 修改权限:
bash 复制代码
chown swift:swift /srv/node/obs1 /srv/node/obs2
(2)创建并配置 Ring
  1. 创建 Ring(分区幂 12,副本数 2,最小修改间隔 1 小时):
bash 复制代码
cd /etc/swift/
swift-ring-builder account.builder create 12 2 1
swift-ring-builder container.builder create 12 2 1
swift-ring-builder object.builder create 12 2 1
  1. 添加节点映射(获取各服务端口):
bash 复制代码
# 查看端口
cat /etc/swift/account-server.conf | grep bind_port  # 6002
cat /etc/swift/container-server.conf | grep bind_port  # 6001
cat /etc/swift/object-server.conf | grep bind_port  # 6000
# 添加节点
swift-ring-builder account.builder add z1-192.168.108.10:6002/obs1 100
swift-ring-builder account.builder add z2-192.168.108.10:6002/obs2 100
swift-ring-builder container.builder add z1-192.168.108.10:6001/obs1 100
swift-ring-builder container.builder add z2-192.168.108.10:6001/obs2 100
swift-ring-builder object.builder add z1-192.168.108.10:6000/obs1 100
swift-ring-builder object.builder add z2-192.168.108.10:6000/obs2 100
  1. 平衡 Ring:
bash 复制代码
swift-ring-builder account.builder rebalance
swift-ring-builder container.builder rebalance
swift-ring-builder object.builder rebalance
# 输出:Reassigned 8192 (200.00%) partitions. Balance is now 0.00.
(3)测试验证
  1. 创建容器:
bash 复制代码
openstack container create test
  1. 上传文件:
bash 复制代码
openstack object create test cirros-0.5.2-x86_64-disk.img
  1. 验证副本(obs1 和 obs2 各存 1 个):
bash 复制代码
find /srv/node -name *.data
# 输出:
# /srv/node/obs1/objects/317/0fe/13d34c83bb5eed122321759e90f6e0fe/1727591964.07735.data
# /srv/node/obs2/objects/317/0fe/13d34c83bb5eed122321759e90f6e0fe/1727591964.07735.data

3. 华为 OBS 体验步骤

(1)下载并安装 OBS Browser+
  • 下载地址:华为云官网(支持 Windows x32/x64、Mac)。
  • 安装:双击安装包,选择 "Only for me" 或 "Anyone who uses this computer"。
(2)登录 OBS
  1. 登录华为云控制台,创建访问密钥(Access Key ID + Secret Access Key)。
  2. 打开 OBS Browser+,选择 AK 方式登录:
    • 账号名:华为云账号。
    • Access Key ID:控制台获取。
    • Secret Access Key:控制台获取。
    • 访问路径:默认。
(3)创建桶并上传文件
  1. 点击 "创建桶":
    • 区域:华北 - 北京四。
    • 存储类别:标准存储。
    • 桶 ACL:私有。
    • 桶名称:gqdhahahha。
  2. 上传文件:
    • 点击 "上传",选择本地文件(如 23 级网工专业见习.pdf)。
    • 存储类别:标准存储。
    • 点击 "确定",上传完成后查看桶内对象。

六、编排管理(Heat)

1. 核心组件与架构

(1)组件详情
组件 功能 进程示例
Heat-API 提供 OpenStack 原生 REST API 进程:heat-api
Heat-API-CFN 提供 AWS CloudFormation 兼容 API 进程:heat-api-cfn
Heat-Engine 核心组件,解析模板、调度资源 进程:heat-engine
(2)架构交互
  • 用户→Horizon/CLI→Heat-API/Heat-API-CFN→消息队列→Heat-Engine→Nova/Neutron/Glance/Cinder→资源创建。

2. 模板结构与示例

(1)模板必选 / 可选字段
字段 类型 描述
heat_template_version 必选 模板版本(如 2018-08-31)
resources 必选 定义资源(实例、网络、卷等)
description 可选 模板描述
parameters 可选 输入参数(如镜像 ID、网络 ID)
outputs 可选 输出参数(如实例私钥)
conditions 可选 条件判断
(2)模板示例(heat.txt)
yaml 复制代码
heat_template_version: 2018-08-31
description: Simple template to deploy a stack with one virtual machine instances
parameters:
  image_name_1:
    type: string
    label: Image ID
    description: Specify an image name for instance1
    default: 732c9cee-2652-4a4e-8c09-19745d6e15b5  # 替换为实际镜像 ID
  public_net:
    type: string
    label: Network ID
    description: Network to be used for the compute instance
    default: a6e27f03-e762-4c46-a997-a7a6848d5849  # 替换为实际外网 ID
resources:
  mykey:
    type: OS::Nova::KeyPair
    properties:
      save_private_key: true
      name: mykey
  web_secgroup:
    type: OS::Neutron::SecurityGroup
    properties:
      rules:
        - protocol: tcp
          remote_ip_prefix: 0.0.0.0/0
          port_range_min: 22
          port_range_max: 22
        - protocol: icmp
  private_net:
    type: OS::Neutron::Net
    properties:
      name: private_net
  private_subnet:
    type: OS::Neutron::Subnet
    properties:
      network_id: { get_resource: private_net }
      cidr: "192.168.99.0/24"
      ip_version: 4
  vrouter:
    type: OS::Neutron::Router
    properties:
      external_gateway_info:
        network: { get_param: public_net }
  vrouter_interface:
    type: OS::Neutron::RouterInterface
    properties:
      router_id: { get_resource: vrouter }
      subnet_id: { get_resource: private_subnet }
  instance_port:
    type: OS::Neutron::Port
    properties:
      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::FloatingIP
    properties:
      floating_network_id: { get_param: public_net }
  association:
    type: OS::Neutron::FloatingIPAssociation
    properties:
      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  # 替换为实际实例类型名称
      networks:
        - port: { get_resource: instance_port }
outputs:
  private_key:
    description: Private key
    value: { get_attr: [ mykey, private_key ] }

3. Web 实验步骤

(1)前期准备
  1. 创建实例类型:
    • 名称:Flavor_web,VCPU:1,内存:128MB,根磁盘:1GB。
  2. 创建网络:
    • 外部网络:public_net(flat 类型,子网 192.168.108.0/24)。
  3. 创建镜像:
    • 名称:Img_web,文件:cirros-0.5.2-x86_64-disk.img,格式:QCOW2。
(2)创建堆栈
  1. 上传模板:Horizon→堆栈→创建堆栈→选择 heat.txt 文件。
  2. 配置参数:
    • 堆栈名称:stack1。
    • Image ID:732c9cee-2652-4a4e-8c09-19745d6e15b5。
    • Network ID:a6e27f03-e762-4c46-a997-a7a6848d5849。
  3. 启动堆栈:点击 "启动",等待创建完成。
(3)验证结果
  • 查看输出参数:获取 mykey 的私钥,用于登录实例。
  • 查看资源:自动创建 private_net、vrouter、instance1 等资源。

七、网络管理(Neutron)

1. 基础概念与虚拟化技术

(1)物理网络 vs 虚拟网络
对比项 物理网络 虚拟网络
交换机 物理交换机(Cisco、华为) 虚拟交换机(Linux Bridge、OVS、OVN)
网卡 物理网卡(NIC) 虚拟网卡(vNIC)
连接方式 网线 虚拟接口(TAP/TUN/VETH)
适用场景 跨硬件通信 虚拟机 / 容器通信
(2)Linux 网络虚拟化技术
① 网卡虚拟化
  • TAP:模拟二层设备,处理以太网帧(如虚拟机网卡)。
  • TUN:模拟三层设备,处理 IP 包(如 VPN 通信)。
  • VETH Pair:成对出现,一端发数据另一端接收(连接 Linux Bridge 与 OVS)。
② 交换机虚拟化
  • Linux Bridge:
    • 功能:二层转发,类似物理交换机。
    • 命令:brctl addbr br0(创建网桥)、brctl addif br0 eth0(添加接口)。
    • 适用场景:小规模、主机内通信。
  • Open vSwitch(OVS):
    • 功能:支持 VLAN、隧道技术(VXLAN/GRE)、流量监控。
    • 命令:ovs-vsctl add-br br0(创建网桥)、ovs-vsctl add-port br0 eth0(添加接口)、ovs-vsctl show(查看配置)。
    • 适用场景:大规模、多主机通信(华为 FusionCompute 采用)。
③ 网络隔离:Network Namespace
  • 功能:隔离网络协议栈,不同 Namespace 有独立的网卡、IP、路由。
  • 命令:ip netns add ns1(创建)、ip netns exec ns1 ip a(执行命令)。

2. Neutron 架构与部署

(1)核心组件
组件 功能 部署位置
Neutron-Server 接收 API 请求,调用 Plugin 控制节点
Plugin 维护网络状态,调用 Agent 控制节点(ML2 为首选 Plugin)
Agent 实现网络功能 计算节点 / 网络节点(OVS Agent、L3 Agent、DHCP Agent)
Database 存储网络元数据 控制节点(MySQL)
Message Queue 组件间通信 控制节点(RabbitMQ)
(2)物理部署方案(两种)
方案 1:控制节点 + 计算节点
  • 控制节点:Neutron-Server、Core Plugin Agent、Service Plugin Agent。
  • 计算节点:Core Plugin Agent。
  • 适用场景:小规模 OpenStack 环境。
方案 2:控制节点 + 网络节点 + 计算节点
  • 控制节点:Neutron-Server。
  • 网络节点:Core Plugin Agent、Service Plugin Agent(L3、DHCP、Metadata Agent)。
  • 计算节点:Core Plugin Agent。
  • 适用场景:大规模环境,网络功能独立部署,负载均衡。

3. ML2 Plugin 详解(Modular Layer 2)

(1)核心作用
  • 解决传统 Plugin 问题:① 仅支持一种网络 provider;② 重复代码多。
  • 支持多种网络类型(type driver)和网络机制(mechanism driver)。
(2)Type Driver(网络类型驱动)
  • 支持类型:local、flat、vlan、vxlan、geneve。
  • 功能:维护网络类型状态,执行验证(如 VLAN ID 合法性)。
(3)Mechanism Driver(网络机制驱动)
  • 类型:
    • Agent-based:Linux Bridge、OVS。
    • Controller-based:OpenDaylight、VMware NSX。
    • 物理交换机:Cisco Nexus、Arista。
  • 功能:将网络状态映射到物理 / 虚拟设备(如 OVS 配置 VLAN)。
(4)示例:VLAN 网络创建流程
  1. VLAN Type Driver:保存网络信息(名称、VLAN ID=100)到数据库。
  2. OVS Mechanism Driver:通知各节点 OVS Agent。
  3. OVS Agent:在物理网卡创建 VLAN 设备(eth0.100),桥接到 br-int。

4. 网络类型与实验

(1)网络类型详情
类型 特点 适用场景
local 仅本机实例通信,与外部隔离 单机测试
flat 无 VLAN 标签,跨节点通信 简单网络环境
vlan 基于 802.1q 标签,二层隔离 大规模部署,严格隔离
vxlan Overlay 网络,UDP 封装 突破物理网络限制,跨网段通信
gre Overlay 网络,IP 封装 跨数据中心通信
(2)OVS 网络实验(本地网络)
  1. 配置 ML2:修改 /etc/neutron/plugins/ml2/ml2_conf.ini
ini 复制代码
[ml2]
type_drivers=local,flat,vlan,vxlan,geneve
mechanism_drivers=openvswitch
[ml2_type_flat]
flat_networks=datacenter
  1. 创建 local 网络:
    • 名称:first_local_net,子网:172.16.1.0/24,激活 DHCP。
  2. 部署实例:将 cirros-vm1、cirros-vm2 部署到该网络。
  3. 连通性测试:
    • 同一网络:cirros-vm1(172.16.1.3)可 ping 通 cirros-vm2(172.16.1.4)。
    • 不同网络:cirros-vm3(second_local_net,172.16.1.102)无法 ping 通 cirros-vm1(VLAN 标签隔离)。
(3)OVN 网络实验(Geneve 网络)
  1. 配置 ML2:
ini 复制代码
[ml2]
type_drivers=geneve,flat
tenant_network_types=geneve
mechanism_drivers=ovn
[ml2_type_geneve]
max_header_size=38
vni_ranges=10:100
[ovn]
ovn_nb_connection=tcp:192.168.108.10:6641
ovn_sb_connection=tcp:192.168.108.10:6642
  1. 创建网络:
    • 外部网络:waiwang(flat 类型,192.168.108.0/24)。
    • 内部网络:neiwang-1(geneve 类型,192.168.11.0/24)。
  2. 创建路由器:router1,绑定外部网络和内部子网。
  3. 部署实例:vm-1、vm-2 部署到 neiwang-1,可 ping 通外网(www.qq.com)。

5. 高级功能配置

(1)安全组规则
  • 添加 SSH 规则:
bash 复制代码
openstack security group rule add --direction ingress --protocol tcp --port 22 --remote-ip 0.0.0.0/0 default
  • 添加 ICMP 规则(允许 ping):
bash 复制代码
openstack security group rule add --direction ingress --protocol icmp --remote-ip 0.0.0.0/0 default
(2)浮动 IP 配置
  1. 分配浮动 IP:
bash 复制代码
openstack floating ip create waiwang
# 输出:| id | 192.168.108.103 | floating_network_id | waiwang 的 ID |
  1. 绑定实例:
bash 复制代码
openstack floating ip set --port 实例端口 ID 192.168.108.103
  1. 外部访问:通过 ssh -i mykey.pem cirros@192.168.108.103 登录实例。

6. 故障排查

  • 日志路径:/var/log/neutron/(neutron-server.log、openvswitch-agent.log)。

  • 常见问题:

    • 实例无法上网→检查路由器是否绑定外部网络、安全组是否允许出站流量。

    • 浮动 IP 无法访问→检查端口绑定、安全组规则、NAT 配置。

补充

Fuel-Openstack 简介

Fuel 是 OpenStack 的开源部署和管理工具。它是作为 OpenStack 社区工作开发的,它为OpenStack 相

关的社区项目和插件的部署和管理提供了一种直观的 GUI 驱动体验。

Fuel 带来了消费者级的简单,以简化和加快耗时、往往复杂容易出错的过程部署以及测试和维护各种配

置风格的 OpenStack 的规模。与其他特定于平台的部署或管理工具不同, FUSE是一个上游 OpenStack

项目,专注于 OpenStack 和一系列第三方选项的自动化部署和测试,因此它不会受到硬捆绑或供应商锁

定的影响。

2013 年,该安装程序在戴尔(C 6220&R 320)、惠普(DL 380)、超级微(6027 TR-HTRF)、联想

ThinkServer(RD 530)和思科 UCS-C 等平台上进行了多次部署测试。

主要特点是:

  • 硬件发现
  • UI 中的硬件配置(网络和磁盘分区)
  • 能够拆分和管理多个 OpenStack 集群
  • 支持非 HA 和 HA OpenStack 部署配置
  • 部署前检查和网络验证
  • 部署后检查和运行一组测试以验证已部署的 OpenStack。
  • 通过 ui 实时查看日志
  • 对 CentOS 和 Ubuntu 的支持,它也可以扩展到支持其他发行版。
  • 支持多个 OpenStack 发行版

Mirantis 使用燃料作为其 OpenStack 相关解决方案的一部分,他们是主要贡献者

Fuel结构

Fuel

不是单一的。它由几个独立的组成部分组成。其中一些组件是燃料专用组件,而另一些组件是第三方服

务,如 Cobler、 Puppet、 M8.4 等。一些组件可以与燃料分开使用,无需任何修改,有些将需要很少的

调整。
UI 是用 JavaScript 编写的单页应用程序。它在底层使用引导和主干框架。检查视频它演示了4.0 版燃料的

UI 和基本功能(这是 Mirantis 发行版,它仅与 Mirantis 徽标不同)。

Nailgun 是燃料项目的核心。像其他 OpenStack 项目一样, Nailgun 是用 Python 编程语言编写的。它

实现了 RESTAPI 以及部署数据管理。它管理磁盘卷、配置数据、网络配置数据和

任何其他特定于环境的数据,这些数据是成功部署所必需的。它需要编制逻辑来构建按正确顺序提供和

部署的指令。 Nailgun 使用 SQL 数据库存储其数据,并使用 AMQP 服务与工人进行交互。 Fuel CLI 提

供比 UI 更可能的操作。

Astute 是它的另一个重要组成部分是代表 Nailgun 的工人,其功能是根据 Nailgun 提供的指令执行某些操作。

事实上, Astute 只不过是一个层,它封装了与各种服务(如 Cobler、 Puppet、shell 脚本等)交互的所有

细节,并为这些服务提供了通用的异步接口。根据我们需要做的事情,我们可以直接通过服务的本机协

议来管理服务(例如, XMLRPC 协议是用于 Cobler 的),或者我们可以使用 MgroupAgent 来执行特定的

任务,比如在远程节点上启动"傀儡应用"或运行脚本。通过 AMQP 精明地与 Nailgun 交换数据。

Cobbler

目前用作供应服务。现在有一个 POC 可以使用讽刺的方式,并且正在实施一个生产版本。

Puppet

是目前唯一的部署服务。可以创建 MCollection 代理来管理其他配置管理框架,如Chef、 SaltStack 等。

MCollective agents

允许我们执行特定的任务,如硬盘清除,网络连接探测等。

OSTF (OpenStack Testing Framework, or Health Check) 是一个单独的组件,无需 fuel 就可以轻松地删

除和重用。它实现了 OpenStack 的部署后验证。它的主要目标是验证最大的功能,花费最少的时间。

enStack。

  • 通过 ui 实时查看日志
  • 对 CentOS 和 Ubuntu 的支持,它也可以扩展到支持其他发行版。
  • 支持多个 OpenStack 发行版

Mirantis 使用燃料作为其 OpenStack 相关解决方案的一部分,他们是主要贡献者

Fuel结构

Fuel

不是单一的。它由几个独立的组成部分组成。其中一些组件是燃料专用组件,而另一些组件是第三方服

务,如 Cobler、 Puppet、 M8.4 等。一些组件可以与燃料分开使用,无需任何修改,有些将需要很少的

调整。
UI 是用 JavaScript 编写的单页应用程序。它在底层使用引导和主干框架。检查视频它演示了4.0 版燃料的

UI 和基本功能(这是 Mirantis 发行版,它仅与 Mirantis 徽标不同)。

Nailgun 是燃料项目的核心。像其他 OpenStack 项目一样, Nailgun 是用 Python 编程语言编写的。它

实现了 RESTAPI 以及部署数据管理。它管理磁盘卷、配置数据、网络配置数据和

任何其他特定于环境的数据,这些数据是成功部署所必需的。它需要编制逻辑来构建按正确顺序提供和

部署的指令。 Nailgun 使用 SQL 数据库存储其数据,并使用 AMQP 服务与工人进行交互。 Fuel CLI 提

供比 UI 更可能的操作。

Astute 是它的另一个重要组成部分是代表 Nailgun 的工人,其功能是根据 Nailgun 提供的指令执行某些操作。

事实上, Astute 只不过是一个层,它封装了与各种服务(如 Cobler、 Puppet、shell 脚本等)交互的所有

细节,并为这些服务提供了通用的异步接口。根据我们需要做的事情,我们可以直接通过服务的本机协

议来管理服务(例如, XMLRPC 协议是用于 Cobler 的),或者我们可以使用 MgroupAgent 来执行特定的

任务,比如在远程节点上启动"傀儡应用"或运行脚本。通过 AMQP 精明地与 Nailgun 交换数据。

Cobbler

目前用作供应服务。现在有一个 POC 可以使用讽刺的方式,并且正在实施一个生产版本。

Puppet

是目前唯一的部署服务。可以创建 MCollection 代理来管理其他配置管理框架,如Chef、 SaltStack 等。

MCollective agents

允许我们执行特定的任务,如硬盘清除,网络连接探测等。

OSTF (OpenStack Testing Framework, or Health Check) 是一个单独的组件,无需 fuel 就可以轻松地删

除和重用。它实现了 OpenStack 的部署后验证。它的主要目标是验证最大的功能,花费最少的时间。

相关推荐
盐焗西兰花2 小时前
鸿蒙学习实战之路-Core Vision Kit人脸检测实现指南
android·学习·harmonyos
喜欢吃燃面2 小时前
算法竞赛中的数据结构:图
开发语言·数据结构·c++·学习·算法
polarislove02142 小时前
9.1[ 定时器 ] 时基单元-嵌入式铁头山羊STM32笔记
笔记·stm32·嵌入式硬件
咕噜企业分发小米2 小时前
阿里云Milvus如何评估向量检索效果?
阿里云·云计算·milvus
HyperAI超神经2 小时前
【vLLM 学习】Profiling
人工智能·深度学习·学习·cpu·gpu·编程语言·vllm
三品吉他手会点灯2 小时前
STM32F103 学习笔记-21-串口通信(第1节)-串口通信协议简介
笔记·stm32·单片机·嵌入式硬件·学习
舰长1152 小时前
ubuntu挂载盘报错
linux·运维·ubuntu
风之子npu2 小时前
AXI 原子访问
arm开发·笔记·学习
YJlio2 小时前
Disk2vhd 学习笔记(13.1):在线 VHD 冷备份与迁移实战
服务器·笔记·学习