启动实例
前言
OpenStack环境中要启动实例,必须指定flavor、glance名称、网络、安全组、密钥和实例名称。
命令示例:openstack server create --flavor m1.nano --image cirros –nic net-id=PROVIDER_NET_ID --security-group default –key-name mykey provider-instance
我们依次来创建这些条件然后最后执行命令成功出来一个实例!
一、启动实例
1、首先创建网络,
我们在部署完成neutron服务的时候创建了一个provider类型的网络,所以我们在创建一个self-service类型的网络,
创建provider网络命令
# source admin-openrc
# openstack network create --share --external --provider-physical-network provider --provider-network-type flat provider
# openstack subnet create --network provider --allocation-pool start=192.168.223.10,end=192.168.223.30 --dns-nameserver 192.168.223.2 --gateway 192.168.223.2 --subnet-range 192.168.223.0/24 provider
注意,这里设置provider类型的网络的子网的时候,网络范围我的是NAT模式的网络范围,这个要注意,否则创建出来的实例还是没法连通外网。
接着创建slef-service类型的网络,
# openstack network create selfservice
这里的网络名随便起,我这是按照官方文档中的命令写的,没带要改!
# openstack subnet create --network selfservice --dns-nameserver 8.8.4.4 --gateway 172.16.1.1 --subnet-range 172.16.1.0/24 selfservice
这个子网的范围自己定义,因为是在OpenStack环境内部自己使用的,所以随便了,我这里还是使用的官方文档中的,没带要改!
现在两种类型的网络就创建完成了,
2、接着创建flavor,
默认flavor是没有创建的,
我们使用命令进行创建,因为资源问题创建的小的,
# openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano
# nova flavor-list
3、接着上传镜像,
我们在创建glance服务的时候上传过一个镜像,这个镜像也是官方提供,可以使用最小资源来进行启动实例,
上传镜像的命令:
# source admin-openrc
# glance image-create --name "cirros" --file cirros-0.4.0-x86_64-disk.img --disk-format qcow2 --container-format bare --visibility=public
4、接着创建安全组,
默认是有一个安全组的,但是不够,我们需要进行添加两条
# openstack security group list
一个是允许ICMP协议,就是能够ping实例,
# openstack security group rule create --proto icmp default
一个是放通22号端口,允许ssh服务
# openstack security group rule create --proto tcp --dst-port 22 default
5、接着创建密钥对,
创建秘钥对可有可无,他就是在我们将实例启动起来之后,ssh登陆是否需要输入密码,指定了就不需要,不指定就输入下密码,按照官方文档的顺序创建上他,
# ssh-keygen -q -N ""
# openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
# openstack keypair list
6、最后启动实例,
启动实例的时候我们需要用到上面创建的image、network、flavor、security group内容,我们先进行查看,
网络这里我习惯性写成网络的ID,
provider——》ed412ea6-c86a-40f7-91f3-6558017453e9
self-service——》c2dbd7ed-8305-4141-89ac-cd75fef3ff5d
如果是flavor的话直接写名字就好了,——》m1.nano
镜像的话可以写name可以写ID
ID——》eb35e079-e76f-424e-9c1b-b9e043fb42ea
name——》cirros
安全组这里建议写ID,如果写成名字有点小问题,当你创建过实例之后,过一段时间名字为default的安全组会变多,如果你使用名字启动实例会报错,我这里写的是ID
security group——》4e2a5998-7480-4e1f-a3a4-dcb91ba2689e
密钥对这里写名字
密钥对——》mykey
最后整合下创建命令启动实例,
OpenStack server create + flavor + 镜像 + 网络 + 安全组 + 秘钥 + 实例名字
1)、创建provider类型的实例
因为我部署的时候使用的是self-service类型的网络配置的,但是在Q版的时候你陪self-service网络但是使用的时候provider和self-service两种类型的网络都是可以正常使用的,但是在U版中不知道是什么情况?尝试下!
先创建一个provider网络类型的,看下效果,
# openstack server create --flavor m1.nano --image cirros --nic net-id=ed412ea6-c86a-40f7-91f3-6558017453e9 --security-group 4e2a5998-7480-4e1f-a3a4-dcb91ba2689e --key-name mykey provider
报错
创建实例执行命令报错
Unexpected API Error. Please report this at http://bugs.launchpad.net/nova/ and attach the Nova API log if possible.
<class 'keystoneauth1.exceptions.http.Unauthorized'> (HTTP 500) (Request-ID: req-a75ba3df-6454-4202-8318-bd303b07c5d3)
分析:
根据报错提示有明显的nova_api log中查看内容,那么打开日志查看下,
通过日志中的显示指向了keystone,莫非是keystone服务有问题,测试下
# tailf /var/log/nova/nova-api.log
2020-11-09 14:57:57.977 2127 ERROR nova.api.openstack.wsgi [req-aa196ab2-f125-4b40-aeb8-expected exception in API method: keystoneauth1.exceptions.http.Unauthorized: The requesd47d5)
……
2020-11-09 14:57:57.977 2127 ERROR nova.api.openstack.wsgi
2020-11-09 14:57:57.978 2127 INFO nova.api.openstack.wsgi [req-aa196ab2-f125-4b40-aeb8-5P exception thrown: Unexpected API Error. Please report this at http://bugs.launchpad.ne
<class 'keystoneauth1.exceptions.http.Unauthorized'>
2020-11-09 14:57:57.978 2127 INFO nova.osapi_compute.wsgi.server [req-aa196ab2-f125-4b40lt] 192.168.144.20 "POST /v2.1/servers HTTP/1.1" status: 500 len: 649 time: 0.8824658
使用命令测试下,可以正常的获取token,这说明keystone服务是没有问题的,
# source admin-openrc
# openstack token issue
接着再查看日志提取其中的有效信息,——》Unexpected API Error. 查看下nova服务所属的api端口是否正常?
2020-11-09 14:57:57.978 2127 INFO nova.api.openstack.wsgi [req-aa196ab2-f125-4b40-aeb8-5P exception thrown: Unexpected API Error. Please report this at http://bugs.launchpad.ne
<class 'keystoneauth1.exceptions.http.Unauthorized'>
查看端口状态都是True,没得问题,这就尴尬了,没得思路了,百度吧!
# source admin-openrc
# openstack endpoint list
# openstack endpoint list | grep nova
直接使用命令报错中的提示来进行百度,否则容易百度的牛头不对马面,
<class 'keystoneauth1.exceptions.http.Unauthorized'> (HTTP 500) (Request-ID: req-a75ba3df-6454-4202-8318-bd303b07c5d3)
根据百度到的提示查看下nova.conf文件中的neutron部分配置是否出错?
进去查看后果然发现是neutron用户这里的密码没有修改,尴尬!——》修改成123
# vim /etc/nova/nova.conf
重启下nova的服务,
# systemctl restart openstack-nova-api.service
解决
再执行创建实例的命令就没有问题了,
# openstack server create --flavor m1.nano --image cirros --nic net-id=ed412ea6-c86a-40f7-91f3-6558017453e9 --security-group 4e2a5998-7480-4e1f-a3a4-dcb91ba2689e --key-name mykey provider
创建实例报错:
接着我们使用命令查看下创建实例的状态,我们可以在controller节点上使用nova命令来查看实例的状态,
我这个实例创建的时间等待了很久,结果最后直接状态就是ERROR的,
或者我们可以到compute节点上查看,在OpenStack底层实例说白了就是一个kvm的虚机,所以在compute节点可以使用virsh来查看我们启动的实例的状态,执行命令等待的过程中状态是paused挂起的,但是在实例状态变成ERROR之后,这里就查看不到虚机了。
2)、创建self-service类型实例
为了观察启动实例对网络进行变动,在启动实例之前查看下网卡的状态
——》controller节点
eth0网卡是单独拿出来给neutron网络来使用的,安装环境的前期是作为连接外网的网卡,用来连接外网安装软件,现在部署好neutron服务之后通过桥接的方式eth0网卡作为一个接口来使用了,他实际的IP地址就到了一个Linuxbridge网桥上面了,
我们尝试创建一个self-service网络,类似于内网的网络来创建的个虚机试试,——》刺激了,self-service网络的实例可以正常的创建,
# openstack server create --flavor m1.nano --image cirros --nic net-id=c2dbd7ed-8305-4141-89ac-cd75fef3ff5d --security-group 4e2a5998-7480-4e1f-a3a4-dcb91ba2689e --key-name mykey self-service
启动实例之后再查看下,
——》controller节点
实例启动之后可以再controller节点上明显的看到多了一个网桥,
我们可以使用brctl命令来查看下Linux中网桥的情况,
——》compute节点
在实例启动之后,compute节点上面也是多了两个Linuxbridge网桥,然后eth0上的配置到了一个网桥上面,
但是eth0并不是作为这个网桥的出口的,他没有被引用,这就不知道为什么了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mR47RXMU-1605083398164)(C:\Users\asus\AppData\Roaming\Typora\typora-user-images\1605000619577.png)]
二、访问实例
现在我们实例已经创建成功了,我们可以通过console登录来进行访问了,
——》可以使用OpenStack console命令来获取一个URL地址来进行访问
——》也可以通过登录dashboard,进入实例通过控制台来进行访问
1、console访问
直接使用命令show后面+ 实例名字或者ID都行
# source admin-openrc
# nova list
# openstack console url show self-service
然后将下方生成的URL复制到浏览器中,——》就可以通过console的方式打开虚机的访问界面了,
根据显示我们可以看到下载的cirros镜像设置的用户名和密码是:cirros/gocubsgo,
登录进来之后我们是普通用户的权限,如果是root的话可以使用sudo,我们可以执行些命令查看下
——》查看IP地址和我们在controller查看是一致的,
——》查看下硬盘的大小和使用情况
——》查看内存,还没有-h参数,尴尬!
——》可以使用top命令查看下,CPU的使用情况
2、控制台访问
控制台访问的话我们需要登录到dashboard上然后进入实例选项来进行访问,
这里访问的地址是我设置的controller的管理地址,也是在安装dashboard的时候设置的,
然后登录的用户名密码就是我们设置的用户和密码,我们设置了两种一个admin管理用户一个是myuser普通用户,你随便,两个都可以进行登录,我为了方便使用的是admin用户。
PS:我在第一个访问dashboard页面的时候可以获取到页面但是输入用户名和密码之后提示访问错误,这就尴尬了!
经过排查发现是memcache服务挂了,检查了配置文件没啥事啊,接着通过status命令查看发现是11211端口没有发现?在查看服务状态是failed的?
——》手动进行重启下服务,
# systemctl status memcached.service
# systemctl restart memcached.service
重启之后查看11211端口正常启动并被监听了,
接着再访问就没有问题了。
进入dashboard之后我们可以通过:
项目——》计算——》实例——》self-service——》控制台,来进行查看,这里还能看到我们通过url访问的时候敲的top命令的显示结果呢!
三、添加volume卷
首先在controller节点创建volume卷
# source admin-openrc
# openstack volume create --size 1 volume1
接着将volume卷添加到创建好的实例上面,
# openstack volume list
# openstack server add volume self-service volume1
接着我们通过控制台查看下,能看到新添加的硬盘就行,