07.OpenStack构建虚拟机实例

徐亮伟, 江湖人称标杆徐。多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型电商运维工作。
个人博客"徐亮伟架构师之路"累计受益数万人。
笔者Q:552408925、572891887
架构师群:471443208

1.创建虚拟机类型

OpenStack创建虚拟机最小默认的类型消耗每个实例512MB内存。
对于少于4GB内存的计算节点,我们建议创建xuliangwei.com类型,每个实例64MB的环境
仅测试CirrOS虚拟机镜像

创建xuliangwei.com名称的虚拟机类型

[root@linux-node1 ~]# openstack flavor create --id 5 --vcpus 1 \
--ram 64 --disk 1 xuliangwei.com
+----------------------------+----------------+
| Field                      | Value          |
+----------------------------+----------------+
| OS-FLV-DISABLED:disabled   | False          |
| OS-FLV-EXT-DATA:ephemeral  | 0              |
| disk                       | 1              |
| id                         | 5              |
| name                       | xuliangwei.com |
| os-flavor-access:is_public | True           |
| properties                 |                |
| ram                        | 64             |
| rxtx_factor                | 1.0            |
| swap                       |                |
| vcpus                      | 1              |
+----------------------------+----------------+

2.创建虚拟网络

创建单一扁平网络(名称:flat),网络类型为flat,共享网络(share),网络提供者:provider,和本地物理网络eth0互连

1.控制节点创建单一扁平网络

[root@linux-node1 ~]# neutron net-create flat --shared \
--provider:physical_network provider --provider:network_type flat

Created a new network:
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | True                                 |
| availability_zone_hints   |                                      |
| availability_zones        |                                      |
| created_at                | 2016-10-09T07:34:38Z                 |
| description               |                                      |
| id                        | 40e7f254-8b5e-40f2-b1b6-2d744b2b0be7 |
| ipv4_address_scope        |                                      |
| ipv6_address_scope        |                                      |
| mtu                       | 1500                                 |
| name                      | flat                                 |
| port_security_enabled     | True                                 |
| project_id                | 0ec016bd5701495ab9cf2b7ffbea28b9     |
| provider:network_type     | flat                                 |
| provider:physical_network | provider                             |
| provider:segmentation_id  |                                      |
| revision_number           | 3                                    |
| router:external           | False                                |
| shared                    | True                                 |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tags                      |                                      |
| tenant_id                 | 0ec016bd5701495ab9cf2b7ffbea28b9     |
| updated_at                | 2016-10-09T07:34:38Z                 |
+---------------------------+--------------------------------------+

2.控制节点创建子网

对创建的网络建立子网,名称为:subnet-create flat,并设置dhcp分配地址段、网关以及DNS

[root@linux-node1 ~]# neutron subnet-create flat 192.168.56.0/24 \
--name flat-subnet --allocation-pool start=192.168.56.100,end=192.168.56.200 \
--dns-nameserver 192.168.56.1 --gateway 192.168.56.1
Created a new subnet:
+-------------------+------------------------------------------------------+
| Field             | Value                                                |
+-------------------+------------------------------------------------------+
| allocation_pools  | {"start": "192.168.56.100", "end": "192.168.56.200"} |
| cidr              | 192.168.56.0/24                                      |
| created_at        | 2016-10-09T07:35:17Z                                 |
| description       |                                                      |
| dns_nameservers   | 192.168.56.1                                         |
| enable_dhcp       | True                                                 |
| gateway_ip        | 192.168.56.1                                         |
| host_routes       |                                                      |
| id                | 1ca80595-eac8-4af1-8c03-83afd603e7ff                 |
| ip_version        | 4                                                    |
| ipv6_address_mode |                                                      |
| ipv6_ra_mode      |                                                      |
| name              | flat-subnet                                          |
| network_id        | 40e7f254-8b5e-40f2-b1b6-2d744b2b0be7                 |
| project_id        | 0ec016bd5701495ab9cf2b7ffbea28b9                     |
| revision_number   | 2                                                    |
| service_types     |                                                      |
| subnetpool_id     |                                                      |
| tenant_id         | 0ec016bd5701495ab9cf2b7ffbea28b9                     |
| updated_at        | 2016-10-09T07:35:17Z                                 |
+-------------------+------------------------------------------------------+

3.验证创建网络

[root@linux-node1 ~]# neutron net-list
+--------------------------------------+------+------------------------------------------------------+
| id                                   | name | subnets                                              |
+--------------------------------------+------+------------------------------------------------------+
| 40e7f254-8b5e-40f2-b1b6-2d744b2b0be7 | flat | 1ca80595-eac8-4af1-8c03-83afd603e7ff 192.168.56.0/24 |
+--------------------------------------+------+------------------------------------------------------+

3.创建密钥

1.使用demo用户创建key

[root@linux-node1 ~]# source demo-openrc

2.生成并添加一对密钥

[root@linux-node1 ~]# ssh-keygen -q -N ""
[root@linux-node1 ~]# openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
+-------------+-------------------------------------------------+
| Field       | Value                                           |
+-------------+-------------------------------------------------+
| fingerprint | e2:6c:3d:6b:a4:f1:12:d5:f5:18:2a:7d:e0:75:8d:e8 |
| name        | mykey                                           |
| user_id     | c5923120d10c43eb875da6f9491d64b2                |
+-------------+-------------------------------------------------+

3.验证密钥key

[root@linux-node1 ~]# openstack keypair list
+-------+-------------------------------------------------+
| Name  | Fingerprint                                     |
+-------+-------------------------------------------------+
| mykey | e2:6c:3d:6b:a4:f1:12:d5:f5:18:2a:7d:e0:75:8d:e8 |
+-------+-------------------------------------------------+

4.创建安全组规则

默认情况下,默认的安全组适用于所有实例,包括拒绝对实例进行远程访问的防火墙规则。
对于Linux图像,如CirrOS,建议至少允许ICMP和安全SSH。

1.规则添加到默认的安全组:

允许ICMP请求

[root@linux-node1 ~]# openstack security group rule create --proto icmp default
+-------------------+--------------------------------------+
| Field             | Value                                |
+-------------------+--------------------------------------+
| created_at        | 2016-10-09T07:30:15Z                 |
| description       |                                      |
| direction         | ingress                              |
| ethertype         | IPv4                                 |
| headers           |                                      |
| id                | 31e479bd-fefb-4942-8969-672fffcf5a15 |
| port_range_max    | None                                 |
| port_range_min    | None                                 |
| project_id        | 7f005d2fc6fa46cab5a700d3b2ff94bf     |
| project_id        | 7f005d2fc6fa46cab5a700d3b2ff94bf     |
| protocol          | icmp                                 |
| remote_group_id   | None                                 |
| remote_ip_prefix  | 0.0.0.0/0                            |
| revision_number   | 1                                    |
| security_group_id | e8eca459-f858-4c9d-97ab-ac6c7bcd6ff0 |
| updated_at        | 2016-10-09T07:30:15Z                 |
+-------------------+--------------------------------------+

允许安全SSH访问

[root@linux-node1 ~]# openstack security group rule create --proto tcp --dst-port 22 default
+-------------------+--------------------------------------+
| Field             | Value                                |
+-------------------+--------------------------------------+
| created_at        | 2016-10-09T07:30:33Z                 |
| description       |                                      |
| direction         | ingress                              |
| ethertype         | IPv4                                 |
| headers           |                                      |
| id                | 9e1255dd-7d7f-4b53-b6a3-172559a0cdbf |
| port_range_max    | 22                                   |
| port_range_min    | 22                                   |
| project_id        | 7f005d2fc6fa46cab5a700d3b2ff94bf     |
| project_id        | 7f005d2fc6fa46cab5a700d3b2ff94bf     |
| protocol          | tcp                                  |
| remote_group_id   | None                                 |
| remote_ip_prefix  | 0.0.0.0/0                            |
| revision_number   | 1                                    |
| security_group_id | e8eca459-f858-4c9d-97ab-ac6c7bcd6ff0 |
| updated_at        | 2016-10-09T07:30:33Z                 |
+-------------------+--------------------------------------+

5.启动虚拟机实例

要启动一个实例,则必须至少指定虚拟机类型,映像名称,网络,安全组,重点和实例名称。

1.在控制器节点,source demo用户凭据来访问命令

[root@linux-node1 ~]# source demo-openrc

2.指定一个虚拟资源分配信息,其包括处理器,内存,和存储。

列出虚拟机可选类型

[root@linux-node1 ~]# openstack flavor list
+----+----------------+-----+------+-----------+-------+-----------+
| ID | Name           | RAM | Disk | Ephemeral | VCPUs | Is Public |
+----+----------------+-----+------+-----------+-------+-----------+
| 5  | xuliangwei.com |  64 |    1 |         0 |     1 | True      |
+----+----------------+-----+------+-----------+-------+-----------+

列出可用镜像

[root@linux-node1 ~]# openstack image list
+--------------------------------------+--------+--------+
| ID                                   | Name   | Status |
+--------------------------------------+--------+--------+
| 54daa962-097b-4968-aa71-8fa3123e4c41 | cirros | active |
+--------------------------------------+--------+--------+

列出可用网络

[root@linux-node1 ~]# neutron net-list
+--------------------------------------+------+-------------------------------------------------+
| id                                   | name | subnets                                         |
+---------------------------------+------+------------------------------------------------------+
|b8f74b1d-6deb-4638-b0f0-1f55d375cc75|flat|0b6829a1-580b-46dc-9523-41687a0bc106 192.168.56.0/24 |
+--------------------------------------+------+-------------------------------------------------+

列出可用安全组

[root@linux-node1 ~]# openstack security group list
+--------------------------------------+---------+-------------+----------------------------------+
| ID                                   | Name    | Description | Project                          |
+--------------------------------------+---------+-------------+----------------------------------+
| e8eca459-f858-4c9d-97ab-ac6c7bcd6ff0 | default | 缺省安全组  | 7f005d2fc6fa46cab5a700d3b2ff94bf |
+--------------------------------------+---------+-------------+----------------------------------+

3.创建虚拟机,其中net-id请填写自己的实际ID,执行本条过后会有相关输出

[root@linux-node1 ~]# source demo-openrc
[root@linux-node1 ~]# openstack server create --flavor xuliangwei.com --image cirros \
--nic net-id=40e7f254-8b5e-40f2-b1b6-2d744b2b0be7 --security-group default \
--key-name mykey openstack-xuliangwei.com

+--------------------------------------+-----------------------------------------------+
| Field                                | Value                                         |
+--------------------------------------+-----------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                        |
| OS-EXT-AZ:availability_zone          |                                               |
| OS-EXT-STS:power_state               | NOSTATE                                       |
| OS-EXT-STS:task_state                | scheduling                                    |
| OS-EXT-STS:vm_state                  | building                                      |
| OS-SRV-USG:launched_at               | None                                          |
| OS-SRV-USG:terminated_at             | None                                          |
| accessIPv4                           |                                               |
| accessIPv6                           |                                               |
| addresses                            |                                               |
| adminPass                            | 2KqeXLXHjcCz                                  |
| config_drive                         |                                               |
| created                              | 2016-10-09T09:33:24Z                          |
| flavor                               | xuliangwei.com (5)                            |
| hostId                               |                                               |
| id                                   | f3a48a5c-3907-438e-be5c-bbec625736f9          |
| image                                | cirros (54daa962-097b-4968-aa71-8fa3123e4c41) |
| key_name                             | mykey                                         |
| name                                 | openstack-xuliangwei.com                      |
| os-extended-volumes:volumes_attached | []                                            |
| progress                             | 0                                             |
| project_id                           | 7f005d2fc6fa46cab5a700d3b2ff94bf              |
| properties                           |                                               |
| security_groups                      | [{u'name': u'default'}]                       |
| status                               | BUILD                                         |
| updated                              | 2016-10-09T09:33:24Z                          |
| user_id                              | c5923120d10c43eb875da6f9491d64b2              |
+--------------------------------------+-----------------------------------------------+

4.查看虚拟机创建状态,状态为ACTIVE那台虚拟机已经成功创建

[root@linux-node1 ~]# openstack server list
+--------------------------------------+--------------------------+--------+---------------------+------------+
| ID                                   | Name                     | Status | Networks            | Image Name |
+--------------------------------------+--------------------------+--------+---------------------+------------+
| 7d533123-7b00-4710-a726-e5b83864cbbe | openstack-xuliangwei.com | ACTIVE | flat=192.168.56.108 | cirros     |
+--------------------------------------+--------------------------+--------+---------------------+------------+

5.使用SSH加密连接实例

[root@linux-node1 ~]# ssh cirros@192.168.56.108
The authenticity of host '192.168.56.108 (192.168.56.108)' can't be established.
RSA key fingerprint is fd:7d:73:4e:62:c9:c3:3a:c3:41:48:97:dd:2c:3f:56.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.56.108' (RSA) to the list of known hosts.
$

6.使用虚拟控制台访问实例(浏览器方式)

[root@linux-node1 ~]# openstack console url show openstack-xuliangwei.com
+-------+------------------------------------------------------------------------------------+
| Field | Value                                                                              |
+-------+------------------------------------------------------------------------------------+
| type  | novnc                                                                              |
| url   | http://192.168.56.11:6080/vnc_auto.html?token=4f0e25f3-249a-4efd-af08-3c3c9eb48850 |
+-------+------------------------------------------------------------------------------------+