try packstack the 4th
前面说不安装heat服务后,8G内存能剩2G,尝试进一步优化
--os-swift-install=n #swift是做分布式OBS存储的,可能作为glance的后端存储。但这里glance的后端存储是用的file,给Image做snapshot也与swift无关。
--os-ceilometer-install=n --os-aodh-install=n #这2个监控、警告,在生产环境才有用
--service-workers=1 #手工修改,改成CPU核数的一半(默认等于CPU核数)
ECS是4c2核的,所以就service-workers改成1 默认是2按核数
ECS加盘容易,所以--cinder-volumes-create=n,然后手工创建vg(cinder-volumes),需要yum安装 lvm2。创建vg只需要做一次,盘上就有了vg信息。
但物理机如果当初没有考虑,加盘或重新分区比较麻烦,所以还是--cinder-volumes-create=y自动创建文件loopback的vg
这样弄下来,ECS的8G内存还剩4G。下面是命令:
#ECS:
packstack --os-neutron-ml2-tenant-network-types=vxlan --os-neutron-l2-agent=openvswitch --os-neutron-ml2-type-drivers=vxlan,flat --os-neutron-ml2-mechanism-drivers=openvswitch --provision-demo=n --cinder-volumes-create=n --os-heat-install=n --os-swift-install=n --os-ceilometer-install=n --os-aodh-install=n --service-workers=1 --gen-answer-file /root/answers.txt
#物理机(16C,核数有6个)
packstack --os-neutron-ml2-tenant-network-types=vxlan --os-neutron-l2-agent=openvswitch --os-neutron-ml2-type-drivers=vxlan,flat --os-neutron-ml2-mechanism-drivers=openvswitch --provision-demo=n --os-heat-install=n --os-swift-install=n --os-ceilometer-install=n --os-aodh-install=n --service-workers=3 --gen-answer-file /root/answers.txt
关于answer-file里面有关cinder的一些配置
# Storage backend to use for the Block Storage service; valid options are: ['lvm', 'gluster', 'nfs', 'vmdk', 'netapp', 'solidfire']
CONFIG_CINDER_BACKEND=lvm
# Specify 'y' to create the Block Storage volumes group. That is, Packstack creates a raw disk image in /var/lib/cinder, and mounts it using a loopback device. This should only be used for testing on a proof-of-concept installation of the Block Storage service (a file-backed volume group is not suitable for production usage).
CONFIG_CINDER_VOLUMES_CREATE=y
# Specify a custom name for the lvm cinder volume group
CONFIG_CINDER_VOLUME_NAME=cinder-volumes
# Size of Block Storage volumes group. Actual volume size will be extended with 3% more space for VG metadata. Remember that the size of the volume group will restrict the amount of disk space that you can expose to Compute instances, and that the specified amount must be available on the device used for /var/lib/cinder.
CONFIG_CINDER_VOLUMES_SIZE=20G
最后是,内部虚拟网络内的cirros实例和外部网络的连通
#创建网络的--provider-physical-network public 改为 extnet 试试
#删掉创建子网的 --no-dhcp,添加分配IP池参数
#以下命令为修改后的
openstack network create --external --provider-network-type flat --provider-physical-network extnet public_network
openstack subnet create --network public_network --subnet-range 10.0.0.0/24 --allocation-pool start=10.0.0.5,end=10.0.0.9 --gateway 10.0.0.1 public_subnet
openstack router set --external-gateway public_network admin-router
openstack router list --long
External gateway info
{"network_id": "4b1e1e3b-90f5-4edf-9081-641f56a03f81", "enable_snat": true, "external_fixed_ips": [{"subnet_id": "d4d6ef57-06b5-45df-9b31-f55033c3a858", "ip_address": "10.0.0.159"}]}
openstack port list --long 看router上连外网的这个端口的状态是DOWN
Device Owner |
Status | DOWN
使用修改后的命令,就变成ACTIVE了。
并且Private网络的里cirros实例,可以Ping通router的另一端的router_gateway接口(10.0.0.6;其中0.5是DHCP服务接口的IP)
下面是利用eth0来让openstack连接到外部网络,需要从把eth0从原有的网络里拿出来,加入到br-ex上
修改静态网络配置信息。主要是devicetype(ovs),type,OVS_BRIDGE等属性。把eth0的相关IP信息都移动给br-ex
ifcfg-br-ex:
DEVICE="br-ex"
#BOOTPROTO="dhcp"
ONBOOT="yes"
TYPE="OVSBridge"
DEVICETYPE="ovs"
#PERSISTENT_DHCLIENT="yes"
IPADDR=10.0.0.100
PREFIX=24
GATEWAY=10.0.0.1
DNS1=100.125.136.29
DNS2=100.125.1.250
DEFROUTE=yes
ifcfg-eth0:
DEVICE="eth0"
#BOOTPROTO="dhcp"
ONBOOT="yes"
TYPE="OVSPort"
#PERSISTENT_DHCLIENT="yes"
DEVICETYPE=ovs
OVS_BRIDGE=br-ex
重启network服务,发现eth0上还有IP,可以 ip addr del 10.0.0.100/24 dev eth0 去掉
也可以重启一下机器去eth0的IP
这时,ssh到ecs的连接就断了。通过VNC进控制台,发现ecs ping 10.0.0.1网关不通。
但是与openstack里的router的接口ping了一下都是通的,ping cirros的浮动IP(10.0.0.8),不通,应该是默认安全组没有开放任何端口的原因。
ssh到ecs还是不通,通过抓包,发现eth0和br-ex都有ssh 22 tcp sync包进来,但是没有回应包。
arp -an也看到没有获取到10.0.0.1网关的MAC。原因,应该是ecs的网关
做了MAC校验,只响应来源IP和MAC正确的请求包。
而网关链路不通,就无法给22请求连接回复包,也就没有回复包,因为这个包无法构造啊。
后来通过
ovs-vsctl set bridge br-ex other-config:hwaddr=<MAC_ADDRESS_OF_eth0>
这个命令将br-ex的MAC设置和eth0一样,问题就迎刃而解了。
(实体机没这个问题,改完ifcfg-*配置文件重启机器,br-ex就和eth0一样的MAC)
此时ssh到ecs就恢复了。
cirros虚拟机可以访问到ecs(相当于cirros所在的Openstack内部网络来说,这就是外部网络了)
但是访问不到同一网段的其他的ecs(没有路由),其他的ecs也访问不到cirros。
cirros竟然ping不通自己的浮动IP(0.8)
而ecs可以通过cirros的浮动IP来访问到cirros
cirros虚拟机不能访问Internet,原因是路由问题
1 10.10.0.1 (10.10.0.1) 0.234 ms 0.250 ms 0.272 ms
2 10.0.0.8 (10.0.0.8) 3006.891 ms !H 3006.160 ms !H 3005.824 ms !H
是云环境的原因。物理机这些问题就没有。
ping是可以通的,但是做traceroute的话,会跑完30个hops,可能是路由过程中openstack内部阻塞了icmp报文。
$ traceroute 192.168.0.1
traceroute to 192.168.0.1 (192.168.0.1), 30 hops max, 46 byte packets
1 10.0.0.1 (10.0.0.1) 0.221 ms 0.189 ms 0.055 ms
2 * * *
...
30 * * *
从其他虚拟化平台导出镜像(比如ESXi的ovf格式),在这里导入。并且disk_bus改为sata,否则启动会卡住报错找不到root分区(原disk应该是scsi)
openstack image create --disk-format vmdk --container-format ovf --property hw_disk_bus="sata" --file <path-to-ovf-file> <image-name>
最后汇总一下自定义参数安装后的配置命令
neutron net-create admin-private
neutron subnet-create admin-private 10.0.0.0/24 --name admin-private-subnet --dns-nameserver 114.114.114.114
openstack image create --disk-format qcow2 --container-format bare --public --file ./cirros-0.5.1-x86_64-disk.img cirros
openstack server create --image cirros --flavor m1.tiny --network admin-private cirros-admin1
openstack router create admin-router
openstack router add subnet admin-router admin-private-subnet
openstack network create --external --provider-network-type flat --provider-physical-network extnet public_network
openstack subnet create --network public_network --subnet-range 192.168.0.0/24 --allocation-pool start=192.168.0.105,end=192.168.0.110 --gateway 192.168.0.1 public_subnet
openstack router set --external-gateway public_network admin-router
- 点赞
- 收藏
- 关注作者
评论(0)