精华内容
下载资源
问答
  • OpenStack组件Nova.zip

    2019-07-19 15:53:13
    Nova 是 OpenStack 组件,它提供一个云计算网络控制器,支持大量的虚拟机技术,包括 KVM、Xen、LXC、VMware 等。除了本地的 API,它还兼容常遇到的 Amazon EC2 和 S3 APIs。Nova 主要由一组 Python 守护进程组成,...
  • Openstack组件卸载命令

    2015-10-07 17:24:40
    Openstack组件卸载命令,跟上面的Openstack实验相对应的卸载文档。http://download.csdn.net/detail/u014028392/9161039
  • 主要给大家介绍的是OpenStack 组件的更新教程,更新而不是升级,小伙伴们要注意哦,下面我们来详细探讨下吧
  • 这里写目录标题前言一、...nova和swift是openstack最早的两个组件,nova分为控制节点和计算节点,计算节点通过nova computer进行虚拟机创建,通过libvirt调用kvm创建虚拟机,nova之间通信通过rabbitMQ队列进行通信 一

    前言

    nova和swift是openstack最早的两个组件,nova分为控制节点和计算节点,计算节点通过nova computer进行虚拟机创建,通过libvirt调用kvm创建虚拟机,nova之间通信通过rabbitMQ队列进行通信

    一、Nova概述

    1.1 nova定义

    Nova(OpenStack Compute Service)是 OpenStack 最核心的服务,负责维护和管理云环境的计算资源,同时管理虚拟机生命周期。

    1.2、系统架构图介绍

    在这里插入图片描述

    • DB:用于数据存储的sql数据库。
    • API:用于接收HTTP请求、转换命令、通过消息队列或HTTP与其他组件通信的nova组件。
    • Scheduler:用于决定哪台计算节点承载计算实例的nova调度器。
    • Network:管理IP转发、网桥或虚拟局域网的nova网络组件。
    • Compute:管理虚拟机管理器与虚拟机之间通信的nova计算组件。
    • Conductor:处理需要协调(构建虚拟机或调整虚拟机大小)的请求,或者处理对象转换

    二、nova内部组件的介绍

    2.1、nova-api

    • AsPI是客户访问nova的http接口,它由nova-api服务实现,nova-api服务接受和响应来自最终用户计算api的请求。作为openstack对外服务的最主要接口,nova-api提供了一个集中的可以查询所有api的端点。

    • 所有对nova的请求都首先由nova-api处理。API提供REST 标准调用服务,便于与第三方系统集成。

    • 最终用户不会直接该送RESTful API请求而是通过openstack命令行、dashbord和其他需要跟nova的组件使用这些API。

    • NOva-api对接受到的HTTP API请求做以下处理:
      (1)检查客户端传入的参数是否合法有效
      (2)调用nova其他服务来处理客户端HTTP请求
      (3)格式化nova其他子服务返回结果并返回给客户端

    • nova-api是外部访问并使用nova提供的各种服务的唯一途径,也是客户端和nova之间的中间层。

    2.2、Scheduler

    Scheduler可译为调度器,由nova-scheduler服务实现,主要解决的是如何选择在哪个计算节点上启动实例的问题。它可以应用多种规则,如果考虑内存使用率、cpu负载率、cpu架构(Intel/amd)等多种因素,根据一定的算法,确定虚拟机实例能够运行在哪一台计算节点。NOva-scherduler服务会从队列中接受虚拟机实例的请求,通过读取数据库的内容,从可用资源池中选择最合适的计算节点来创建新的虚拟机实例

    2.2.1 调度器的类型

    (1)随机调度器(chance scheduler):从所有正常运行nova-compute服务的节点中随机选择
    (2)过滤器调度器(filter scheduler):根据指定的过滤条件以及权重选择最佳的计算节点。Filter又称为筛选器
    (3) 缓存调度器(caching scheduler):可看作随机调度器的一种特殊类型,在随机调度的基础上将主机资源信息缓存在本地内存中,然后通过后台的定时任务定时从数据库中获取最新的主机资源信息

    • 过滤器调度器过程

    通过指定的过滤器选择满足条件的计算节点,比如内存使用小于50%,可以使用多个过滤器依次进行过滤
    对过滤之后的主机进行权重计算并排序,选择最优的计算节点来创建虚拟机实例

    2.2.2 过滤器类型

    • 再审过滤器(RetryFilter)
      主要作用是过滤掉之前已经调度过的节点(类比污点)。如A、B、C都通过了过滤,A权重最大被选中执行操作,由于某种原因,操作在A上失败了。Nova-filter 将重新执行过滤操作,再审过滤器直接过滤掉A,以免再次失败。

    • 可用区域过滤器(AvailabilityZoneFilter)
      主要作用是提供容灾性,并提供隔离服务,可以将计算节点划分到不同的可用区域中。Openstack默认有一个命名为nova的可用区域,所有计算节点一开始都在其中。用户可以根据需要创建自己的一个可用区域。创建实例时,需要指定将实例部署在那个可用区域中。通过可用区过滤器,将不属于指定可用区的计算节点过滤掉。

    • 内存过滤器(RamFilter)
      根据可用内存来调度虚拟机创建,将不能满足实例类型内存需求的计算节点过滤掉,但为了提高系统资源利用率, Openstack在计算节点的可用内存允许超过实际内存大小,可临时突破上限,超过的程度是通过nova.conf配置文件中ram_ allocation_ ratio参数来控制的, 默认值是1.5。(但这只是临时的)
      Vi /etc/nova/nova . conf
      Ram_ allocation_ ratio=1 .5

    • 硬盘过滤器(DiskFilter)
      根据磁盘空间来调度虚拟机创建,将不能满足类型磁盘需求的计算节点过滤掉。磁盘同样允许超量,超量值可修改nova.conf中disk_ allocation_ ratio参数控制,默认值是1.0,(也是临时的)
      Vi /etc/nova/nova.conf
      disk_ allocation_ ratio=1.0

    • 核心过滤器(CoreFilter)
      根据可用CPU核心来调度虚拟机创建,将不能满足实例类型vCPU需求的计算节点过滤掉。vCPU也允许超量,超量值是通过修改nova.conf中cpu_ allocation_ratio参数控制,默认值是16。
      Vi /etc/nova/nova. conf
      cpu_allocation_ ratio=16.0

    • 计算过滤器(ComputeFilter)
      保证只有nova-compute服务正常工作的计算节点才能被nova-scheduler调度,它是必选的过滤器。

    • 镜像属性过滤器(ImagePropertiesFilter)
      根据所选镜像的属性来筛选匹配的计算节点,通过元数据来指定其属性。如希望镜像只运行在KVM的Hypervisor上,可以通过Hypervisor Type属性来指定。

    • 服务器组反亲和性过滤器
      要求尽量将实例分散部署到不同的节点上,设置一个服务器组,组内的实例会通过此过滤器部署到不同的计算节点。适用于需要分开部署的实例。
      服务器组亲和性过滤器
      此服务器组内的实例,会通过此过滤器,被部署在同一计算节点上,适用于需要位于相同节点的实例服务。
      在这里插入图片描述

    • 调度器与DB的交互过程
      scheduler组件决定的是虚拟机实例部署在哪台计算节点上并调度,在调度之前,会先向数据库获取宿主机资源信息作为依据;之后可通过过滤器和权重选择最合适的节点调度,或者指定节点直接调度;计算节点的 libvirt 工具负责收集宿主机的虚拟化资源,根据已创建的实例再次统计资源,将资源信息更新到数据库中,整个更新资源信息的过程是周期性执行的,而不是实时的,所以存在一个问题,当刚创建完一个实例,随即又需要创建时,数据库还未来得及更新宿主机的最新状态,那么调度器依据的信息就不正确,有可能所选的节点资源并不够用,而导致调度失败。这同时也是缓存调度器的缺陷,无法实时获取租主机资源信息。我们可在调度完成时,直接将资源信息返回给数据库,更新数据库状态,解决这个问题。

    2.3、Nova-compute

    Nova-compute处理管理实例生命周期。他们通过Message Queue接收实例生命周期管理的请求,并承担操作工作。在一个典型生产环境的云部署中有一些compute workers。一个实例部署在哪个可用的compute worker上取决于调度算法。

    2.4、Rabbitmq

    OpenStack 节点之间通过消息队列使用AMQP(Advanced Message Queue Protocol)完成通信。Nova 通过异步调用请求响应,使用回调函数在收到响应时触发。因为使用了异步通信,不会有用户长时间卡在等待状态。这是有效的,因为许多API调用预期的行为都非常耗时,例如加载一个实例,或者上传一个镜像。

    2.5、Nova-conductor

    nova-conductor是nova-compute与数据库的中间件,nova-compute对数据库的CRUD操作都借由nova-conductor完成,nova-conductor通过rpc对外提供API服务。nova-conductor默认采用多进程运行,在不配置[conductor]worker的情况下,进程数会与服务器的逻辑CPU数一致。

    三、Nova的工作流程

    • 其他组件需要nova调用资源时,会先去keystone组件那拿到token令牌,然后拿着令牌给nova-api看,nova-api也要拿着token令牌去找keystone验证,验证成功后,nova内部的组件就开始各司其职了
    • nova-api要找到相应的组件来干活,之前外部所需要的资源信息就放入DB数据库中,然后通过消息队列来告诉nova-scheduler,让它来安排一下
    • 接着nova-scheduler通过自己的一系列调度算法(例如内存使用率,cpu负载率,,cpu架构等)来确定在那台计算节点上运行,看到DB数据库中所需要的资源信息,通过自己的调度算法,给nova-compute交代任务。
    • 因为nova-compute的处于云主机上,安全性不高,所以nova-compute不知道DB数据库在哪,然后nova-compute就让nova-conductor去DB查看来告诉自己相关消息。
    • 最后nova-compute看到DB数据库的信息,就拿着token令牌去其他openstack组件拿相应资源,(例如,glance镜像服务,cinder磁盘空间等)
    展开全文
  • Keystone安装列表Openstack组件部署—Overview和前期环境准备Openstack组建部署—EnvironmentofControllerNodeOpenstack组件部署—Keystone功能介绍与认证实现流程Openstack组件部署—KeystoneInstall&...
  • IaaS(基础架构即服务):OpenStack,CloudStack PaaS(平台即服务):Docker,Openshift SaaS(服务即服务):主要面对终端用户,可通过一个浏览器就可以实现使用任何应用,而无需安装。 DBaaS(DatabaseasaService) FWaaS...
  • https://www.cnblogs.com/panwenbin-logs/p/8445640.html
    展开全文
  • OpenStack组件——Keyston身份认证服务 一、Keystone身份服务简介 1.1、概述:主要功能 1.2、管理对象 1.3keystone认证过程⭐⭐⭐ 二、Keystone身份认证服务组件部署安装 2.1、创建数据库实例和数据库用户 2.2、安装...

    一、Keystone身份服务简介

    Keystone (openStack ldentity Service)是OpenStack中的一个独立的提供安全认证的模块,主要负责openstack用户的身份认证、令牌管理、提供访问资源的服务目录、以及基于用户角色的访问控制。

    Keystone类似一个服务总线,或者说是整个Openstack框架的注册表,其他服务通过keystone来注册其服务的Endpoint(服务访问的URL),任何服务之间相互的调用,需要经过Keystone的身份验证,来获得目标服务的Endpoint来找到目标服务。

    1.1、概述:主要功能

    身份认证:对用户进行身份认证,并对应权限范围
    用户授权(令牌管理权限):以token令牌的方式标识用户对应拥有的权限范围
    用户管理(寻址功能):提供用户访问资源的寻址功能(URL)
    服务目录:所有服务的交互/调用,均需要keyston进行认证

    1.2、管理对象

    ①User:指使用Openstack service的用户,nova glance(跑在OpenStack里面,是需要一个用户进行管理的)。
    ②Project(Tenant):可以理解为一个人或服务所拥有的资源集合。
    ③Role:用于划分权限,通过给User指定Role, 使User获得Role对应操作权限。
    ④Authentication:确定用户身份的过程。
    ⑤Token:是一个字符串表示,作为访问资源的令牌。Token包含了在指定范围和有效时间内可以被访问的资源。
    ⑥Credentials:用于确认用户身份的凭证,用户的用户名和密码,或者是用户名和API密钥,或者身份管理服务提供的认证令牌。
    ⑦Service Openstack service, 即Openstack中运行的组件服务。如nova、swift、glance、 neutron、 cinder等。
    ⑧Endpoint:一个可以通过网络来访问和定位某个Openstack service的地址,通常是一个URL(apache的api (位置点))。

    1.3keystone认证过程⭐⭐⭐

    ①user 登陆(keystone 认证)。
    ②user 进入控制台/命令行界面(位置点)。
    ③user 发起创建虚拟的请求(向keystone认证指引位置点)。
    ④请求到达nova组件(向keystone认证 )。
    ⑤nova会开始执行请求,并且调用创建实例所需要的glance、neutron等资源(向keystone
    认证,指引对应服务的位置点)。
    ⑥glance和neutron服务收到请求后(向keystone认证)才会给与nova对应的资源。
    ⑦nova拿到资源后,调用对应资源,创建实例,最后将创建结果返回给用户(成功? 失败? 原因)。

    二、Keystone身份认证服务组件部署安装

    基于openstack基本环境部署之后继续部署实验
    ①Keystone (apache)
    ②glance
    ③nova
    ④neutron
    ⑤cinder

    部署openstack组件时,需先行安装认证服务(keystone) ,而认证服务是使用Apache运行的,安装完成后才可以创建、管理账号,然后安装镜像服务(glance) 、计算服务(nova) 、网络服务(neutron)
    其中计算服务和网络服务分为管理端和客户端,所以需要在openstack的管理端安装计算服务和网络服务的管理端,在创建虚拟机的node节点上安装计算服务和网络服务的客户端,最后安装
    dashboard服务,openstack 各种组件的API都是通过apache运行的;
    openstack的管理端负责创建、管理虚拟机过程的调度
    通过openstack管理端创建虚拟机的相关数据最终都会记录到mysql(mariadb) 中; node节点没有权限往数据库中写数据,只有控制端有权限,并且node节点与控制端通讯是通过rabbitmq间接通讯,node节点会监听rabbitmq,控制端也会监听rabbitmq,控制端把创建虚拟机的指令发送到rabbitmq,由监听rabbitmq指定队列的node节点接收消息并创建虚拟机

    1、控制节点ct
    CPU:双核双线程-CPU虚拟化开启
    内存:8G	
    硬盘:300G
    双网卡:VM1-(局域网)192.168.100.10 NAT-192.168.153.227
    操作系统:Centos 7.6(1810)-最小化安装
    
    2、计算节点c1
    CPU:双核双线程-CPU虚拟化开启
    内存:8G	
    硬盘:300G
    双网卡:VM1(局域网)-192.168.100.20  NAT-192.168.153.228
    操作系统:Centos 7.6(1810)-最小化安装
    

    2.1、创建数据库实例和数据库用户

    [root@ct ~]#  mysql -u root -p123
    MariaDB [(none)]> create database keystone;
    MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'localhost'identified by 'keystone_dbpass';
    MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'%' identified by 'keystone_dbpass';
    MariaDB [(none)]> flush privileges;
    MariaDB [(none)]> exit
    

    2.2、安装、配置keystone、数据库、Apache

    1、安装keystone、httpd、mod_wsgi

    mod_wsgi包的作用是让apache能够代理python程序的组件;openstack的各个组件,包括API都是用python写的,但访问的是apache,apache会把请求转发给python去处理,这些包只安装在controler节点
    yum -y install openstack-keystone httpd mod_wsgi   在控制节点安装
    cd /etc/keystone/
    cp -a keystone.conf{,.bak}
    grep -Ev "^$|#" keystone.conf.bak >keystone.conf
    
    通过pymysql模块访问mysql,指定用户名密码、数据库的域名、数据库名 
    openstack-config --set /etc/keystone/keystone.conf database connection mysql+pymysql://keystone:keystone_dbpass@ct/keystone
    
    指定token的提供者;提供者就是keystone自己本身
    openstack-config --set /etc/keystone/keystone.conf token provider fernet
    Fernet:一种安全的消息传递格式
    

    2、初始化认证服务数据库

    su切换环境   -s:指定切换的环境
    su -s /bin/sh -c "keystone-manage db_sync" keystone    
    

    在这里插入图片描述

    3、初始化fernet 密钥存储库

    (以下命令会生成两个密钥,生成的密钥放于/etc/keystone/目录下,用于加密数据)

    keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
    keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
    

    4、配置bootstrap身份认证服务

    keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
    --bootstrap-admin-url http://ct:5000/v3/ \
    --bootstrap-internal-url http://ct:5000/v3/ \
    --bootstrap-public-url http://ct:5000/v3/ \
    --bootstrap-region-id RegionOne      指定一个区域名称
    

    ①初始化openstack,会把openstack的admin用户的信息写入到mysql的user表中,以及url等其他信息写入到mysql的相关表中;
    ②admin-url:是管理网(如公有云内部openstack管理网络),用于管理虚拟机的扩容或删除;如果共有网络和管理网是一个网络,则当业务量大时,会造成无法通过openstack的控制端扩容虚拟机,所以需要一个管理网;
    ③internal-url:是内部网络,进行数据传输,如虚拟机访问存储和数据库、zookeeper等中间件,这个网络是不能被外网访问的,只能用于企业内部访问
    ④public-url:是共有网络,可以给用户访问的(如公有云) #但是此环境没有这些网络,则公用同一个网络
    ⑤5000端口:是keystone提供认证的端口
    以下部分指的是openstack多节点的配置
    需要在haproxy服务器上添加一条listen
    各种网络的url需要指定controler节点的域名,一般是haproxy的vip的域名(高可用模式)

    5、配置Apache HTTP服务器

    echo “ServerName controller” >> /etc/httpd/conf/httpd.conf
    

    6、需要创建配置文件

    安装完mod_wsgi包后,会生成 wsgi-keystone.conf 这个文件,文件中配置了虚拟主机及监听了5000端口,mod_wsgi就是python的网关。

    ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
    

    7、开启服务

    systemctl enable httpd
    systemctl start httpd
    netstat -antp | grep httpd
    

    在这里插入图片描述

    8、配置管理员账户的环境变量

    这些环境变量是用于创建角色和项目使用,但是创建角色和项目需要有认证信息,所以通过环境变量声明用户名和密码等认证信息,欺骗openstack已经登录且通过认证,这样就可以创建项目和角色;也就是把admin用户的验证信息通过声明环境变量的方式传递给openstack进行验证,实现针对于openstack的非交互式操作。

    vim ~/.bashrc
    export OS_USERNAME=admin       控制台登陆用户名
    export OS_PASSWORD=ADMIN_PASS  控制台登陆密码
    export OS_PROJECT_NAME=admin
    export OS_USER_DOMAIN_NAME=Default
    export OS_PROJECT_DOMAIN_NAME=Default
    export OS_AUTH_URL=http://ct:5000/v3
    export OS_IDENTITY_API_VERSION=3
    export OS_IMAGE_API_VERSION=2
    保存退出
    source ~/.bashrc   加载
    

    9、通过配置环境变量,可以使用openstack命令进行一些操作

    openstack user list
    

    在这里插入图片描述

    2.3、创建OpenStack 域、项目、用户和角色

    1、创建一个项目(project)

    创建在指定的domain(域)中,指定描述信息,project名称为service(可使用openstack domain list 查询)

    openstack project create --domain default --description "Service Project" service
    

    在这里插入图片描述

    2、创建角色(可使用openstack role list查看)

    openstack role create user
    

    在这里插入图片描述

    3、查看openstack 角色列表

     openstack role list
    

    在这里插入图片描述
    admin为管理员
    member为 租户
    user:用户

    4、查看是否可以不指定密码就可以获取到token信息(验证认证服务)

    openstack token issue
    

    在这里插入图片描述

    三、小结

    Keystone 组件是作为OpenStack 集群中统一认证、授权的模块,其核心功能就是针对于User(用户)、Tenant(租户)、Role(角色)、Token(令牌/凭证)的控制(手工编译部署即围绕此功能展开的)

    ①User:使用 openstack 的用户。
    ②Project/Tenant:租户,可以理解为一个人、项目或者组织拥有的资源的合集。在一个租户中可以拥有很多个用户,这些用户可以根据权限的划分使用租户中的资源。
    ③Role:角色,用于分配操作的权限。角色可以被指定给用户,使得该用户获得角色对应的操作权限。
    ④Token:是指一串比特值或者字符串,用来作为访问资源的记号。Token 中含有可访问资源的范围和有效时间,token 是用户的一种凭证,需要使用正确的用户名和密码向 Keystone 服务申请才能得到 token。

    使用手动部署的模式搭建OpenStack的思路:
    ①分模块部署
    ②部署keystone模块的基础环境(下载依赖包、组件包、第三方工具/插件)
    ③创建、开启此模块的功能(以keystone为例,创建并初始化认证数据库、修改配置文件、初始化密钥-fernet格式、配置身份认证服务)
    ④验证实验

    展开全文
  • 当前的重点是让基本组件工作并使用服务发现。 使用: 开发环境 启动 Vagrant 并为 Dockenstack 加载舰队单元。 $ vagrant up $ vagrant ssh core-01 $ fleetctl submit share/fleet/units/* 启动我们的支持容器并...
  • Openstack 组件关系图

    千次阅读 2018-07-30 15:39:43
  • OpenStack组件介绍

    千次阅读 2017-11-10 11:34:07
    又被称为 OpenStack Compute,主要作用是控制虚拟机的创建,以及改变它的容量和配置,还可以做虚拟机的销毁,虚拟机的整个生命周期都是由 Nova 来控制的; Nova的部署运行一般有两种情况:一类是 Nova 作为 ...
  • 1 OpenStack组件架构简介 上图 VM是虚拟机,围绕 VM 的那些长方形代表 OpenStack 不同的模块(OpenStack 叫服务,后面都用服务这个术语),下面来分别介绍。 **Nova:**管理 VM 的生命周期,是 OpenStack 中最核心...
  • OpenSim Openstack组件模拟器
  • OpenStack-Placement一、创建数据库实例和数据库用户二、创建Placement服务用户和API的endpoint三、安装placement服务四、修改Apache配置文件五、测试六、小结 一、创建数据库实例和数据库用户 mysql -uroot -p ...
  • 1 openstack组件之间通信以及组件内各服务通信方式 1.1 openstack各组件之间的通信方式 据我所了解的几个组件,各个组件之间大部分是通过调用其他组件的rest api方式进行通信, 而rest api的框架大部分是通过: ...
  • 本篇文章主要介绍了详解Openstack组件部署 — Overview和前期环境准备,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
  • Neutron服务就是提供网络支持,通过使用代理,插件,来为集群内部的组件/实例提供网络资源 网络是openstack最重要的资源之一,没有网络,虚拟机将被隔离。Openstack的网络服务最主要的功能就是为虚拟机实例提供网络...
  • 组件部分 ceilometer-agent-compute:运行在每个计算节点上,循环查询资源使用率,统计情况 ceilometer-agent-central:运行在管理服务器上 ceilometer-agent-notification:运行在管理服务器上,使用消息队列中的...
  • 中文描述openstack组件之间的关系,帮助理解openstack架构
  • openstack组件使用的默认端口号 openstack service default ports port type Block Storage (cinder) 8776 publicurl and adminurl Compute (nova) endpoints 8774 publicurl and adminurl Comp...
  • Openstack组件部署 — Keystone Install & Create service entity and API endpoints Openstack组件部署 — keystone(domain, projects, users, and roles) Keystone架构 Keystone的管理对象 User ...
  • openstack组件卸载命令等2个文件
  • 在centos7系统上,安装openstack服务以后,可以通过以下命令,查找到该系统上,已经安装的openstack服务 [root@xzto01n010027244133 ~]# systemctl list-unit-files | grep openstack openstack-cinder-api....
  • 要想学好云计算,openstack学习的好资料。由权威及项目经验丰富的教授教学
  • 遇到 bug 时,通常需要更新 OpenStack 组件来 fix,本节教大家如何更新。
  • Openstack中各个组件的功能,简单明了,更易于初学Openstack的学习,使学习更加简单
  • Openstack组件部署 — Nova overview

    千次阅读 2016-06-26 02:39:45
    目录目录 前文列表 ...Nova 的组件 nova-api service nova-api-metadata service nova-compute service nova-scheduler service nova-conductor module nova-cert module nova-network worker daemon n

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,052
精华内容 10,020
关键字:

openstack组件