Iaas-openstack从入门到精通

学习课程连接: openstack从入门到精通

第二章 openstack核心组件详细介绍

2-1openstack和kubernetes联系和区别

在这里插入图片描述

2-2准备安装openstack需要实验环境

虚拟机的操作系统版本centos7.6

准备两台虚拟机安装openstack
controller节点:三个硬盘 8G/4H/60G
computer节点: 两个硬盘 6G/4H/60G

ceph机器后面在准备就可以
admin节点(ceph admin管理节点): 两个硬盘 2G/4H/60G
ceph2
ceph3

2-3openstack简介

Openstack是一个开源的云平台管理项目,可以用于构建公有云或者私有云平台,提供了基础设施及服务(Iaas)的解决方案,OpenStack是一个云操作系统,通过数据中心可控制计算、存储、网络等资源池,OpenStack覆盖了网络、虚拟化、操作系统、服务器等各个方面,通过openstack可以启动,分配和管理虚拟机资源,所有的管理也都可以通过前端界面就可以完成。

我们部署openstack之后,可以通过这个平台创建各个不同版本的虚拟机,如centos,windows等系统,可以按需分配cpu,内存,磁盘给这些虚拟机,同时还可以提供网络支持

2-4openstack核心组件-Nova简介

Nova
一、Nova简介
计算管理服务,它管理虚拟机实例的整个生命周期,负责虚拟机创建、开机、关机、挂起、暂停、调整、迁移、重启、销毁,资源分配等操作,通过API来对外提供服务,使用Keystone来进行身份验证,使用Horizon作为其管理接口,使用Glance提供其镜像,这样使得Nova可管理计算资源、网络、认证等

在这里插入图片描述
二、Nova的架构组成,包含如下组件

  1. Nova API:
    HTTP服务,负责接收和响应外部请求,外部访问Nova的唯一途径,接受外部请求并通过消息队列将请求发送给其他的服务组件。

  2. Nova Compute:
    运行在计算节点上,可以创建、删除、启动、暂停和关闭虚拟机、虚拟机在不同的计算节点间迁移、虚拟机安全控制、管理虚拟机磁盘镜像以及快照等功能。

  3. Nova-scheduler:
    选择合适的服务器节点,这里的调度策略是先过滤不合适的节点,然后再进行打分操作,选择出来最合适的节点通知该节点上的nova-computer来进行创建虚拟机、迁移等操作。

  4. nova-volume :
    为虚拟机提供块设备存储,主要负责创建云硬盘、删除云硬盘,F版之后被cinder取代了

  5. nova-conductor:
    nova-compute经常需要更新数据库,比如更新和获取虚机的状态。 出于安全性和伸缩性的考虑,nova-compute 并不会直接访问数据库,而是将这个任务委托给nova-conductor。
    这样做有两个显著好处:
    (1)更高的系统安全性
    (2)更好的系统伸缩性

  6. nova-network-目前已经被Neutron组件取代:
    为虚拟机提供网络服务,也就是说,它实现了网络资源池的管理,包括:IP池、网桥接口、防火墙、VLAN等的管理。

  7. nova-cert:用于管理证书

  8. 控制台接口的组件:

  • nova-console: 用户可以通过多种方式访问虚机的控制台:
  • nova-novncproxy: 基于Web浏览器的VNC访问
  • nova-consoleauth: 负责对访问虚机控制台请求提供Token认证

Database::
Nova会有一些数据需要存放到数据库中,一般使用 MySQL。数据库安装在控制节点上。Nova使用命名为 “nova” 的数据库。

RabbitMQ:
消息队列机制的实现,nova模块之间的通信大部分是通过该队列实现,nova-API在接受到http请求的时候,他会将该请求放到RabbitMQ中,nova-scheduler会从RabbitMQ队列中获取相应的任务去执行。

三、Nova工作流程
以用户通过openstack创建虚拟机为例,了解nova服务的工作流程

  1. 用户或者其他应用程序在创建虚拟机的时候,会向nova-api发送创建虚拟机的请求
  2. nova-api对请求做一些处理后,会向RabbitMQ发送消息:“让Scheduler创建一个虚机”
  3. nova-scheduler从RabbitMQ获取到API发给它的消息,然后执行调度算法,从若干计算节点中选出节点 A
  4. Scheduler向abbitMQ发送了一条消息:“在计算节点A上创建这个虚机”
  5. 计算节点A的nova-compute从RabbitMQ中获取到Scheduler发给它的消息,然后在本节点的Hypervisor上启动虚机。
  6. 在虚机创建的过程中,Compute如果需要查询或更新数据库信息,会通过Rabbitmq向 nova-conductor发送消息,Conductor负责数据库访问。

2-5openstack核心组件-Neutron简介

一、Neutron介绍
网络管理服务,早期由Nova来提供,从F版开始独立出来,用于提供网络连接服务,为多租户环境下的每个租户提供独立的网络环境,Neutron为整个OpenStack环境提供网络支持,可以定义Network、Subnet、Router,配置DHCP、DNS、负载均衡、L3服务,网络支持GRE、VLAN等,并且支持众多流行的网络管理插件,如OpenvSwitch
在这里插入图片描述
二、Neutron包含的组件
(1)Neutron Server
可以安装在网络节点,也可以安装在控制节点。neutron-server提供API接口,并把API的调用请求传给已经配置好的插件进行后续处理。插件需要访问数据库来维护各种配置数据和对应关系,例如路由器、网络、子网、端口、浮动IP、安全组等等
(2)Neutron plugin
可以理解为不同网络功能实现的入口,各个厂商可以开发自己的plugin。Neutron-plugin接收neutron-server分发过来的API请求,向neutron database完成一些信息的注册,然后将具体要执行的业务操作和参数通知给自身对应的neutron agent。

(3)插件代理 (neutron Agent):
虚拟网络上的数据包的处理则是由这些插件代理来完成的。在每个计算节点和网络节点上运行。代理与Neutron Server及其插件的交互就通过消息队列来支持;可以直观地理解为neutron plugin在设备上的代理,接收相应的neutron-plugin通知的业务操作和参数,并转换为具体的设备级操作,以指导设备的动作。当设备本地发生问题时,neutron-agent会将情况通知给neutron-plugin。

neutron L2 agent(二层代理):
为虚拟机提供2层交换服务,传输以MAC地址为基础,用于管理vlan插件,接收neutron-server的指令来创建相关的vlan

neutron L3 agent(三层代理):
为虚拟机访问外部网络提供三层转发服务,负责路由,浮动IP分配,地址转换和安全组管理。
通过iptables实现安全组,路由和地址转换。每个虚拟路由运行在一个network namespace中,每个namespace由qroute -< router -< UUID命名。

neutron-dhcp-agent(dhcp代理):
为各个租户网络提供DHCP服务,部署在网络节点上,为子网自动分配ip地址

(4)Neutron database
Neutron的数据库,一些业务相关的参数都存在这里。

(5)Network provider
为实际执行功能的网络设备,一般为虚拟交换机(OVS或者Linux Bridge)

2-6openstack核心组件-Cinder简介

和卷操作的由Cinde完成
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2-7openstack核心组件-Swift简介

一、swift简介
Swift是对象存储,为OpenStack集群提供跨节点的分布式大规模对象存储服务,它是通过RESTful接口来存储和检索非结构化的数据对象,它是一个高容错可伸缩的存储架构;
对象存储是将相应的数据存储为二进制对象,而不是文件,一般通过一条指令就可以存储或检索到整个对象;

在Swift中,对象被物理地存储在对象服务器上(object servers),它是由许多对象服务器,代理服务器,容器服务器以及账户服务器等实体构成的一个“环”上的一个单元

二、Swift组件
(1)代理服务(Proxy Server):对外提供对象服务 API,会根据环的信息来查找服务地址并转发用户请求至相应的账户、容器或者对象服务;由于采用无状态的 REST 请求协议,可以进行横向扩展来均衡负载。
(2)认证服务(Authentication Server):验证访问用户的身份信息,并获得一个对象访问令牌(Token),在一定的时间内会一直有效;验证访问令牌的有效性并缓存下来直至过期时间。
(3)缓存服务(Cache Server):缓存的内容包括对象服务令牌,账户和容器的存在信息,但不会缓存对象本身的数据;缓存服务可采用 Memcached 集群,Swift 会使用一致性散列算法来分配缓存地址。
(4)账户服务(Account Server):提供账户元数据和统计信息,并维护所含容器列表的服务,每个账户的信息被存储在一个 SQLite 数据库中。
(5)容器服务(Container Server):提供容器元数据和统计信息,并维护所含对象列表的服务,每个容器的信息也存储在一个 SQLite 数据库中。
(6)对象服务(Object Server):提供对象元数据和内容服务,每个对象的内容会以文件的形式存储在文件系统中,元数据会作为文件属性来存储,建议采用支持扩展属性的 XFS 文件系统。
(7)复制服务(Replicator):会检测本地分区副本和远程副本是否一致,具体是通过对比散列文件和高级水印来完成,发现不一致时会采用推式(Push)更新远程副本,例如对象复制服务会使用远程文件拷贝工具 rsync 来同步;另外一个任务是确保被标记删除的对象从文件系统中移除。
(8)更新服务(Updater):当对象由于高负载的原因而无法立即更新时,任务将会被序列化到在本地文件系统中进行排队,以便服务恢复后进行异步更新;例如成功创建对象后容器服务器没有及时更新对象列表,这个时候容器的更新操作就会进入排队中,更新服务会在系统恢复正常后扫描队列并进行相应的更新处理。
(9)审计服务(Auditor):检查对象,容器和账户的完整性,如果发现比特级的错误,文件将被隔离,并复制其他的副本以覆盖本地损坏的副本;其他类型的错误会被记录到日志中。
账户清理服务(Account Reaper):移除被标记为删除的账户,删除其所包含的所有容器和对象

2-8Swift和Cinder功能对比分析

在这里插入图片描述

2-9openstack核心组件-Keystone简介

一、keystone简介
Keystone是认证管理服务,是 OpenStack框架中负责管理身份验证、服务规则和服务令牌功能的模块,管理Domains、Projects、Users、Groups、Roles,使用mysql做为统一的数据库,用户访问资源需要验证用户的身份与权限,服务执行操作也需要进行权限检测,这些都需要通过Keystone来处理,OpenStack服务通过Keystone 来注册其Endpoint(服务访问的URL),任何服务之间的相互调用,都需要先经过 Keystone 的身份验证,获得到目标服务的Endpoint ,然后再调用。
Keystone 的主要功能如下:
管理用户及其权限;
维护OpenStack服务的Endpoint;
Authentication(认证)和 Authorization(鉴权)。
在这里插入图片描述

二、Keystone 中主要涉及到如下几个概念
1.User:
user即用户,也可以是其他系统或者服务。当User请访问OpenStack时,Keystone会对其进行验证,在openstack的web界面,点击“身份管理->用户” ,可以看到有admin、demo、nova、cinder、glance、neutron等用户。 admin是管理员用户,也可以管理其他User。

2.Credentials
用于确认用户身份的凭证,Credentials是User用来证明自己身份的信息,相当于我们的身份证一样,可以是用户名/密码、Token 、Key等

3.Authentication
确定用户身份的过程,User访问OpenStack时向Keystone提交用户名和密码形式的 Credentials,Keystone验证通过后会给User签发一个Token作为后续访问的Credential(返回的token中就包含User的Role列表)

4.Token
Token令牌,Token是由数字和字母组成的字符串,用来做为访问资源的令牌,在keystone中主要是引入令牌机制来保护用户对资源的访问,同时引入PKI、PKIZ、fernet、UUID其中一个随机加密产生一串数字,对令牌加以保护,token并不是长久有效的,是有时效性的,在有效的时间内可以访问资源。

5.role
角色,用于分配操作的权限,角色可以指定给用户,使得该用户获得角色对应的操作权限。
在这里插入图片描述
安全包含两部分:Authentication(认证)和 Authorization(鉴权),认证可以解决你是谁,鉴权是可以指定你能干什么

6.policy
(1)对于keystone service 来说,Policy就是一个JSON文件,rpm安装默认是在/etc/keyston/policy.json。通过配置这个文件,keystone实现了对User基于Role的权限管理(User <-- Role(ACL) <–Policy)
(2)Policy就是用来控制User对Project(tenant)中资源的操作权限

7.project
Project将OpenStack的资源(计算、存储和网络)进行分组和隔离。在企业中,Project 可以是一个部门或者项目组,每个User,包括 admin必须在自己的Project里才能访问该Project的资源,一个User可以属于多个Project。
在openstack的web界面, “身份管理->项目” 中可以看到有哪些project,在对应的project中点击管理成员,可以把user添加到项目中

7.Group
Group 是一个domain部分user的集合,其目的是为了方便分配 role。给一个 group 分配 role,结果会给 group 内的所有users分配这个 role。

Horizon 在 “身份管理->组” 中管理 Group

8.Domain
Domain是Project、Group和User的集合,就像域名一样,全局唯一,在一个Domain内,Project、Group、User 的名称不可以重复,在两个不同的Domain内,它们的名称可以重复,在确定这些元素时,需要同时使用它们的名称和它们的 Domain的id或者name。

9.service
Openstack Service是Openstack中运行的服务,nova,glance,cinder等都是属于一个服务,每个 Service 都会提供若干个Endpoint,User通过Endpoint访问资源和执行操作。

10.Endpoint–相当于URL
用来通过访问和定位某个openstack service的地址,通常是一个URL,不同的region有不同的Endpoint,region使用跨地域的云服务,比如像阿里云有华北,华东等等,任何服务访问openstack service 中的资源时,都需要访问keystone,例如,Nova访问Glance服务去获取Image时,Nova通过访问Keystone拿到Glance的Endpoint,然后通过访问该Endpoint去获取Glance服务,我们可以通过Endpoint的region属性去定义多个region。Endpoint中使用对象分为三类:

Admin URL:给admin用户使用,被从常规的访问中分离。
Internal URL:Openstack内部服务使用来跟别的服务通信,只能被局域网访问。
Public URL:其它用户可以访问的地址,可以被全局访问。
User 通过 Endpoint 访问资源和执行操作

11.Service与Endpoint关系

(1)在openstack中,每一个service中都有三种Endpoint:Admin、Public、Internal(创建完service后需要为其创建API Endpoint)

(2)Admin使用者为管理员,能够修改User Project(Tenant)

(3)public使用者为客户端,使用者在外网管理自己云服务器

(4)internal使用者为内部组件间相互调用

(5)三种Endpoint在网络上开放的权限也不同,Admin通常只能对内网开放,public通常可以对外网开放,internal只能对有安装openstack服务的机器开放

三、keystone的形象比喻

如果把宾馆比作为Openstack,那么宾馆的中央管理系统就是Keystone,入住宾馆的人就是User 。在宾馆中拥有很多不同的房间,房间提供了不同的服务(Service)。
在入住宾馆前,User需要给出身份证(Credential),中央管理系统(Keystone)在确认User的身份后(Authenticaiton),会给你一个房卡(Token)和导航地图(Endpoint)。

不同VIP(Role)级别的User,拥有不同权限的房卡(Token),如果你的VIP(Role)等级高,你可以享受到豪华的套房。

User拿着房卡(Token)和地图(Endpoint),就可以进入特定的房间去享受不同的Services。每一个服务(Services)中都拥有着一些特定资源(Project),User可以根据自己的权限来使用这些资源。

2-10openstack核心组件-Glance简介

一、Glance介绍
在openstack中负责管理镜像的服务,提供了在部署虚拟机的时候所需要的镜像的管理,包含镜像的查找,注册,检索,导入,格式,以及制作相应的模板,它支持多种虚拟机镜像格式(AKI、AMI、ARI、ISO、QCOW2、Raw、VDI、VHD、VMDK),有创建上传镜像、删除镜像、编辑镜像基本信息的功能, Glance提供Restful API可以查询虚拟机镜像的metadata及获取镜像,Glance可以将镜像保存到多种后端存储上,比如简单的文件存储或者对象存储。

二、什么是Image(镜像)?
Image 是一个模板,里面包含了基本的操作系统和其他的软件;
举例:
假如我们入职新公司,需要一个Win10系统并且这个windows系统里需要有office软件。 OpenStack可以这样实现:
1.通过openstack安装虚拟机
2.对虚拟机进行快照,这样就会得到一个镜像
3.当员工需要这个widows环境时,可以基于这个镜像启动一个或者多个虚拟机就可以了

三、什么是镜像管理服务器
Image Service的功能是管理Image,让用户能够发现、获取和保存Image。在OpenStack中,提供Image Service的是Glance,其具体功能如下:
1.提供 REST API 让用户能够查询和获取image的元数据和image本身
2.支持多种方式存储image,包括普通的文件系统、Swift、Amazon S3等
3.对Instance执行Snapshot创建新的image

四、glance包含如下组件
glance-api:是一个守护进程,负责响应api请求,发现,检索和存储
glance-registry:守护进程,存储和检索有关镜像的元数据,元数据包括大小和类型等项目,主要与数据库打交道
Database:Image的metadata会保持到database中,默认是MySQL

glance-api不会真正处理请求,如果操作是与image metadata(元数据)相关,glance-api 会把请求转发给 glance-registry,如果操作是与image自身存取相关,glance-api 会把请求转发给该image的后端存储

glance的后端存储
Glance自己并不存储image,真正的image是存放在backend中的,Glance支持多种backend,包括:
A directory on a local file system(这是默认配置)
Ceph RBD
Amazon S3
Sheepdog
OpenStack Block Storage (Cinder)
OpenStack Object Storage (Swift)
VMware ESX
具体使用哪种 backend,是在 /etc/glance/glance-api.conf 中配置的

第三章 openstack安装

操作系统版本选择centos7.6
controller节点:三个硬盘 8G/4H/60G
computer节点:两个硬盘 6G/4H/60G

1.机器规划

controller:
ens33:192.168.124.100,提供浮动ip的,也就是出网地址
ens37:192.168.124.200,内网之间通信用
computer:
ens33:192.168.124.101,提供浮动ip的,也就是出网地址
ens37:192.168.124.201,内网之间通信用

配置两张网卡,并配置为静态ip

vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static  #静态
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes  #开机自启网卡
IPADDR=192.168.124.100 #ip和本机在一网段,不和本机ip重复即可
NETMASK=255.255.255.0
GATEWAY=192.168.124.1
DNS1=192.168.124.1

在这里插入图片描述

修改好后重启网络
在这里插入图片描述

vi /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.124.200 #ip和本机在一网段,不和本机ip重复即可
NETMASK=255.255.255.0
GATEWAY=192.168.124.1
DNS1=192.168.124.1

在这里插入图片描述

2.初始化,各个节点操作

安装常用软件

yum -y install wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel vim ncurses-devel autoconf automake zlib-devel python-devel epel-release lrzsz openssh-server

3.关闭防火墙、networkmanager,iptables,selinux,各个节点操作

systemctl stop firewalld && systemctl disable firewalld && systemctl stop NetworkManager && systemctl disable NetworkManager
systemctl  stop  iptables &&  systemctl  disable  iptables
cat  /etc/sysconfig/selinux  作如下修改,重启虚拟机生效
SELINUX=disabled

4.配置hosts文件,各个节点保持一致

vim  /etc/hosts   最后一行添加如下内容
192.168.124.200 controller
192.168.124.201 computer

5.配置主机名

//修改主机名

192.168.124.200上操作

hostnamectl set-hostname controller

192.168.124.201上操作

hostnamectl set-hostname computer

6.做时间同步,各个节点操作

ntpdate cn.pool.ntp.org

7.配置无密码登陆,各个节点操作

ssh-keygen -t rsa    
#一直回车即可
ssh-copy-id -i .ssh/id_rsa.pub controller
ssh-copy-id -i .ssh/id_rsa.pub computer

8.开始安装openstack,N版本

(1)上传openstack离线软件包到root目录下(在controller和computer节点操作)
在root下创建一个目录openstack,然后把软件包解压到这个目录下

mkdir /root/openstack && cd /root/openstack && tar zxvf /root/openstack_N.tar.gz 

(2)解压之后会出现一个openstack目录,把openstack目录整体移动到/下(controller和computer节点操作)
mv openstack /
(3)重新配置yum源(controller和computer节点都操作)

cd /etc/yum.repos.d/ && mkdir bak && mv CentOS-* bak/ && mv epel* bak/
cp bak/CentOS-Base.repo ./

生成一个新的openstack的yum源

cat <<EOF > /etc/yum.repos.d/openstack.repo 
[openstack]
enable=1
gpgcheck=0
baseurl=file:///openstack
EOF
yum makecache

9.openstack应答文件安装(controller节点操作)

yum install centos-release-openstack-newton -y
cd /etc/yum.repos.d && mv *.repo bak/ && cp bak/openstack.repo ./  && cp bak/CentOS-Base.repo ./
yum makecache
yum install openstack-packstack -y
cd /root
packstack --gen-answer-file=openstack.txt 

#这样会生成一个应答文件openstack.txt
(1)查看openstack应答文件内容

grep -vE '^$|^#' openstack.txt

[

general]
CONFIG_SSH_KEY=/root/.ssh/id_rsa.pub
CONFIG_DEFAULT_PASSWORD=
CONFIG_SERVICE_WORKERS=%{::processorcount}
CONFIG_MARIADB_INSTALL=y
CONFIG_GLANCE_INSTALL=y
CONFIG_CINDER_INSTALL=y
CONFIG_MANILA_INSTALL=n
CONFIG_NOVA_INSTALL=y
CONFIG_NEUTRON_INSTALL=y
CONFIG_HORIZON_INSTALL=y
CONFIG_SWIFT_INSTALL=y
CONFIG_CEILOMETER_INSTALL=y
CONFIG_AODH_INSTALL=y
CONFIG_GNOCCHI_INSTALL=y
CONFIG_SAHARA_INSTALL=n
CONFIG_HEAT_INSTALL=n
CONFIG_TROVE_INSTALL=n
CONFIG_IRONIC_INSTALL=n
CONFIG_CLIENT_INSTALL=y
CONFIG_NTP_SERVERS=
CONFIG_NAGIOS_INSTALL=y
EXCLUDE_SERVERS=
CONFIG_DEBUG_MODE=n
CONFIG_CONTROLLER_HOST=192.168.124.100
CONFIG_COMPUTE_HOSTS=192.168.124.100
CONFIG_NETWORK_HOSTS=192.168.124.100
CONFIG_VMWARE_BACKEND=n
CONFIG_UNSUPPORTED=n
CONFIG_USE_SUBNETS=n
CONFIG_VCENTER_HOST=
CONFIG_VCENTER_USER=
CONFIG_VCENTER_PASSWORD=
CONFIG_VCENTER_CLUSTER_NAMES=
CONFIG_STORAGE_HOST=192.168.124.100
CONFIG_SAHARA_HOST=192.168.124.100
CONFIG_USE_EPEL=n
CONFIG_REPO=
CONFIG_ENABLE_RDO_TESTING=n
CONFIG_RH_USER=
CONFIG_SATELLITE_URL=
CONFIG_RH_SAT6_SERVER=
CONFIG_RH_PW=
CONFIG_RH_OPTIONAL=y
CONFIG_RH_PROXY=
CONFIG_RH_SAT6_ORG=
CONFIG_RH_SAT6_KEY=
CONFIG_RH_PROXY_PORT=
CONFIG_RH_PROXY_USER=
CONFIG_RH_PROXY_PW=
CONFIG_SATELLITE_USER=
CONFIG_SATELLITE_PW=
CONFIG_SATELLITE_AKEY=
CONFIG_SATELLITE_CACERT=
CONFIG_SATELLITE_PROFILE=
CONFIG_SATELLITE_FLAGS=
CONFIG_SATELLITE_PROXY=
CONFIG_SATELLITE_PROXY_USER=
CONFIG_SATELLITE_PROXY_PW=
CONFIG_SSL_CACERT_FILE=/etc/pki/tls/certs/selfcert.crt
CONFIG_SSL_CACERT_KEY_FILE=/etc/pki/tls/private/selfkey.key
CONFIG_SSL_CERT_DIR=~/packstackca/
CONFIG_SSL_CACERT_SELFSIGN=y
CONFIG_SSL_CERT_SUBJECT_C=--
CONFIG_SSL_CERT_SUBJECT_ST=State
CONFIG_SSL_CERT_SUBJECT_L=City
CONFIG_SSL_CERT_SUBJECT_O=openstack
CONFIG_SSL_CERT_SUBJECT_OU=packstack
CONFIG_SSL_CERT_SUBJECT_CN=controller
CONFIG_SSL_CERT_SUBJECT_MAIL=admin@controller
CONFIG_AMQP_BACKEND=rabbitmq
CONFIG_AMQP_HOST=192.168.124.100
CONFIG_AMQP_ENABLE_SSL=n
CONFIG_AMQP_ENABLE_AUTH=n
CONFIG_AMQP_NSS_CERTDB_PW=PW_PLACEHOLDER
CONFIG_AMQP_AUTH_USER=amqp_user
CONFIG_AMQP_AUTH_PASSWORD=PW_PLACEHOLDER
CONFIG_MARIADB_HOST=192.168.124.100
CONFIG_MARIADB_USER=root
CONFIG_MARIADB_PW=108d130901b94eca
CONFIG_KEYSTONE_DB_PW=edb8e43f12404ffb
CONFIG_KEYSTONE_DB_PURGE_ENABLE=True
CONFIG_KEYSTONE_REGION=RegionOne
CONFIG_KEYSTONE_ADMIN_TOKEN=73f54011d6a4422892857a95d7cc21ee
CONFIG_KEYSTONE_ADMIN_EMAIL=root@localhost
CONFIG_KEYSTONE_ADMIN_USERNAME=admin
CONFIG_KEYSTONE_ADMIN_PW=16e424911af144ca
CONFIG_KEYSTONE_DEMO_PW=17c04c65e8a34931
CONFIG_KEYSTONE_API_VERSION=v2.0
CONFIG_KEYSTONE_TOKEN_FORMAT=UUID
CONFIG_KEYSTONE_IDENTITY_BACKEND=sql
CONFIG_KEYSTONE_LDAP_URL=ldap://192.168.124.100
CONFIG_KEYSTONE_LDAP_USER_DN=
CONFIG_KEYSTONE_LDAP_USER_PASSWORD=
CONFIG_KEYSTONE_LDAP_SUFFIX=
CONFIG_KEYSTONE_LDAP_QUERY_SCOPE=one
CONFIG_KEYSTONE_LDAP_PAGE_SIZE=-1
CONFIG_KEYSTONE_LDAP_USER_SUBTREE=
CONFIG_KEYSTONE_LDAP_USER_FILTER=
CONFIG_KEYSTONE_LDAP_USER_OBJECTCLASS=
CONFIG_KEYSTONE_LDAP_USER_ID_ATTRIBUTE=
CONFIG_KEYSTONE_LDAP_USER_NAME_ATTRIBUTE=
CONFIG_KEYSTONE_LDAP_USER_MAIL_ATTRIBUTE=
CONFIG_KEYSTONE_LDAP_USER_ENABLED_ATTRIBUTE=
CONFIG_KEYSTONE_LDAP_USER_ENABLED_MASK=-1
CONFIG_KEYSTONE_LDAP_USER_ENABLED_DEFAULT=TRUE
CONFIG_KEYSTONE_LDAP_USER_ENABLED_INVERT=n
CONFIG_KEYSTONE_LDAP_USER_ATTRIBUTE_IGNORE=
CONFIG_KEYSTONE_LDAP_USER_DEFAULT_PROJECT_ID_ATTRIBUTE=
CONFIG_KEYSTONE_LDAP_USER_ALLOW_CREATE=n
CONFIG_KEYSTONE_LDAP_USER_ALLOW_UPDATE=n
CONFIG_KEYSTONE_LDAP_USER_ALLOW_DELETE=n
CONFIG_KEYSTONE_LDAP_USER_PASS_ATTRIBUTE=
CONFIG_KEYSTONE_LDAP_USER_ENABLED_EMULATION_DN=
CONFIG_KEYSTONE_LDAP_USER_ADDITIONAL_ATTRIBUTE_MAPPING=
CONFIG_KEYSTONE_LDAP_GROUP_SUBTREE=
CONFIG_KEYSTONE_LDAP_GROUP_FILTER=
CONFIG_KEYSTONE_LDAP_GROUP_OBJECTCLASS=
CONFIG_KEYSTONE_LDAP_GROUP_ID_ATTRIBUTE=
CONFIG_KEYSTONE_LDAP_GROUP_NAME_ATTRIBUTE=
CONFIG_KEYSTONE_LDAP_GROUP_MEMBER_ATTRIBUTE=
CONFIG_KEYSTONE_LDAP_GROUP_DESC_ATTRIBUTE=
CONFIG_KEYSTONE_LDAP_GROUP_ATTRIBUTE_IGNORE=
CONFIG_KEYSTONE_LDAP_GROUP_ALLOW_CREATE=n
CONFIG_KEYSTONE_LDAP_GROUP_ALLOW_UPDATE=n
CONFIG_KEYSTONE_LDAP_GROUP_ALLOW_DELETE=n
CONFIG_KEYSTONE_LDAP_GROUP_ADDITIONAL_ATTRIBUTE_MAPPING=
CONFIG_KEYSTONE_LDAP_USE_TLS=n
CONFIG_KEYSTONE_LDAP_TLS_CACERTDIR=
CONFIG_KEYSTONE_LDAP_TLS_CACERTFILE=
CONFIG_KEYSTONE_LDAP_TLS_REQ_CERT=demand
CONFIG_GLANCE_DB_PW=deed8e52466b4833
CONFIG_GLANCE_KS_PW=d7df1a4c57674e03
CONFIG_GLANCE_BACKEND=file
CONFIG_CINDER_DB_PW=0b9846f915654664
CONFIG_CINDER_DB_PURGE_ENABLE=True
CONFIG_CINDER_KS_PW=b9a96d270a084fe5
CONFIG_CINDER_BACKEND=lvm
CONFIG_CINDER_VOLUMES_CREATE=y
CONFIG_CINDER_VOLUMES_SIZE=20G
CONFIG_CINDER_GLUSTER_MOUNTS=
CONFIG_CINDER_NFS_MOUNTS=
CONFIG_CINDER_NETAPP_LOGIN=
CONFIG_CINDER_NETAPP_PASSWORD=
CONFIG_CINDER_NETAPP_HOSTNAME=
CONFIG_CINDER_NETAPP_SERVER_PORT=80
CONFIG_CINDER_NETAPP_STORAGE_FAMILY=ontap_cluster
CONFIG_CINDER_NETAPP_TRANSPORT_TYPE=http
CONFIG_CINDER_NETAPP_STORAGE_PROTOCOL=nfs
CONFIG_CINDER_NETAPP_SIZE_MULTIPLIER=1.0
CONFIG_CINDER_NETAPP_EXPIRY_THRES_MINUTES=720
CONFIG_CINDER_NETAPP_THRES_AVL_SIZE_PERC_START=20
CONFIG_CINDER_NETAPP_THRES_AVL_SIZE_PERC_STOP=60
CONFIG_CINDER_NETAPP_NFS_SHARES=
CONFIG_CINDER_NETAPP_NFS_SHARES_CONFIG=/etc/cinder/shares.conf
CONFIG_CINDER_NETAPP_VOLUME_LIST=
CONFIG_CINDER_NETAPP_VFILER=
CONFIG_CINDER_NETAPP_PARTNER_BACKEND_NAME=
CONFIG_CINDER_NETAPP_VSERVER=
CONFIG_CINDER_NETAPP_CONTROLLER_IPS=
CONFIG_CINDER_NETAPP_SA_PASSWORD=
CONFIG_CINDER_NETAPP_ESERIES_HOST_TYPE=linux_dm_mp
CONFIG_CINDER_NETAPP_WEBSERVICE_PATH=/devmgr/v2
CONFIG_CINDER_NETAPP_STORAGE_POOLS=
CONFIG_CINDER_SOLIDFIRE_LOGIN=
CONFIG_CINDER_SOLIDFIRE_PASSWORD=
CONFIG_CINDER_SOLIDFIRE_HOSTNAME=
CONFIG_IRONIC_DB_PW=PW_PLACEHOLDER
CONFIG_IRONIC_KS_PW=PW_PLACEHOLDER
CONFIG_NOVA_DB_PURGE_ENABLE=True
CONFIG_NOVA_DB_PW=af8f41aa28af412d
CONFIG_NOVA_KS_PW=afd39a4d0413410a
CONFIG_NOVA_MANAGE_FLAVORS=y
CONFIG_NOVA_SCHED_CPU_ALLOC_RATIO=16.0
CONFIG_NOVA_SCHED_RAM_ALLOC_RATIO=1.5
CONFIG_NOVA_COMPUTE_MIGRATE_PROTOCOL=tcp
CONFIG_NOVA_COMPUTE_MANAGER=nova.compute.manager.ComputeManager
CONFIG_VNC_SSL_CERT=
CONFIG_VNC_SSL_KEY=
CONFIG_NOVA_PCI_ALIAS=
CONFIG_NOVA_PCI_PASSTHROUGH_WHITELIST=
CONFIG_NOVA_LIBVIRT_VIRT_TYPE=%{::default_hypervisor}
CONFIG_NOVA_COMPUTE_PRIVIF=
CONFIG_NOVA_NETWORK_MANAGER=nova.network.manager.FlatDHCPManager
CONFIG_NOVA_NETWORK_PUBIF=eth0
CONFIG_NOVA_NETWORK_PRIVIF=
CONFIG_NOVA_NETWORK_FIXEDRANGE=192.168.32.0/22
CONFIG_NOVA_NETWORK_FLOATRANGE=10.3.4.0/22
CONFIG_NOVA_NETWORK_AUTOASSIGNFLOATINGIP=n
CONFIG_NOVA_NETWORK_VLAN_START=100
CONFIG_NOVA_NETWORK_NUMBER=1
CONFIG_NOVA_NETWORK_SIZE=255
CONFIG_NEUTRON_KS_PW=0745197298aa40d3
CONFIG_NEUTRON_DB_PW=3cc922c9d5274eaf
CONFIG_NEUTRON_L3_EXT_BRIDGE=br-ex
CONFIG_NEUTRON_METADATA_PW=9b3c21210f3a4e37
CONFIG_LBAAS_INSTALL=n
CONFIG_NEUTRON_METERING_AGENT_INSTALL=y
CONFIG_NEUTRON_FWAAS=n
CONFIG_NEUTRON_VPNAAS=n
CONFIG_NEUTRON_ML2_TYPE_DRIVERS=vxlan
CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES=vxlan
CONFIG_NEUTRON_ML2_MECHANISM_DRIVERS=openvswitch
CONFIG_NEUTRON_ML2_FLAT_NETWORKS=*
CONFIG_NEUTRON_ML2_VLAN_RANGES=
CONFIG_NEUTRON_ML2_TUNNEL_ID_RANGES=
CONFIG_NEUTRON_ML2_VXLAN_GROUP=
CONFIG_NEUTRON_ML2_VNI_RANGES=10:100
CONFIG_NEUTRON_L2_AGENT=openvswitch
CONFIG_NEUTRON_ML2_SUPPORTED_PCI_VENDOR_DEVS=['15b3:1004', '8086:10ca']
CONFIG_NEUTRON_ML2_SRIOV_AGENT_REQUIRED=n
CONFIG_NEUTRON_ML2_SRIOV_INTERFACE_MAPPINGS=
CONFIG_NEUTRON_LB_INTERFACE_MAPPINGS=
CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=
CONFIG_NEUTRON_OVS_BRIDGE_IFACES=
CONFIG_NEUTRON_OVS_BRIDGES_COMPUTE=
CONFIG_NEUTRON_OVS_TUNNEL_IF=
CONFIG_NEUTRON_OVS_TUNNEL_SUBNETS=
CONFIG_NEUTRON_OVS_VXLAN_UDP_PORT=4789
CONFIG_MANILA_DB_PW=PW_PLACEHOLDER
CONFIG_MANILA_KS_PW=PW_PLACEHOLDER
CONFIG_MANILA_BACKEND=generic
CONFIG_MANILA_NETAPP_DRV_HANDLES_SHARE_SERVERS=false
CONFIG_MANILA_NETAPP_TRANSPORT_TYPE=https
CONFIG_MANILA_NETAPP_LOGIN=admin
CONFIG_MANILA_NETAPP_PASSWORD=
CONFIG_MANILA_NETAPP_SERVER_HOSTNAME=
CONFIG_MANILA_NETAPP_STORAGE_FAMILY=ontap_cluster
CONFIG_MANILA_NETAPP_SERVER_PORT=443
CONFIG_MANILA_NETAPP_AGGREGATE_NAME_SEARCH_PATTERN=(.*)
CONFIG_MANILA_NETAPP_ROOT_VOLUME_AGGREGATE=
CONFIG_MANILA_NETAPP_ROOT_VOLUME_NAME=root
CONFIG_MANILA_NETAPP_VSERVER=
CONFIG_MANILA_GENERIC_DRV_HANDLES_SHARE_SERVERS=true
CONFIG_MANILA_GENERIC_VOLUME_NAME_TEMPLATE=manila-share-%s
CONFIG_MANILA_GENERIC_SHARE_MOUNT_PATH=/shares
CONFIG_MANILA_SERVICE_IMAGE_LOCATION=https://www.dropbox.com/s/vi5oeh10q1qkckh/ubuntu_1204_nfs_cifs.qcow2
CONFIG_MANILA_SERVICE_INSTANCE_USER=ubuntu
CONFIG_MANILA_SERVICE_INSTANCE_PASSWORD=ubuntu
CONFIG_MANILA_NETWORK_TYPE=neutron
CONFIG_MANILA_NETWORK_STANDALONE_GATEWAY=
CONFIG_MANILA_NETWORK_STANDALONE_NETMASK=
CONFIG_MANILA_NETWORK_STANDALONE_SEG_ID=
CONFIG_MANILA_NETWORK_STANDALONE_IP_RANGE=
CONFIG_MANILA_NETWORK_STANDALONE_IP_VERSION=4
CONFIG_MANILA_GLUSTERFS_SERVERS=
CONFIG_MANILA_GLUSTERFS_NATIVE_PATH_TO_PRIVATE_KEY=
CONFIG_MANILA_GLUSTERFS_VOLUME_PATTERN=
CONFIG_MANILA_GLUSTERFS_TARGET=
CONFIG_MANILA_GLUSTERFS_MOUNT_POINT_BASE=
CONFIG_MANILA_GLUSTERFS_NFS_SERVER_TYPE=gluster
CONFIG_MANILA_GLUSTERFS_PATH_TO_PRIVATE_KEY=
CONFIG_MANILA_GLUSTERFS_GANESHA_SERVER_IP=
CONFIG_HORIZON_SSL=n
CONFIG_HORIZON_SECRET_KEY=282cf370a1ed40419f21ac646106b5ac
CONFIG_HORIZON_SSL_CERT=
CONFIG_HORIZON_SSL_KEY=
CONFIG_HORIZON_SSL_CACERT=
CONFIG_SWIFT_KS_PW=3f3e8cc27df94bd7
CONFIG_SWIFT_STORAGES=
CONFIG_SWIFT_STORAGE_ZONES=1
CONFIG_SWIFT_STORAGE_REPLICAS=1
CONFIG_SWIFT_STORAGE_FSTYPE=ext4
CONFIG_SWIFT_HASH=fa2aec5b783f4a10
CONFIG_SWIFT_STORAGE_SIZE=2G
CONFIG_HEAT_DB_PW=PW_PLACEHOLDER
CONFIG_HEAT_AUTH_ENC_KEY=bc9eb32a01784c14
CONFIG_HEAT_KS_PW=PW_PLACEHOLDER
CONFIG_HEAT_CLOUDWATCH_INSTALL=n
CONFIG_HEAT_CFN_INSTALL=y
CONFIG_HEAT_DOMAIN=heat
CONFIG_HEAT_DOMAIN_ADMIN=heat_admin
CONFIG_HEAT_DOMAIN_PASSWORD=PW_PLACEHOLDER
CONFIG_PROVISION_DEMO=y
CONFIG_PROVISION_TEMPEST=n
CONFIG_PROVISION_DEMO_FLOATRANGE=172.24.4.224/28
CONFIG_PROVISION_IMAGE_NAME=cirros
CONFIG_PROVISION_IMAGE_URL=http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
CONFIG_PROVISION_IMAGE_FORMAT=qcow2
CONFIG_PROVISION_IMAGE_SSH_USER=cirros
CONFIG_PROVISION_UEC_IMAGE_NAME=cirros-uec
CONFIG_PROVISION_UEC_IMAGE_KERNEL_URL=http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-kernel
CONFIG_PROVISION_UEC_IMAGE_RAMDISK_URL=http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-initramfs
CONFIG_PROVISION_UEC_IMAGE_DISK_URL=http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
CONFIG_TEMPEST_HOST=
CONFIG_PROVISION_TEMPEST_USER=
CONFIG_PROVISION_TEMPEST_USER_PW=PW_PLACEHOLDER
CONFIG_PROVISION_TEMPEST_FLOATRANGE=172.24.4.224/28
CONFIG_PROVISION_TEMPEST_REPO_URI=https://github.com/openstack/tempest.git
CONFIG_PROVISION_TEMPEST_REPO_REVISION=master
CONFIG_RUN_TEMPEST=n
CONFIG_RUN_TEMPEST_TESTS=smoke
CONFIG_PROVISION_OVS_BRIDGE=y
CONFIG_GNOCCHI_DB_PW=6548359f96fc41cf
CONFIG_GNOCCHI_KS_PW=d489ab53035b4c85
CONFIG_CEILOMETER_SECRET=c20cb1560e0b45d6
CONFIG_CEILOMETER_KS_PW=94a7ddb805464887
CONFIG_CEILOMETER_SERVICE_NAME=httpd
CONFIG_CEILOMETER_COORDINATION_BACKEND=redis
CONFIG_CEILOMETER_METERING_BACKEND=database
CONFIG_MONGODB_HOST=192.168.124.100
CONFIG_REDIS_HOST=192.168.124.100
CONFIG_REDIS_PORT=6379
CONFIG_AODH_KS_PW=50ed9d4eac6e4b28
CONFIG_TROVE_DB_PW=PW_PLACEHOLDER
CONFIG_TROVE_KS_PW=PW_PLACEHOLDER
CONFIG_TROVE_NOVA_USER=trove
CONFIG_TROVE_NOVA_TENANT=services
CONFIG_TROVE_NOVA_PW=PW_PLACEHOLDER
CONFIG_SAHARA_DB_PW=PW_PLACEHOLDER
CONFIG_SAHARA_KS_PW=PW_PLACEHOLDER
CONFIG_NAGIOS_PW=2a3f392bc306490d

(2)修改openstack.txt文件,修改的内容如下
CONFIG_DEFAULT_PASSWORD=123456
CONFIG_SWIFT_INSTALL=n
CONFIG_NAGIOS_INSTALL=n
CONFIG_CINDER_VOLUMES_SIZE=10G
CONFIG_PROVISION_DEMO=n
CONFIG_LBAAS_INSTALL=y
CONFIG_NEUTRON_FWAAS=y
CONFIG_NEUTRON_VPNAAS=y
CONFIG_CONTROLLER_HOST=192.168.124.200
CONFIG_COMPUTE_HOSTS=192.168.124.201
CONFIG_NETWORK_HOSTS=192.168.124.201
(3)查看修改之后的openstack.txt文件中安装哪些
grep -vE '^$|^#' openstack.txt |grep y
CONFIG_MARIADB_INSTALL=y
CONFIG_GLANCE_INSTALL=y
CONFIG_CINDER_INSTALL=y
CONFIG_NOVA_INSTALL=y
CONFIG_NEUTRON_INSTALL=y
CONFIG_HORIZON_INSTALL=y
CONFIG_CEILOMETER_INSTALL=y
CONFIG_AODH_INSTALL=y
CONFIG_GNOCCHI_INSTALL=y
CONFIG_CLIENT_INSTALL=y
CONFIG_RH_OPTIONAL=y
CONFIG_SSL_CACERT_KEY_FILE=/etc/pki/tls/private/selfkey.key
CONFIG_SSL_CACERT_SELFSIGN=y
CONFIG_SSL_CERT_SUBJECT_L=City
CONFIG_CINDER_VOLUMES_CREATE=y
CONFIG_NOVA_MANAGE_FLAVORS=y
CONFIG_NOVA_LIBVIRT_VIRT_TYPE=%{::default_hypervisor}
CONFIG_LBAAS_INSTALL=y
CONFIG_NEUTRON_METERING_AGENT_INSTALL=y
CONFIG_NEUTRON_FWAAS=y
CONFIG_NEUTRON_VPNAAS=y
CONFIG_HEAT_CFN_INSTALL=y
CONFIG_PROVISION_OVS_BRIDGE=y 

看到y的表示是需要安装的组件
(4)基于应答文件安装组件

packstack --answer-file=openstack.txt

(5)安装过程需要查看iptables状态,在controller和computer节点

systemctl status iptables24

如果发现iptables处于active状态,需要停掉

systemctl stop iptables

(6)看到如下说明安装成功

192.168.124.200_controller.pp:                       [ DONE ]            
Applying 192.168.124.201_network.pp
192.168.124.201_network.pp:                          [ DONE ]         
Applying 192.168.124.201_compute.pp
192.168.124.201_compute.pp:                          [ DONE ]         
Applying Puppet manifests                            [ DONE ]
Finalizing                                           [ DONE ]

 **** Installation completed successfully ******

10.配置rabbitmq

(1)启动rabbitmq的管理界面,controller节点操作

rabbitmq-plugins enable rabbitmq_management

(2)在浏览器访问
192.168.124.200:15672
账号:guest
密码:guest
出现如下界面
在这里插入图片描述
11.登陆openstack的dashboad界面
在浏览器输入:
192.168.124.200
账号:admin
密码:16e424911af144ca
登陆之后显示如下界面
在这里插入图片描述
获取密码的方法,在controller节点上,可以看到PASSWORD是16e424911af144ca
cd /root && cat keystonerc_admin
显示如下所示
unset OS_SERVICE_TOKEN
export OS_USERNAME=admin
export OS_PASSWORD=16e424911af144ca
export OS_AUTH_URL=http://192.168.124.200:5000/v2.0
export PS1=’[\u@\h \W(keystone_admin)]$ ’
export OS_TENANT_NAME=admin
export OS_REGION_NAME=RegionOne

3-1准备controller节点和computer节点的实验环境17:41

3-2安装openstack-初始化openstack各节点机器11:12

3-3openstack安装-规划openstack要安装的各组件23:01

3-4在控制节点和计算节点安装openstack组件15:58

3-5配置rabbitmq-配置和安装rabbitmq管理界面03:23

3-6配置openstack的Horizon03:07

第四章 openstack组件配置和优化

4-1优化Keystone组件-优化配置文件和应用场景介绍15:30
4-2优化Glance组件-优化配置文件和应用场景介绍04:30
4-3优化Nova组件-优化配置文件和应用场景介绍19:59
4-4优化Controller节点上的Neutron组件07:14
4-5优化网络节点上Neutron组件12:01

第五章 创建Project和User,给User分配权限

5-1创建Project项目,创建User用户,对User授权08:27

第六章 制作openstack需要的镜像

6-1制作centos7镜像-128:02
6-2制作centos7镜像-217:50
第七章 openstack使用
7-1上传centos7镜像到openstack环境04:44
7-2在openstack中创建云主机类型03:55
7-3创建openstack环境的公网-采用vxlan类型网络04:30
7-4创建openstack环境的子网-创建子网和分配ip地址池10:46
7-5创建租户的网络-创建子网和IP地址池07:14
7-6创建路由-实现和外网通信04:22
7-7通过openstack创建一个centos云主机-完整流程演14:00
7-8openstack安全策略讲解-创建安全规则11:59
7-9创建云主机需要的卷-为云主机添加卷(相当于磁盘)05:30

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值