云计算部署与管理02-云计算和openstack

1.云计算

1.1云计算

  • 云计算是一种服务

    -基于互联网的相关服务的增加,使用和交付模式

    -这种模式提供可用的,便捷的,按需的网络访问,进入可配置的计算资源共享池

    -这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互

    -通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源

  • IaaS
    -IaaS(Infrastructure as a Service),即基础设施即服务,有时候也叫做Hardware-as-a-Service

    -提供给消费者的服务是对所有计算基础设施的利用,包括处理cpu,内存,存储,网络和其他的计算资源,用户能够部署和运行任意软件,包括操作系统和应用程序

    -IaaS通常分为三种用法:公有云,私有云和混合云

  • PaaS

    -PaaS(Platform-as-a-Service),意思是平台即服务

    -以服务平台或者开发环境作为服务进行提供就成为了PaaS

    -PaaS运营商所需提供的服务,不仅仅是单纯的基础平台,还针对该平台的技术支持服务,甚至针对改平台而进行的应用系统开发,优化等服务

    -简单地说,PaaS平台是指云环境中的应用基础设施服务,也可以说是中间件即服务

  • SaaS

    -SaaS(Softtware-as-a-Service)

    -软件即服务,是一种通过Internet提供软件的模式,厂商将应用软件统一部署在自己的服务器上,客户可以根据自己实际需求,通过互联网向厂商订购所需的应用软件服务

    -用户不用再购买软件,而是向提供商租用基于web的软件,来管理企业经营活动,不用对软件进行维护,提供商会全权管理和维护软件,同时也提供软件的离线操作和本地数据存储

1.2什么是云?

  • 现阶段广为接受的是美国国家标准与技术研究院(NIST)定义:

    -云计算是一种按使用量付费的模式,这种模式提供可用的,便捷的按需的网络访问,进入可配置的计算资源共享池(包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入少量的管理工作,或与服务供应商进行很少的交互

2.openstack

2.1什么是openstack?

  • openstack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的项目
  • openstack是一套IasS解决方案
  • openstack是一个开源的云计算管理平台
  • 以Apache许可证为授权

2.2openstack结构图

在这里插入图片描述

2.3openstack七大组件

  • Horizon (Dashboard,本质appache,php;管理主机安装)

    -用于管理Openstack各种服务的,基于web的管理接口;

    -通过图形界面实现创建用户,管理网络,启动实例等操作.

  • Keystone (Identity Service,管理主机安装)

    -为其他服务提供认证和授权的集中身份管理服务;

    -也提供了集中的目录服务;

    -支持多种身份认证模式,如密码认证,令牌认证,以及AWS(亚马孙web服务)登录;

    -为用户和其他服务提供了SSO认证服务;

    -管理Domains、Projects、Users、Groups、Roles

  • Neutron(Networking,Quantunm,所有主机安装,有专门的软件,图形操作,可以看见网络拓扑)

    -一种软件定义网络服务

    -用于创建网络,子网,路由器,管理浮动IP地址

    -可以实现虚拟交换机,虚拟路由器

    -可用于在项目中创建VPN

    -提供云计算的网络虚拟化技术,为OpenStack其他服务提供网络连接服务。为用户提供接口,可以定义Network、Subnet、Router,配置DHCP、DNS、负载均衡、L3服务,网络支持GRE、VLAN。

    -插件架构支持许多主流的网络厂家和技术,如OpenvSwitch。

  • Cinder(Volume Service)

    -为虚拟机管理存储卷的服务

    -为运行在Nova中的实例提供永久的块存储

    -可以通过快照进行数据备份

    -经常应用在实例存储环境中,如数据库文件

  • Glance(Image Store)

    -扮演虚拟机镜像注册的角色

    -允许用户为直接存储拷贝服务器镜像

    -这些镜像可以用于新建虚拟机的模板

    -一套虚拟机镜像查找及检索系统,支持多种虚拟机镜像格式(AKI、AMI、ARI、ISO、QCOW2、Raw、VDI、VHD、VMDK)

  • Nova(Compute Node,被管理端安装的客户端,除了管理主机不装,其余都装,管理虚拟机的服务,代理和管家)

    -在节点上用于管理虚拟机的服务

    -Nova是一个分布式的服务,能够与Keystone交互实现认证,与Glance交互实现镜像管理

    -Nova被设计成在标准硬件上能够水平扩展

    -启动实例时,如果有则需要下载镜像

  • Swift(Object Store,没有的则用本机硬盘存储)

    -一套用于在大规模可扩展系统中通过内置冗余及高容错机制实现对象存储的系统,允许进行存储或者检索文件。

    -可为Glance提供镜像存储,为Cinder提供卷备份服务。

3.部署安装openstack

3.1基本环境准备

3.1.1基本配置

  • 配置三台虚拟机
    2CPU,6G 内存,50G 硬盘
    2CPU,4.5G 内存,100G 硬盘
  • 配置静态IP ifcfg-eth0
    openstack : 192.168.1.10
    nova: 192.168.1.11, 192.168.1.12
  • 配置主机名 /etc/hosts,能够相互 ping 通
  • 配置 dns 服务器 /etc/resolv.conf

3.1.2 方案

  • 此实验的整体方案需要三台机器,openstack作为主节点,nova01 和
    nova02作为额外节点,真机做为DNS转发和NTP的服务器(这里不再在表-1中体现),提供域名解析和时间同步服务,具体情况如表所示:
    在这里插入图片描述

3.1.3 步骤

步骤一:创建三台虚拟机
[student@room9pc01 ~]$ base-vm openstack nova01 nova02

[student@room9pc01 ~]$ virsh start openstack

[student@room9pc01 ~]$ virsh start nova01

[student@room9pc01 ~]$ virsh start nova02

2)opensatck主机扩容为50G

[student@room9pc01 ~]$ virsh blockresize --path /var/lib/libvirt/images/openstack.img --size 50G openstack

[student@room9pc01~]$ virsh console openstack

[root@localhost ~]# /usr/bin/growpart /dev/vda 1

[root@localhost ~]# /usr/sbin/xfs_growfs /

[root@localhost ~]# df -h

Filesystem     Size    Used     Avail	Use%   Mounted on

/dev/vda1      50G      914M     50G     2%        /

3)nova01 和 nova02 主机扩容为100G(以nova01为例)

[student@room9pc01 images]$ virsh blockresize --path /var/lib/libvirt/images/nova01.img --size 100G nova01

重新定义 '/var/lib/libvirt/images/nova01.img' 块设备大小

[root@localhost ~]# /usr/bin/growpart /dev/vda 1

[root@localhost ~]# /usr/sbin/xfs_growfs /

[root@localhost ~]# df -h

Filesystem      	Size  	 	Used	   Avail 		Use% 		Mounted on
 /dev/vda1       	100G         917M      100G          1%              /

4)三台主机配置静态ip(以一台为例)

  • openstack:192.168.1.10
  • nova01: 192.168.1.11
  • nova02: 192.168.1.12

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

#Generated by dracut initrd
DEVICE="eth0"
ONBOOT="yes"
NM_CONTROLLED="no"
TYPE="Ethernet"
BOOTPROTO="static"   ==static静态,指定ip==
PERSISTENT_DHCLIENT="yes"
IPADDR=192.168.1.10
NEMASK=255.255.255.0
GATEWAY=192.168.1.254

[root@localhost ~]# systemctl restart network 重启网络服务程序或者直接重启机器也可
5)三台主机修改主机名,配置/etc/hosts,和/etc/resolv.conf文件(以一台为例)

[root@localhost ~]# hostname openstack

[root@localhost ~]# echo openstack > /etc/hostname

[root@localhost ~]# vim /etc/hosts

...
192.168.1.10 openstack
192.168.1.11 nova01
192.168.1.12 nova02

[root@localhost ~]# vim /etc/resolv.conf 去掉search开头的行

; generated by /usr/sbin/dhclient-script
nameserver 192.168.1.254

拓展:

为什么要删除search行

  • 完整主机名,即FQDN(完全合格域名)为例如:www.baidu.com 头部+域名

    例如:search行中有dev.com aaa.com bbb.com …

  • 查询主机名,因为主机名后面没有点,就认为是主机名,所以先添加search里的每一项依次组成FQDN(完全合格域名)来查询,完全合格域名查询未找到,就再认为主机名是完全合格域名来查询。

    输入www后面没有 “.”,所以dns认为www是主机名,必须先添加search里的每一项依次组成FQDN(完全合格域名)来查询,即www.dev.com www.aaa.com www.bbb.com当访问不成功时,才访问www

  • 查询主机名,因为主机名中有点(不是末尾有点),就认为是完全合格域名,先用它来查询,查询失败就把它当成是主机名来进行,添加search里的每一项组成FQDN(完全合格域名)来查询。

    输入www.baidu,因为有".",dns认为是完全合格域名,但不是末尾有".",所以先用www.baidu访问,当访问不成功时,才把它当成是主机名来进行,添加search里的每一项组成FQDN(完全合格域名)来查询,即www.baidu.dev.com www.baidu.aaa.com www.baidu.bbb.com访问

  • 查询主机名,因为主机名中末尾有点,则认为是完全合格域名,只用它来查询(不会再添加search里的每一项)。查询次数会与search里项域名个数有关。

    输入www.baidu.,因为末尾有".",所以dns把你当做完全合格域名,只用它来查询(不会再添加search里的每一项)。查询次数会与search里项域名个数有关。这里表示会查询3次

6)修改三台主机的内存(openstack 6G,nova01 和nova02 4G) 前提是关掉这三台机器
[student@room9pc01 ~]$ virsh edit openstack

... 
 <memory unit='KiB'>6588282</memory>
  <currentMemory unit='KiB'>6588282</currentMemory>
...

[student@room9pc01 ~]$ virsh edit nova01

...
  <memory unit='KiB'>4588282</memory>
  <currentMemory unit='KiB'>4588282</currentMemory>
...

[student@room9pc01 ~]$ virsh start openstack

[student@room9pc01 ~]$ virsh start nova01

[student@room9pc01 ~]$ virsh start nova02

3.2测试时间服务器

  • 修改 openstack,nova01,nova02 的时间服务器
  • 重启服务后验证配置

3.2.1步骤

步骤一:修改openstack,nova01 和 nova02 的时间服务器(以一台为例)
[root@openstack ~]# vim /etc/chrony.conf

...
server 192.168.1.254 iburst

[root@openstack ~]# systemctl restart chronyd

步骤二:验证

[root@openstack ~]# chronyc sources -v

^* gateway                       3   6    37     6    -93ns[ +903ns] +/-   26ms

3.3配置yum仓库

  • 配置yum仓库,软件仓库一共 4 个

3.3.1 步骤

  • 三台主机配置yum源(以一台主机为例,共10670个软件包)

[student@room9pc01 ~]$ cd /linux-soft/04/openstack/

[student@room9pc01 openstack]$ ls

cirros.qcow2  RHEL7-extras.iso  RHEL7OSP-10.iso  small.qcow2

[student@room9pc01 openstack]$ mkdir /var/ftp/extras

[student@room9pc01 openstack]$ mkdir /var/ftp/openstack

[root@room9pc01 ~]# ls /var/ftp/extras openstack同理

comps.xml  Packages  ==repodata==  version.txt   ==repodata是能被yum挂载的根本,只有该目录下有repodata,该目录才能被挂载为yum仓库==
  • 真机临时挂载

[student@room9pc01 openstack]$ mount RHEL7-extras.iso /var/ftp/extras

mount: /dev/loop1 写保护,将以只读方式挂载

[student@room9pc01 openstack]$ mount RHEL7OSP-10.iso /var/ftp/openstack

mount: /dev/loop2 写保护,将以只读方式挂载
  • 真机永久挂载
    [root@room9pc01 ~]# vim /etc/fstab
/linux-soft/04/openstack/RHEL7-extras.iso  /var/ftp/extras     iso9660   defaults   0   0
/linux-soft/04/openstack/RHEL7OSP-10.iso   /var/ftp/openstack  iso9660   defaults   0   0

[root@openstack ~]# vim /etc/yum.repos.d/local.repo

[local_repo]
name=CentOS-$releasever - Base
baseurl="ftp://192.168.1.254/centos-1804"
enabled=1
gpgcheck=0
[RHEL7-extras]
name=RHEL7-extras
baseurl="ftp://192.168.1.254/extras"
enabled=1
gpgcheck=0
[RHEL7OSP-package]
name=RHEL7OSP-package
baseurl="ftp://192.168.1.254/openstack/rhel-7-server-openstack-10-rpms"
enabled=1
gpgcheck=0
[RHEL7OSP-devtools]
name=RHEL7OSP-devtools
baseurl="ftp://192.168.1.254/openstack/rhel-7-server-openstack-10-devtools-rpms"
enabled=1
gpgcheck=0

[root@openstack ~]# scp /etc/yum.repos.d/local.repo 192.168.1.11:/etc/yum.repos.d/ 传输文件给nova01

root@192.168.1.11's password:   ==输入密码a==
local.repo  100%  490   484.4KB/s   00:00                                                                                        

[root@openstack ~]# scp /etc/yum.repos.d/local.repo 192.168.1.12:/etc/yum.repos.d/ 传输文件给nova02

root@192.168.1.12's password: ==输入密码a==
local.repo 100%  490   484.4KB/s   00:00

3.4安装额外软件包

1)安装额外软件包(三台机器操作,nova01同nova02操作)
[root@openstack]# yum install -y python-setuptools

[root@nova02]# yum install -y qemu-kvm libvirt-client libvirt-daemon libvirt-daemon-driver-qemu python-setuptools

[root@nova02]#systemctl restart libvirtd 需要重启libvirtd服务

4.部署openstack

4.1 检查基础环境

  • 是否卸载firewalld 和 NetworkManager
  • 检查配置主机网络参数(静态IP)
  • 主机名必须能够相互 ping 通
  • 检查配置主机yum源(4个,10670)
  • 检查NTP服务器是否可用
  • 检查 /etc/resolv.conf 不能有 search 开头的行
  • 依赖软件包是否安装

1)是否卸载firewalld 和 NetworkManager

[root@openstack ~]# rpm -qa | grep -i NetworkManager*

[root@openstack ~]# rpm -qa | grep -i firewalld*

2)检查配置主机网络参数

[root@openstack ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0

#Generated by dracut initrd
DEVICE="eth0"
ONBOOT="yes"
NM_CONTROLLED="no"
TYPE="Ethernet"
BOOTPROTO="static"
PERSISTENT_DHCLIENT="yes"
IPADDR=192.168.1.10
NEMASK=255.255.255.0
GATEWAY=192.168.1.254

3)验证主机名是否互通
[root@openstack ~]# ping openstack

64 bytes from openstack (192.168.1.10): icmp_seq=1 ttl=255 time=0.023 ms
64 bytes from openstack (192.168.1.10): icmp_seq=2 ttl=255 time=0.027 ms

[root@openstack ~]# ping nova01

64 bytes from nova01 (192.168.1.11): icmp_seq=1 ttl=255 time=0.139 ms

[root@openstack ~]# ping nova02

64 bytes from nova02 (192.168.1.12): icmp_seq=1 ttl=255 time=0.251 ms

4)检查配置主机yum源

[root@openstack ~]# yum clean all

[root@openstack ~]# yum repolist

已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
源标识                                                          源名称                                                           状态
RHEL7-extras                                                    RHEL7-extras                                                        76
RHEL7OSP-devtools                                               RHEL7OSP-devtools                                                    3
RHEL7OSP-package                                                RHEL7OSP-package                                                   680
local_repo                                                      CentOS-7 - Base                                                  9,911
repolist: 10,670

5)检查时间同步是否可用
[root@openstack ~]# chronyc sources -v

^* gateway                       3   7   377    28    +31us[  +89us] +/-   25ms

6)检查/etc/resolv.conf 不能有 search 开头的行
[root@openstack ~]# cat /etc/resolv.conf

; generated by /usr/sbin/dhclient-script
nameserver 192.168.1.254

7)检查是否安装额外软件包(nova02同nova01操作)

[root@openstack ~]# rpm -q python-setuptools

python-setuptools-0.9.8-7.el7.noarch

[root@nova01 ~]# rpm -q python-setuptools

python-setuptools-0.9.8-7.el7.noarch

[root@nova01 ~]# systemctl status libvirtd

● libvirtd.service - Virtualization daemon
Active: active (running)

4.2部署Openstack

4.2.1 问题

  • 通过packstack部署Openstack
  • 根据相关日志文件进行排错

4.2.2 步骤

步骤一:安装packstack
[root@openstack ~]# yum install -y openstack-packstack 安装openstack-packstack

[root@openstack ~]# packstack --gen-answer-file answer.ini 创建通用应答文件answer.ini,answer.ini与answer.txt是一样的,只是用vim打开answer.ini文件有颜色

Packstack changed given value  to required value /root/.ssh/id_rsa.pub

[root@openstack ~]# vim answer.ini 编辑应答文件answer.ini

42  CONFIG_SWIFT_INSTALL=n
45  CONFIG_CEILOMETER_INSTALL=n                   //计费相关模块
49  CONFIG_AODH_INSTALL=n                         //计费相关模块
53  CONFIG_GNOCCHI_INSTALL=n                     //计费相关模块
75  CONFIG_NTP_SERVERS=192.168.1.254   //时间服务器的地址
98  CONFIG_COMPUTE_HOSTS=192.168.1.11
102 CONFIG_NETWORK_HOSTS=192.168.1.10,192.168.1.11
 333 CONFIG_KEYSTONE_ADMIN_PW=a     //修改管理员的密码
840 CONFIG_NEUTRON_ML2_TYPE_DRIVERS=flat,vxlan   //驱动类型
 910 CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-ex  //物理网桥的名称
 921 CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:eth0   
//br-ex桥的名称与eth0连接,管理eth0,网桥与哪个物理网卡连接
1179 CONFIG_PROVISION_DEMO=n   //DEMO是否测试

[root@openstack ~]# packstack --answer-file=answer.ini 运行应答文件answer.ini

Welcome to the Packstack setup utility
The installation log file is available at: /var/tmp/packstack/20190423-170603-b43g_i/openstack-setup.log
Installing:
Clean Up                                             [ DONE ]
Discovering ip protocol version                      [ DONE ]
root@192.168.1.11's password: 
root@192.168.1.10's password: 
Setting up ssh keys
 **** Installation completed successfully ******        //出现这个为成功

4.3网络配置

4.3.1网络拓扑

在这里插入图片描述
在这里插入图片描述

4.3.2查看外部OVS网桥及其端口

  • 查看外部OVS网桥及其端口
  • 验证OVS配置

1)查看br-ex网桥配置(br-ex为OVS网桥设备)
[root@openstack ~]# cat /etc/sysconfig/network-scripts/ifcfg-br-ex

ONBOOT="yes"
NM_CONTROLLED="no" 
IPADDR="192.168.1.10"
PREFIX=24
GATEWAY=192.168.1.254
DEVICE=br-ex
NAME=br-ex
DEVICETYPE=ovs
OVSBOOTPROTO="static"
TYPE=OVSBridge

2)查看eth0网卡配置(eth0为外部OVS网桥的接口)
[root@openstack ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
NAME=eth0
DEVICETYPE=ovs
TYPE=OVSPort
OVS_BRIDGE=br-ex
ONBOOT=yes
BOOTPROTO=none

3)验证OVS配置
[root@openstack ~]# ovs-vsctl show

 Bridge br-ex
        Controller "tcp:127.0.0.1:6633"
            is_connected: true
        fail_mode: secure
        Port br-ex
            Interface br-ex
                type: internal
        Port phy-br-ex
            Interface phy-br-ex
                type: patch
                options: {peer=int-br-ex}
        Port "eth0"
            Interface "eth0"
    ovs_version: "2.5.0"

5.openstack操作基础

5.1horizon配置

5.1.1 概述

  • horizon是一个用以管理,控制OpenStack服务的Web控制面板,也称之为Dashboard仪表盘
  • 可以管理实例,镜像,创建密钥对,对实例添加卷,操作Swift容器等.除此之外,用户还可以在控制面板中使用终端(console)或VNC直接访问实例
  • 基于python的django web框架进行开发

5.1.2功能与特点

  • 实例管理:创建,终止实例,查看终端日志,VNC连接,添加卷等
  • 访问与安全管理:创建安全群组,管理密钥对,设置浮动ip
  • 偏好设定:对虚拟硬件模板可以进行不同偏好设定
  • 镜像管理:编辑或删除镜像
  • 用户管理:创建用户等
  • 卷管理:创建卷和快照等
  • 对象存储处理:创建\删除容器和对象

5.1.3页面访问

1)浏览器访问

[root@room9pc01 ~]# firefox 192.168.1.10 //访问失败

2)需要改配置文件并重新加载 修复bug,软件配置bug

[root@openstack ~]# vim /etc/httpd/conf.d/15-horizon_vhost.conf

  +35   WSGIProcessGroup apache
  +36   WSGIApplicationGroup 	%{GLOBAL}     //添加这一行

[root@openstack conf.d]# apachectl graceful //重新载入配置文件

3)浏览器访问,出现页面,如图所示:

[root@room9pc01 ~]# firefox 192.168.1.10
在这里插入图片描述

5.2登录管理

1)查看用户名和密码

[root@openstack ~]# ls

answer.ini   keystonerc_admin   	==keystonerc_admin新生成的文件,里面有用户名和密码==

[root@openstack ~]# cat keystonerc_admin

unset OS_SERVICE_TOKEN
    export OS_USERNAME=admin  //用户名
    export OS_PASSWORD=a  //密码
    export OS_AUTH_URL=http://192.168.1.10:5000/v2.0
    export PS1='[\u@\h \W(keystone_admin)]\$ '
export OS_TENANT_NAME=admin
export OS_REGION_NAME=RegionOne

2)在火狐浏览器中输入用户名和密码,登录后页面如图所示:在这里插入图片描述

安装openstack可能会出现的错误以及排错方法

1)ntp时间不同步,如图所示:在这里插入图片描述
解决办法:查看ntp时间服务器,是否出现号,若没有,查看配置文件,配置ntp服务器步骤在案例3,可以参考
[root@room9pc01 ~]# chronyc sources -v //出现
号代表NTP时间可用

^*120.25.115.20 2   6   17    62   -753us[-7003us] +/-   24ms

[root@openstack ~]# chronyc sources -v

^*192.168.1.254 3   9   377   504  +50us[-20us] +/-   24ms

[root@nova ~]# chronyc sources -v

^*192.168.1.254 3   9   377   159  -202us[-226us] +/-   24ms

2)网桥名称写错,如图所示:
在这里插入图片描述
解决办法:检查配置文件
[root@openstack ~]# vim answer.ini

+921 CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:eth0   //br-ex桥的名称与eth0连接,管理eth0,网桥与哪个物理网卡连接

3)若/root/.ssh/id_rsa.pub,提示password,同样是配置文件没有写对,如图所示:在这里插入图片描述

4)yum源没有配置正确,如图所示:
在这里插入图片描述
解决办法:检查yum是否为10650个软件包,查看是否是yum源没有配置正确,之后安装oprnstack-dashboard
5)出现Cannot allocate memory,如图所示:
在这里插入图片描述
解决办法:
内存不足,重新启动主机
6)出现/usr/bin/systemctl start openvswith … falied,说明是ssse3指令集的错误,如图所示:在这里插入图片描述
解决办法:编辑openstack的xml文件,在里面添加

  <cpu mode='host-passthrough'></cpu>

7)若出现 Could not prefetch… ‘openstack’。 如图所示:
在这里插入图片描述
配置文件里面有中文符号
9)访问openstack出错
在这里插入图片描述
没有修改Apache配置文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值