完整部署CentOS7.2+OpenStack+kvm 云平台环境(3)--为虚拟机指定固定ip

之前在测试环境(centos7.2)上部署了openstack云平台(完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)--基础环境搭建),openstack在neutron组网模式下默认采用DHCP-Agent模块给虚拟机自动分配ip

现在想给虚拟机指定固定ip,即创建虚拟机的时候指定固定ip。

现分析如下: 背景 1、我们目前使用openstack+docker来搭建自己的私有云 2、openstack有两种网络环境搭建模式,一种是功能较简单的nova-network,一种是neutron方案 3、neutron方案代表着未来的趋势,提供更多高级的功能(例如路由功能和负载均衡服务等),更加方便用户去自定义自己的虚拟化网络 4、在已有的几个集群中,我们在线下开发测试环境中搭建了neutron方案的openstack集群

目的 neutron的设计理念是ip分配应当资源池化,因此在默认的dashboard操作界面上,只能为每个虚拟机指定特定的子网,虚拟机启动时会自动分配该子网可用的ip资源。但是,在很多开发测试场景下,我们还是需要为指定启动的虚拟机配备一个固定的ip,比如需要反复创建、删除虚拟机,这个时候就会希望虚拟机的ip不变,方便测试用例的编写,固定的ip地址也有利于CMDB的管理。

前置条件 所有的操作都基于openstack项目提供的NeutronClient和NovaClient工具,请确保这两个工具已经安装,可以登录openstack的集群管理节点,在命令行界面执行nova和neutron命令,看是否有帮助提示。执行这两个工具,还需要预先获得权限,例如在管理节点上执行这两个命令的话,首先要执行以下命令,执行后就会在环境变量中保存有admin用户的权限信息

[root@openstack-server src]# source admin-openrc.sh

neutron通过修改dhcp服务器的配置文件实现给指定虚拟机配置固定ip,因此要首先要确保虚拟机准备连接的子网的DHCP功能已开启? 查看子网的详细信息,确认子网的dhcp功能已经开启

[root@openstack-server src]# neutron subnet-list +--------------------------------------+-------------+----------------+----------------------------------------------------+ | id | name | cidr | allocation_pools | +--------------------------------------+-------------+----------------+----------------------------------------------------+ | c53da14a-01fe-4f6c-8485-232489deaa6e | flat-subnet | 192.168.1.0/24 | {"start": "192.168.1.100", "end": "192.168.1.200"} | +--------------------------------------+-------------+----------------+----------------------------------------------------+

[root@openstack-server src]# neutron subnet-show c53da14a-01fe-4f6c-8485-232489deaa6e +-------------------+----------------------------------------------------+ | Field | Value | +-------------------+----------------------------------------------------+ | allocation_pools | {"start": "192.168.1.100", "end": "192.168.1.200"} | | cidr | 192.168.1.0/24 | | dns_nameservers | 192.168.1.17 | | enable_dhcp | True | | gateway_ip | 192.168.1.17 | | host_routes | | | id | c53da14a-01fe-4f6c-8485-232489deaa6e | | ip_version | 4 | | ipv6_address_mode | | | ipv6_ra_mode | | | name | flat-subnet | | network_id | 1d9657f6-de9e-488f-911f-020c8622fe78 | | subnetpool_id | | | tenant_id | 65a0c00638c247a0a274837aa6eb165f | +-------------------+----------------------------------------------------+

如上,“enable_dhcp”是“True”,表明子网的dhcp功能已经开启。 ******************************************************************************************************************** 如果子网的dhcp功能没有开启,可以手动设置进行开启该功能! [root@openstack-server src]# neutron subnet-update --enable-dhcp c53da14a-01fe-4f6c-8485-232489deaa6e ********************************************************************************************************************

下面详细说下,创建虚拟机的时候,指定固定ip的方法:

1)创建一个和指定子网相关联的端口,并为该端口配置一个固定ip,具体命令格式: #neutron port-create --fixed-ip subnet_id=SUBNET_ID,ip_address=IP_FROM_POOL --name PORT_NAME NETWORK_ID 说明: 固定ip由自己决定分配哪一个ip,只要这个ip在子网的可用ip范围内,且该ip还未被使用即可。 PORT_NAME自行命名 NETWORK_ID可在前面的neutron subnet-show命令的执行结果中找到。

[root@openstack-server src]# neutron port-create --fixed-ip subnet_id=c53da14a-01fe-4f6c-8485-232489deaa6e,ip_address=192.168.1.101 --name kvm-server001 1d9657f6-de9e-488f-911f-020c8622fe78 Created a new port: +-----------------------+-----------------------------------------------------------------------------------------------------------------+ | Field | Value | +-----------------------+-----------------------------------------------------------------------------------------------------------------+ | admin_state_up | True | | allowed_address_pairs | | | binding:host_id | | | binding:profile | {} | | binding:vif_details | {} | | binding:vif_type | unbound | | binding:vnic_type | normal | | device_id | | | device_owner | | | dns_assignment | {"hostname": "host-192-168-1-101", "ip_address": "192.168.1.101", "fqdn": "host-192-168-1-101.openstacklocal."} | | dns_name | | | fixed_ips | {"subnet_id": "c53da14a-01fe-4f6c-8485-232489deaa6e", "ip_address": "192.168.1.101"} | | id | 8cc0b915-773d-45b7-9c3a-0e8198818637 | | mac_address | fa:16:3e:ce:bf:a5 | | name | kvm-server001 | | network_id | 1d9657f6-de9e-488f-911f-020c8622fe78 | | port_security_enabled | True | | security_groups | 050a6341-57c5-4b01-bc79-09efd9931d9c | | status | DOWN | | tenant_id | 65a0c00638c247a0a274837aa6eb165f | +-----------------------+-----------------------------------------------------------------------------------------------------------------+

2) 启动虚拟机,并在参数中指定要将虚拟机绑定到刚创建的port上,这样虚拟机就会被自动配置port已设置的ip,具体命令格式: #nova boot --flavor FLAVOR_ID --image IMAGE_ID --nic port-id=PORT_ID INSTANCE_NAME

接着,创建虚拟机,指定固定ip: 【具体参考http://www.cnblogs.com/kevingrace/p/5707003.html 里面创建虚拟机的步骤】

[root@openstack-server src]# nova boot --flavor kvm002 --image CentOS-6.5 --nic port-id=8cc0b915-773d-45b7-9c3a-0e8198818637 --security-group default --key-name mykey kvm-server001 +--------------------------------------+---------------------------------------------------+ | Property | Value | +--------------------------------------+---------------------------------------------------+ | OS-DCF:diskConfig | MANUAL | | OS-EXT-AZ:availability_zone | | | OS-EXT-SRV-ATTR:host | - | | OS-EXT-SRV-ATTR:hypervisor_hostname | - | | OS-EXT-SRV-ATTR:instance_name | instance-00000017 | | OS-EXT-STS:power_state | 0 | | OS-EXT-STS:task_state | scheduling | | OS-EXT-STS:vm_state | building | | OS-SRV-USG:launched_at | - | | OS-SRV-USG:terminated_at | - | | accessIPv4 | | | accessIPv6 | | | adminPass | mFAKr7auzXv8 | | config_drive | | | created | 2016-08-30T08:47:06Z | | flavor | kvm002 (938dd195-ad12-4750-836f-bc8a29a3f7ed) | | hostId | | | id | 1a611deb-8560-43fb-a267-cf51c48da709 | | image | CentOS-6.5 (508db9d4-6c9f-459d-8782-065ee8b6f2c2) | | key_name | mykey | | metadata | {} | | name | kvm-server001 | | os-extended-volumes:volumes_attached | [] | | progress | 0 | | security_groups | default | | status | BUILD | | tenant_id | 65a0c00638c247a0a274837aa6eb165f | | updated | 2016-08-30T08:47:06Z | | user_id | b29da729de0b4ac2b3be9b519817a2b9 | +--------------------------------------+---------------------------------------------------+

查看创建的虚拟机,发现ip已经是固定的了! [root@openstack-server src]# nova list +--------------------------------------+---------------+--------+------------+-------------+--------------------+ | ID | Name | Status | Task State | Power State | Networks | +--------------------------------------+---------------+--------+------------+-------------+--------------------+ | 1a611deb-8560-43fb-a267-cf51c48da709 | kvm-server001 | ACTIVE | - | Running | flat=192.168.1.101 | | +--------------------------------------+---------------+--------+------------+-------------+--------------------+

创建好后,使用镜像里的root密码登陆虚拟机,发现ip是上面固定的ip了!

这个时候,也可以手动修改网卡配置:由dhcp修改成static静态方式。

然后重启网卡和虚拟机后,ip不会再变成其他的地址的~~

*********************************************************************************************

openstack私有云环境,在一个计算节点上创建的虚拟机,其实就是一个局域网内的机器群了。

虚拟机和宿主机之间/同一个节点下的虚拟机之间/虚拟机和宿主机同一内网段内的机器之间都是可以相互连接的,即能相互ping通

********************************************************************************************

如果不采用上述方法:即创建虚拟机的时候,不指定固定ip,默认用dhcp自动分配ip方式创建虚拟机。

特别注意: 如果创建虚拟机时不按照上面指定ip操作,那么创建虚拟机后,可登陆机器修改配置网卡文件,将dhcp方式改为static方式! 但是,ip不能修改为其他ip地址,必须修改为dhcp自动为其分配的地址! 要是修改为其他地址,则就和其他虚拟机和同网段内的机器ping不通了! 具体是什么原因导致以及解决方案,有待后续排查~~~

如下,虚拟机kvm-server005创建后,ip是dhcp自动分配的:192.168.1.123

登陆kvm-server005虚拟机本机进行修改:

[root@kvm-server005 ~]# cd /etc/sysconfig/network-scripts/ [root@kvm-server005 network-scripts]# cat ifcfg-eth0 DEVICE="eth0" BOOTPROTO="dhcp" IPV6INIT="yes" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" UUID="db795113-37af-407a-9f78-62f49e26d5c2"

改为static静态ip方式

[root@kvm-server005 network-scripts]# cat ifcfg-eth0 DEVICE="eth0" BOOTPROTO="static" IPADDR=192.168.1.123 NETMASK=255.255.255.0 GATEWAY=192.168.1.17 IPV6INIT="yes" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" UUID="db795113-37af-407a-9f78-62f49e26d5c2"

重启网卡,ip就改为静态ip了

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏晨星先生的自留地

DNS(下)之域传送漏洞

33130
来自专栏晓晨的专栏

Jenkins持续集成演示

16770
来自专栏石奈子的Java之路

原 Intellij IDEA必要条件

17250
来自专栏应用案例

Hexo博客的安装部署及多电脑同步

Hexo安装教程很多,我这里尽可能的讲的细一些,把容易踩坑的地方以及后期多电脑同步所遇到的问题列出来,以便给自己及大家参考。本文主要讲解安装部署后源文件同步问题...

1.4K70
来自专栏hbbliyong

将Python脚本打包成可执行文件

本文主要就是介绍最后一种方式,.py和.pyc都比较简单,Python本身就可以搞定。将Python脚本打包成可执行文件有多种方式,本文重点介绍PyInstal...

32710
来自专栏佳爷的后花媛

SVN命令解析以及问题解决(update...)

1.Repo-browser(浏览版本库) 通过“浏览版本库”可以直接查看服务器上指定目录下的所有目录结构(需要有相关权限),包括特定版本的作者,提交时间等,...

1K30
来自专栏九彩拼盘的叨叨叨

CanIUse 命令行工具介绍

注意:如果使用的是Windows系统,需要在Git的命令行执行上述命令。否则会报Git Not Found的错。

7610
来自专栏枕边书

Linux - 请允许我静静地后台运行

前言 常在 linux 下玩耍的开发者肯定会经常遇到需要对进程调度的情况,在 windows 中点击 最小化 去干别的就 OK 了,那么在 linux 下怎么办...

27850
来自专栏黑白安全

8种DOS命令

  它是用来检查网络是否通畅或者网络连接速度的命令。作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:...

25320
来自专栏程序员八阿哥

XShell上传、下载本地文件到linux服务器

Xshell很好用,然后有时候想在windows和linux上传或下载某个文件,其实有个很简单的方法就是rz,sz。 首先你的Linux上需要安装安装lrzs...

2.3K10

扫码关注云+社区

领取腾讯云代金券