OpenStack(二)简单使用
前面已经记录了openstack的简单部署,当然后续还会有各个组件的详细记录,这里呢,做一些简单操作,加深一下对openstack的理解。
一、创建网络并创建自定义镜像虚拟机
1.1 创建虚拟机内网
使用demo用户创建网络
项目==》选择网络==》网络==》创建网络(页面的右上角)
#点击编辑网络是可以修改网络的名称和是否共享,右边有个下拉箭头可以选择创建子网或者删除网络,点击名称可以进入到这个网络进行创建子网和删除子网或者再点击子网的名称也可以对子网进行修改。
修改网络并创建子网
现在我们对上面的网络名称不满意,我想在它下面创建多个子网,显然LAN01_172.15.1.0会产生歧义,我现在就要修改网络名称并再创建一个172.16.1.0/24段的网络。
博文来自:www.51niux.com
1.2 自做虚拟机镜像并上传
之前记录过KVM的操作,现在我用KVM做一个Centos7.2的操作系统总大小是20G的虚拟机镜像,然后只是将网卡配置文件的uuid去掉,然后将网卡启动从no变为yes。
#scp /data03/Centos7.2-20G.img 192.168.1.51:/opt/ #将做好的Centos7.2的操作系统的img镜像发送给控制节点。
# qemu-img convert -f qcow2 -O qcow2 Centos7.2-20G.img Centos7.2-20G.img.qcow2 #将img镜像转换一下因为在scp过程中,虚拟机镜像的大小变为了实际大小。
#rm -f Centos7.2-20G.img
# mv Centos7.2-20G.img.qcow2 Centos7.2-20G.img
# qemu-img info Centos7.2-20G.img #下面是输出信息,虽然镜像里面的系统是20G的,但是实际才占用了磁盘1.2G的大小。
image: Centos7.2-20G.img file format: qcow2 virtual size: 20G (21474836480 bytes) disk size: 1.2G cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false
控制节点(192.168.1.51)上面的操作:
# source /root/admin-openrc
# openstack image create "Centos7.2-20G" --file /opt/Centos7.2-20G.img --disk-format qcow2 --container-format bare --public #将镜像上传,下面是镜像创建过程中web页面的状态
镜像状态(虚拟机镜像在Glance中存放的时候会有多种状态,状态是Glance这个组件的程序定义的和底层的虚拟机镜像的实际情况无关): queued #queued状态可以理解为镜像进入队列,实际上它表明上传一个镜像时,请求Glance Registry服务接受,并且分配了一个对应该镜像的标识。这个状态没有任何数据上传到Glance中。 saving #saving状态表明镜像的数据正在被上传到Glance中。视镜像的大小,这个状态耗时也会不同。 active #active状态表明镜像在Glance中已经可用了。当镜像的数据完全上传到Glance中后就会转变成这个状态。虽然表示可以使用了,但并不表明这个镜像生成的虚拟机一定能启动。 killed #killed状态表示在上传镜像数据的过程中发生了错误,譬如上传过程中网络终端人为地被取消了。这个状态的image是不可用的。 deleted #在deleted状态中,Glance会保留镜像的数据库信息,但是用户已经无法使用镜像,镜像的磁盘数据会在一个定义的时间后自动删除。 pending_delete #pending_delete状态和deleted类似,区别在于Glance不会删除镜像的数据,因此,这个状态中的镜像是可以恢复的。
下面是上面CLI参数的解释:
–name NAME #上传完镜像在openstack中显示的名称; –disk-format DISK_FORMAT #镜像格式;openstack支持的格式详情请看官方介绍; –container-format CONTAINER_FORMAT #图片的容器格式,可以是ami,ari,aki,ovf,bare默认是bare –owner TENANT_ID #哪个租户可以使用此镜像 –size SIZE #这个镜像的大小 –min-disk DISK_GB #这个镜像启动最小需要的大小; –min-ram DISK_RAM #启动这个镜像需要的最小内存; –location IMAGE_URL #在web界面中可以使用url地址上传镜像,目前支持http协议的; –file FILE #镜像所在本地位置; –checksum CHECKSUM #镜像数据验证; –is-public [True|False] #是否共享此镜像;共享后其他用户也可以使用此镜像启动instance;
#默认镜像是保存在控制节点的/var/lib/glance/images目录下面。
#注意这些映像因为我们是用admin用户上传的,所以admin用户才有权删除它们。
1.3 创建虚拟机实例
项目==》计算==》实例==》启动实例(页面右上角)
#点击启动实例后,经过几秒钟的创建,虚拟机就创建成功了,下面是创建成功后虚拟机实例的状态。
博文来自:www.51niux.com
1.4 实例的简单操作
可以登录测试一下,是否能ping通另外一台主机或者能不能登录另外一台实例或者操作有没有问题,我这里测试没问题就不贴图了,然后就是如果没分配到IP地址,就要看看网络节点的neutron-openvswitch-agent是否启动有问题或者看看日志/var/log/neutron/dhcp-agent.log,然后在控制节点上面执行#neutron agent-list 看看是不是都OK。
#这种网络叫做Tenant网络,这种网络是每隔项目创建的网络。默认情况在,这种类别的网络不和其他项目的网络相联系,他们是相互独立并隔离的。实际情况下,在Tenant网络中会使用VLAN或GRE的技术。因为每隔网络是相互隔离的,所以可以再Neutron创建虚拟路由器,使用l3-agent使不同的网络实现互相通信。
1.5 让虚拟机可以连通外网
经过上面的操作,现在虚拟机之间已经可以内网访问了,但是虚拟机还不能访问外部网络。下面我们做一下,让虚拟机可以访问到外网。
先要用admin用户创建一个外网网络
#上面是创建了一个外网,下面来创建一个子网,我这里就偷个懒,就先用桥接网卡也就是管理网卡的IP段192.168.1段。这个外部网络只能admin用户才能创建哦。
再用dmo用户创建路由将内网实例和外网192.168.1段建立连接
项目==》网络==》路由器==》创建路由器(页面右上角)
这时候可以切换回admin用户来查看一下:
然后切换demo用户来让内网通过路由可以访问外网:
项目==》网络==》网络拓扑
下面是连接成功后的状态:
#通过这种路由的形式可以将多个内部网络打通让其可以互相访问。
测试虚拟机实例是否可以访问外部的网络:
博文来自:www.51niux.com
1.6 让外部可以访问内网虚拟机
现在还是存在问题,现在内网也就相当于我们的局域网已经可以访问外部网络了,但是如果我们想访问虚拟机还是不可以的。
实例绑定浮动IP
#右上图可以看出,两个实例都已经绑定了浮动IP。当然实例里面还是只能看到自己的内网IP看不到外部的浮动IP的。
安全组设置
现在浮动IP已经绑定成功了,但是现在还是有问题的,默认的安全组策略是有限制的,如果不调整安全组策略,你现在外部还是访问不到内部的虚拟机实例的。
项目==》访问&安全==》安全组==》管理规则(默认我们就一个default安全组)
#将默认的两个入口规则删除,出口规则保留,添加三条开放ICMP,TCP以及UDP的安全组规则。
外部访问内部虚拟机测试:
如何预先分配浮动IP:
项目==》访问&安全==》浮动IP==》向项目分配IP
#下面是添加一个浮动IP的效果:
#可以看到已经有两个浮动IP已经映射了固定IP地址,有一个新创建的还没有关联,如果再有新的内网地址就可以直接关联了。
#这种可以连外网的方式叫做Provider网络,只能由OpenStack管理角色创建,直接映射到一个在数据中心存在的物理网络。Provider网络中可以设定多种网络:Flat、VLAN、GRE等。VLAN,很好理解,就是符合802.1Q tagged的网络;而Flat则是扁平化的网络,通俗来说,就是没有任何tagged;GRE网络使用tunnel技术进行数据传送。
二、创建实例超分问题
现在我再创建一台虚拟机:
#直接状态错误了,为什么呢?一般是资源不够了。
2.1 查看资源使用情况:
#这个需要通过admin用户来查看。
管理员==》系统==》管理程序
#从上图可以看出,CPU和内存还有很多剩余,但是磁盘占用了40GB,还剩9GB磁盘空间,不够用了,但是实际呢也就占用了2G左右的空间,但是我们虚拟机实例是2个20G磁盘空间的。
2.2计算节点更改下配置文件让其支持超分:
不过一般不要磁盘超分这么干,空间不够了就加磁盘就是了,后面还会用到分布式。CPU和内存超分调大点还是可以的。
# vim /etc/nova/nova.conf
#disk_allocation_ratio=0.0 #如果设置为0.0,则调度程序节点上设置的值将被使用,并默认为1.0(浮点值) disk_allocation_ratio=3.0 #加上这句话,也就是我们现在是50G磁盘空间*3就是支持最大分配所有实例的总空间为150G
# systemctl restart openstack-nova-compute.service #重启下服务
2.3 重新创建虚拟机实例并查看:
#从图中可以看出重新创建的虚拟机成功了,并不提示创建虚拟机失败了。
再次登录admin用户查看一下:
#从上图可以看出,虽然磁盘已经分配满了,还是可以分的,因为我们将计算节点的磁盘超分打开了,设置成了3倍,如果磁盘确实就是做系统使用,然后剩下的日志啥的都存分布式系统里面,实例系统是存计算节点本地的话。
另外CPU和内存的超分参数是:
#cpu_allocation_ratio=0.0 #如果设置为0.0,则调度程序节点上设置的值将被使用,并默认为16.0(浮点值) #ram_allocation_ratio=0.0 #如果设置为0.0,则调度程序节点上设置的值将被使用,并默认为1.5(浮点值)
2.4 两个网络互通:
下面查看一下效果:
#先从外部通过浮动IP192.168.1.63访问到了172.15.2.112,然后又通过172.15.2.112连接到了172.16.1.21,这就让两个网络实现了互连,如果不互连,就在路由那里断掉就可以了。
#注意如果子网跟对外网络没有做好路由,直接绑定浮动IP是不生效的,没有路由两个IP之间是不通的,也就是这个数据包不知道怎么转发。