openstack创建实例过程
- 前言
- 一、具体需求
- 二、操作步骤
- 1.创建flavor
- 2.创建network
- 命令创建
- 创建port
- 查看port详细信息
- stack方式创建
- 3.指定镜像
- 4.启动instance
- nova boot方式:
- stack方式:
- yaml文件:
- 检查port
- 总结
前言
最近有个需求是创建一个openstack的实例,只需要通过dashboard执行就好没啥好说的,但是这套openstack是没有dashboard的,全称都是字符界面敲命令,而且执行过程中经历各种坑、各种反复执行,让我非常的头疼,所以写到博客中记录下,方便以后有类似需求作为参照模板。
提示:以下是本篇文章正文内容,下面案例可供参考
一、具体需求
创建一个openstack实例,因为没有dashboard只能通过字符界面敲命令进行执行。
实例配置:
——》flavor: 2cpu 2G内存 50G硬盘
——》network 两个网络:
network1:valn 1364 10.185.255.248/29 gw 10.185.255.249
network2:vlan 964 172.28.48.117/28 gw 172.28.48.114
——》image:rhel-server-6.8-x86_64-dvd.iso
二、操作步骤
操作过程:
- 首先创建flavor,指定实例的内存大小、CPU个数和磁盘的容量*
- 接着创建network,为实例提供网络服务
- 接着指定镜像,镜像可以根据我们的需求来进行选择,但是官方网站下载的都是ISO镜像是不能直接使用的,我将他们转化成的qcow2格式上传到glance进行使用,这个操作会单独写一篇博客进行描述
- 最后使用nova boot将实例启动
1.创建flavor
#openstack flavor create --id 1010 --ram 2048 --disk 50 --vcpus 2 2vcpu_2GBmem_50GBdisk
注意:根据环境的而不同flavor要需要做一定的而配置,如果是原生的环境只需要执行创建命令执行就好,但是我这是公司的环境,compute节点上做了大页内存的配置,所以对flavor还需要设置一个关于大页内存的参数
查看环境上之前创建的flavor详细信息
#nova flavor-show 3
#nova help flavor-key
root@atlas:~# nova flavor-key 1010 set hw:mem_page_size=1048576
root@atlas:~# nova flavor-key 1010 set hw:cpu_policy=dedicated
root@atlas:~# nova flavor-show 1010
2.创建network
openstack中创建网络步骤:
- 先创建网络network
- 然后创建subnet,指定要使用网段和IP地址范围*
- 最后创建port绑定到创建的instance上面去
我使用的创建网络的方式有两种:
——》一种是下面介绍的手动将network、subnet依次进行创建然后在nova boot的时候应用就好;
——》还有一种就是stack方式,通过编写yaml文件将网络和instance一起创建;
注意:我在这次实验中使用第一种方式创建的网络应用到instance上面的时候,进入虚机之后网络状态的不正常的,ping不通各自网络的网关,所以我使用的是第二种方式stack方式来创建的网络。
命令创建
#neutron net-create --provider:network_type vlan --provider:segmentation_id 1364 --provider:physical_network default testvm
neutron subnet-create --name testvm-subnet --disable-dhcp testvm 10.185.255.248/29 --gateway 10.185.255.249
创建第二个网路的时候报错:
提示vlan已经使用,查看之后发现是已经创建过了,而且里面的subnet子网指定的地址池中的地址就是我们要设置的IP地址,所以是可以复用的
root@cic-1:~# neutron net-create --provider:network_type vlan
–provider:segmentation_id 964 --provider:physical_network default testvm2 Unable to create the network. The VLAN 964 on physical network
> default is in use. Neutron server returns request_ids:
[‘req-96f8d279-96be-4ca3-8363-96f4694d437c’]
创建port
根据需求,分配给instance的IP地址是固定的,而且只能使用分配的这一个,其他的地址还有安排,所以为了方便可以手动从subnet中将port创建出来然后在instance启动之后attach上去
#neutron net-list | grep test
#glance subnet-list | grep test
#neutron port-create --name testvm-subnet-port_1 --fixed-ip subnet_id=740915ed-48eb-419f-837a-053eca4197a3,ip_address=10.185.255.248 e8cde4f1-2daa-44f4-b98b-c76c95bd78ce
#neutron net-list | grep 172.28.48
#neutron subnet-list | grep 172.28.48
#neutron port-create --name 3th_floor_interaction_oam_new-subnet-port_1 --fixed-ip subnet_id=fe6aad96-2e10-42d0-a92c-1ba1bcfeced5,ip_address=172.28.48.117 37044cf8-445e-4326-9667-68e3f85c5f7a
然后在instance创建好之后将port端口attach上去就好
#nova help interface-attach
nova interface-attach a770124d-dd43-4935-8e10-92ce2869efcb --port-id 83b5ba66-1bd8-4ec8-9583-ddfacb89922d
nova interface-attach a770124d-dd43-4935-8e10-92ce2869efcb --port-id 611cd52a-85d7-4c6d-ab8e-28430d5ec658
查看port详细信息
#neutron port-list
#neutron port-show PORT-id
** 注意,device_owner位置是None!**
stack方式创建
这种方式会在第四步启动instance的时候执行stack的yaml文件的时候网络和instance一起被创建!
3.指定镜像
这次需求使用的镜像是centos6.8版本的镜像,下载rhel-server-6.8-x86_64-dvd.iso镜像,
但是官网down下来的ISO的镜像上传到glance上面是没法直接使用的
使用上传ISO启动的实例在引导安装完成进行重启的时候不会使用硬盘启动还是会到安装界面,就算是手动选择了boot启动会提示你“boot不存在”,
所以,我们需要将ISO转换成qcow2格式,然后使用qcow2格式镜像就可以顺利启动实例了。
查看生成的镜像
#glance image-list | grep rhel-server-6.8-x86_64-dvd.qcow2
4.启动instance
我使用的启动instance方式有两种:
- 一种是nova boot命令指定flavor、image、network将instance启动
- 另外一种就是编写yaml文件通过stack方式将instance启动
nova boot方式:
#neutron net-list | grep test
#glance image-list | grep appserver nova
#boot --flavor 1010 --image a8ff0248-8651-43f2-abd5-25207221d2fa --nic net-id=e8cde4f1-2daa-44f4-b98b-c76c95bd78ce kickstart_3_4_host
stack方式:
openstack中使用stack方式启动实例和nova boot命令启动实例准备的东西都是一致的,有flavor、image、network,这是openstack实例启动必须要有的部分,
我之所以使用stack启动实例是因为他可以帮助我将网络创建起来,我自己手动创建的网络有问题无法正常使用,
查看flavor、image的信息
这是将iso镜像转换成qcow2格式的镜像
yaml文件:
下面的yaml文件是我成功执行之后的版本,
- 下面注释部分是关于网络的,我的一个网络是已经创建的只需要使用一个port就可以了,所以将创建network和subnet部分注释掉了,如果你的网络都是没有创建的,可以将#好删除然后根据你的要求写就好了。
- 将flavor和image的名字写入,我们已经提前准备好了,
- 然后网络需求,将vlan写好、网络名称、subnet子网范围、port端口,
注意,yaml文件格式一定要注意,它是有自己语法的,别多一个空格少一个空格导致报错!
description: create instance
heat_template_version: '2020-09-24'
parameters:
AZ_HOST: {default: '', description: Where to deploy, label: Deploy, type: string}
Prefix: {default: Moshell01_, description: A prefix to be added to all objects names,
label: Prefix, type: string}
resources:
Moshell:
properties:
availability_zone: nova
config_drive: 'true'
flavor: 2vcpu_2GBmem_50GBdisk
image: rhel-server-6.8-x86_64-dvd.qcow2
metadata: {ha-policy: managed-on-host, orch: hot}
name:
str_replace:
params:
$prefix: {get_param: Prefix}
template: $prefixMoshell
networks:
- port: {get_resource: Moshell-OAM-VNIC}
- port: {get_resource: Moshell-TRAFFIC_1-VNIC}
type: OS::Nova::Server
# Moshell-OAM-VN:
# properties:
# networks: 3th_floor_interaction_oam_new
## name:
## str_replace:
## params:
## $prefix: {get_param: Prefix}
## template: $prefixMoshell-OAM-VN
## network_type: vlan
## physical_network: default
## segmentation_id: 964
# type: OS::Neutron::ProviderNet
Moshell-OAM-VNIC:
properties:
name:
str_replace:
params:
$prefix: {get_param: Prefix}
template: $prefixMoshell-OAM-VNIC
# network_id: {get_resource: Moshell-OAM-VN}
network_id: 37044cf8-445e-4326-9667-68e3f85c5f7a
type: OS::Neutron::Port
# Moshell-OAM-VN_subnet:
# properties:
# cidr: 172.28.48.117/28
# enable_dhcp: false
# name:
# str_replace:
# params:
# $prefix: {get_param: Prefix}
# template: $prefixMoshell-OAM-VN_subnet
## network_id: {get_resource: Moshell-OAM-VN}
# network_id: 37044cf8-445e-4326-9667-68e3f85c5f7a
# type: OS::Neutron::Subnet
Moshell-TRAFFIC_1-VN:
properties:
name:
str_replace:
params:
$prefix: {get_param: Prefix}
template: $prefixMoshell-TRAFFIC_1-VN
network_type: vlan
physical_network: default
segmentation_id: 1364
type: OS::Neutron::ProviderNet
Moshell-TRAFFIC_1-VNIC:
properties:
name:
str_replace:
params:
$prefix: {get_param: Prefix}
template: $prefixMoshell-TRAFFIC_1-VNIC
network_id: {get_resource: Moshell-TRAFFIC_1-VN}
type: OS::Neutron::Port
Moshell-TRAFFIC_1-VN_subnet:
properties:
cidr: 10.185.255.250/29
enable_dhcp: false
name:
str_replace:
params:
$prefix: {get_param: Prefix}
template: $prefixMoshell-TRAFFIC_1-VN_subnet
network_id: {get_resource: Moshell-TRAFFIC_1-VN}
type: OS::Neutron::Subnet
接着执行命令,虚机顺利创建,
#openstack stack create -t Moshell01.yaml --wait Moshell01
检查port
使用stack方式创建出来的网络在device_owner位置是指定了Nove的但是自己手动创建的网络是None,这才是导致自己命令创建的网络应用到虚机上不能使用原因。
总结
整体来说这次创建实例的过程还是有很多知识点的,
- 比如通过网上down下来的ISO镜像上传到glance然后转换成qcow2格式镜像创建实例
- 还有就是通过stack方式创建网络和实例,这个是真的方便只要写好yaml文件就可以了
最后,我使用的环境是公司的环境,可能和自己搭建的原生环境不同,遇到的问题也不同,