目录
环境说明
先电2.4
Centos7-1804
VMware16
secureCRT 8.3和secureFX 8.3
主要说明在控制节点和计算节点上,通过脚本的形式,安装OpenStack的iaas安装步骤和创建可运行的云主机。提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。
新建虚拟机


这里选择稍后安装,然后点击下一步

选择Linux 版本选择Centos 7 64位,然后点击下一步

我们先创建控制节点,名字改为controller,存储位置自行选择

内存和处理器数量根据个人而定(我这里只是演示一个步骤,随便选的,也可以按照我这样设,搭个最小化的来练习还是没问题的)


第一张网卡选择仅主机模式

默认推荐就行


创建一个新的虚拟磁盘

虚拟机的硬盘是一个虚拟的,实际上以文件夹的形式存在于宿主机上的。如果虚拟机所在的宿主机盘符只有50G,那么虚拟机最多能占用50G的内存。


到这里就创建好了,点击完成

点击编辑虚拟机设置

处理器必须开启虚拟化,没用的硬件可以移除掉

放入准备好的镜像

计算节点需要添加一块硬盘来放置给cinder(块存储)和swift(对象存储)服务预留的。

再添加一块网卡为NAT

拉到最下面设置为中文,开始安装

默认最小化安装,点击安装位置

点击配置分区,然后点完成(演示步骤,硬盘大小默认设置,真实环境建议高于默认值)

点击创建

接受更改

然后开始安装(这里也可以直接在安装界面配置ip,也可以使用命令配置)

设置root密码,我设置的是000000六个0

重启

在最小化界面,输入用户名root和密码就可以登陆了

controller安装完成后,关机,然后克隆一个compute节点的虚拟机

从虚拟机当前状态,创建完整克隆

虚拟机名称改为compute,点击完成

[root@controller ~]#hostsnamectl set-hostname controller
ctrl+D退出重新登陆
[root@controller ~]#ip a #查看网卡名称
[root@controller ~]# vi /etc/sysconfig/network-scripts/ifcfg-(第一块网卡名,仅主机模式那块)
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.100.10
PREFIX=24
GATEWAY=192.168.100.1
[root@controller ~]# vi /etc/sysconfig/network-scripts/ifcfg-(第二块网卡名,NAT模式那块)
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.200.10
PREFIX=24
[root@controller ~]# systemctl restart network #重启网卡
[root@controller ~]#hostnamectl set-hostname compute
Ctrl+D #退出重新登录
[root@controller ~]#ip a #查看网卡名称
[root@controller ~]# vi /etc/sysconfig/network-scripts/ifcfg-(第一块网卡名,仅主机模式那块)
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.100.20
PREFIX=24
GATEWAY=192.168.100.1
[root@controller ~]# vi /etc/sysconfig/network-scripts/ifcfg-(第二块网卡名,NAT模式那块)
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.200.20
PREFIX=24
[root@controller ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.10 controller
192.168.100.20 compute
[root@controller ~]# scp /etc/hosts 192.168.100.12://etc/hosts
[root@controller ~]# root@192.168.100.20's password: #输入密码000000
hosts 100% 207 77.7KB/s 00:00
[root@compute ~]# systemctl restart network #重启网卡
systemctl stop firewalld
systemctl disable firewalld
iptables -F
iptables -X
iptables -Z
iptables-save
[root@controller ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@controller ~]# setenforce 0
[root@controller ~]# getenforce 0
使用secureFX上传XianDian-IaaS-V2.4和CentOS-7-x86_64-DVD-1804镜像到root目录下
[root@controller ~]# ls
anaconda-ks.cfg CentOS-7-x86_64-DVD-1804.iso XianDian-IaaS-V2.4.iso
挂载CentOS-7-x86_64-DVD-1804.iso
[root@controller ~]# mount -o loop /root/CentOS-7-x86_64-DVD-1804.iso /mnt/
[root@controller ~]# mkdir /opt/centos
[root@controller ~]# cp -rvf /mnt/* /opt/centos
[root@controller ~]# umount /mnt/
挂载XianDian-IaaS-V2.4
[root@controller ~]#mount -o loop /root/XianDian-IaaS-V2.4.iso /mnt/
[root@controller ~]#mkdir /opt/iaas
[root@controller ~]#cp -rvf /mnt/* /opt/iaas
[root@controller ~]#umount /mnt/
配置控制节点yum源
[root@controller ~]#cd /etc/yum.repos.d
[root@controller ~ yum.repos.d]#rm -rf * #清空yum初始文件
[root@controller ~ yum.repos.d]#vi centos.repo
[centos]
name=centos
baseurl=file:///opt/centos #注意这里是三个///
gpgcheck=0
enabled=1
[iaas]
name=iaas
baseurl=file:///opt/iaas/iaas-repo
gpgcheck=0
enabled=1
清除yum缓存
yum clean all
查看yum源
yum repolist
yum insatll -y vsftpd
修改vsftpd配置文件
vi /etc/vsftpd/vsftpd.conf
添加 anon_root=/opt/
#设置ftp开机自启
systemctl start vsftpd
systemctl enable vsftpd
[root@controller ~]#cd /etc/yum.repos.d
[root@controller ~ yum.repos.d]# rm -rf * #清空yum文件
[root@controller ~ yum.repos.d]#vi centos.repo
[centos]
name=centos
baseurl=ftp://192.168.100.10/centos
gpgcheck=0 #两个//,这里可以用浏览器输入ftp://ip地址看一下文件路径看一下是否正确
enabled=1
[iaas]
name=iaas
baseurl=ftp://192.168.100.10/iaas/iaas-repo
gpgcheck=0
enabled=1
清除yum缓存
yum clean all
查看yum源
yum repolist
yum install -y iaas-xiandian
yum install -y iaas-xiandian
[root@controller ~]#vi /etc/xiandian/openrc.sh
#可以使用 :%s/PASS=/PASS=000000/ 使所以带PASS的内容都设置为000000
需要注意的是:NTERFACE_IP=这里填对应节点IP
HOST_IP=192.168.100.10
HOST_PASS=000000
HOST_NAME=controller
HOST_IP_NODE=192.168.100.20
HOST_PASS_NODE=000000
HOST_NAME_NODE=compute
network_segment_IP=192.168.100.0/24
RABBIT_USER=openstack
RABBIT_PASS=000000
DB_PASS=000000
DOMAIN_NAME=demo
ADMIN_PASS=000000
DEMO_PASS=000000
KEYSTONE_DBPASS=000000
GLANCE_DBPASS=000000
GLANCE_PASS=00000
NOVA_DBPASS=000000
NOVA_PASS=00000
NEUTRON_DBPASS=000000
NEUTRON_PASS=000000
METADATA_SECRET=000000
INTERFACE_IP=192.168.100.10 #对应节点的IP地址
INTERFACE_NAME=ens34 #第二张网卡名称,也就是外网网卡
Physical_NAME=provider
minvlan=1 #网段
maxvlan=1000
CINDER_DBPASS=000000
CINDER_PASS=000000
BLOCK_DISK= sdb1(这里要填入的磁盘必须是空的,也就是在最开始说的那块新增的磁盘
SWIFT_PASS=000000
OBJECT_DISK=sdb1 #同上
STORAGE_LOCAL_NET_IP=192.168.100.10
HEAT_DBPASS=000000
HEAT_PASS=000000
ZUN_DBPASS=000000
ZUN_PASS=000000
KURYR_DBPASS=000000
KURYR_PASS=000000
CEILOMETER_DBPASS=000000
CEILOMETER_PASS=000000
AODH_DBPASS=000000
AODH_PASS=000000
BARBICAN_DBPASS=000000
BARBICAN_PASS=000000
#从controller节点拷贝过去,修改NTERFACE_IP=这里填对应节点IP
[root@controller ~]# scp /etc/xiandian/openrc.sh 192.168.100.12:/etc/xiandian/
Are you sure you want to continue connecting (yes/no)? #yes
Warning: Permanently added '192.168.100.12' (ECDSA) to the list of known hosts.
root@192.168.100.12's password: #000000
openrc.sh 100% 3161 841.5KB/s 00:00
先安装控制节点的脚本,全部安装完再安装计算节点的脚本,保险一点,避免出错
iaas-pre-host.sh #所有节点上执行此脚本
iaas-install-mysql.sh
iaas-install-keystone.sh
iaas-install-glance.sh
iaas-install-nova-controller.sh
iaas-install-neutron-controller.sh
iaas-install-dashboard.sh
iaas-install-cinder-controller.sh
iaas-install-swift-controller.sh
注意这里的后缀,controller装完再装compute
iaas-install-nova-compute.sh
iaas-install-neutron-compute.sh
iaas-install-cinder-compute.sh
iaas-install-swift-compute.sh
最小化部署完成,此时可以用浏览器访问:http://192.168.100.10/dashboard
在controller节点执行
[root@controller~]#source /etc/keystone/admin-openrc.sh
[root@controller~]#cd /opt/iaas/image
[root@controller~]#ls #可以查看当前的qcow2
[root@controller~]#glance image-create --name CentOS7.5 --disk-format qcow2 --container-format bare --progress < /opt/images/CentOS_7.5_x86_64_XD.qcow2 #通过glance命令创建镜像
[root@controller~]#openstack network create ext-net --provider-physical-network provider --provider-network-type flat --external
[root@controller~]#openstack network create int-net1 --provider-network-type vxlan --provider-segment 1
[root@controller~]#openstack subnet create ext-subnet --network ext-net --gateway 192.168.200.1 --subnet-range 192.168.200.0/24 --allocation-pool start=192.168.200.100,end=192.168.200.200 --dhcp
[root@controller~]#openstack subnet create int-subnet1 --network int-net1 --gateway 10.0.0.1 --subnet-range 10.0.0.0/24 --dhcp
[root@controller~]#openstack router create ext-router
[root@controller~]#openstack router set ext-router --external-gateway ext-net
[root@controller~]#openstack router add subnet ext-router int-subnet1
项目>网络>安全组>管理规则>添加规则(把原有的四个删掉,添加所有ICMP、所有TCP、所有UDP)

管理员>资源管理>云主机类型

#命令创建
openstack flavor create --ram 2048 --disk 20 --vcpus 2 Fmin
项目>资源管理>云主机>创建云主机

放入前面创建好的镜像


选择创建好的内外网,点击创建实例

#命令创建
nova boot --image <镜像> --flavor <云主机类型> --nic net-name=<外网> <云主机名称>
10、创建浮动IP并绑定至云主机
点击云主机名称,看看是否能够正常使用,点旁边的小箭头,绑定浮动IP,然后用CRT通过浮动IP进入创建的云主机,能用浮动IP进去,基本没什么问题了。

#命令创建
neutron floatingip-create extent
列出浮动IP列表
neutron floatingip-list
neutron port-list
绑定浮动IP
neutron floatingip-associate --fixed-ip-address <内网IP> <浮动IP地址ID> <内网IP地址ID>

出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
如何使用RSpec::Core::RakeTask初始化RSpecRake任务?require'rspec/core/rake_task'RSpec::Core::RakeTask.newdo|t|#whatdoIputinhere?endInitialize函数记录在http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/RakeTask#initialize-instance_method没有很好的记录;它只是说:-(RakeTask)initialize(*args,&task_block)AnewinstanceofRake
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法
我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge