完整部署CentOS7.2+OpenStack+kvm 雲平臺環境(3)--為虛擬機器指定固定ip

weixin_34054866發表於2016-08-30

 

之前在測試環境(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了

相關文章