1

OpenStack Ocata 安装 0x05 — Launch instances

 2 years ago
source link: https://blog.triplez.cn/posts/openstack-ocata-installation-0x05-launch-instances/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

启动实例#

所有操作均在控制节点上完成。

建立虚拟网络#

网络选项一#

实例将通过提供商的第二层网络连接到外部网络。

admin 以及其他特权用户必须建立该类型网络。

网络拓扑图:

Networking Option 1: Provider networks - Overview

网络连接图:

Networking Option 1: Provider networks - Connectivity

建立网络与子网#

导入 admin 环境变量:

$ .admin-openrc

建立网络:

$ openstack network create --share --external --provider-physical-network provider --provider-network-type flat provider

建立子网:

$ openstack subnet create --network provider --allocation-pool start=START_IP_ADDRESS,end=END_IP_ADDRESS --dns-nameserver DNS_RESOLVER --gateway PROVIDER_NETWORK_GATEWAY --subnet-range PROVIDER_NETWORK_CIDR provider
  • START_IP_ADDRESSEND_IP_ADDRESS 替换为需要的 IP 段;
  • DNS_RESOLVER 替换为需要的 DNS 服务器 IP 地址;
  • PROVIDER_NETWORK_GATEWAY 替换为目的网关;
  • PROVIDER_NETWORK_CIDR 替换为目标网络的 CIDR 地址,如 192.168.1.0/24

网络选项二#

实例将通过 DHCP 分配到内部子网段的 IP 地址,并能够通过 NAT 连接外部网络。外部网络主机需要通过浮动 IP 才能够访问到实例。

在建立自服务网络前必须先建立提供商网络(即网络选项一)。

网络拓扑图:

Networking Option 2: Self-service networks - Overview

网络连接图:

Networking Option 2: Self-service networks - Connectivity

建立网络与子网#

导入 demo 用户环境变量:

$ . demo-openrc

建立网络:

$ openstack network create selfservice

建立子网:

$ openstack subnet create --network selfservice --dns-nameserver DNS_RESOLVER --gateway SELFSERVICE_NETWORK_GATEWAY --subnet-range SELFSERVICE_NETWORK_CIDR selfservice
  • DNS_RESOLVER 替换为需要的 DNS 服务器 IP 地址;
  • SELFSERVICE_NETWORK_GATEWAY 替换为目的网关;
  • SELFSERVICE_NETWORK_CIDR 替换为目的网络的 CIDR 地址,如 172.16.1.0/24
新建路由#

导入 demo 环境变量:

$ . demo-openrc

新建路由:

$ openstack router create router
设置路由#

将自服务网络中的子网接入路由:

$ neutron router-interface-add router selfservice

设置路由网关:

$ neutron router-gateway-set router provider
测试路由#

导入 admin 环境变量:

$ . admin-openrc

查看网络命名空间:

$ ip netns

应该能看到一个 qrouter 命名空间和两个 qdhcp 命名空间。

查看网关 IP

$ neutron router-port-list router

测试连通性:

$ ping -c 4 GATEWAY_IP

GATEWAY_IP 替换成上一步中输出的 IP

新建虚拟主机类型#

新建 m1.nano

$ openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano

新建密钥对#

导入 demo 环境变量:

$ . demo-openrc

生成密钥对:

$ ssh-keygen -q -N ""

将公钥添加至密钥对:

$ openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey

查看密钥对:

$ openstack keypair list

添加安全组规则#

允许 ICMP 通信:

$ openstack security group rule create --proto icmp default

若不打开可能会 ping 不通虚拟机。

允许 SSH 连接:

$ openstack security group rule create --proto tcp --dst-port 22 default

启动实例#

导入 demo 用户环境变量:

$ . demo-openrc

查看虚拟主机类型:

$ openstack flavor list

查看镜像状态:

$ openstack image list

查看可用网络:

$ openstack network list

查看安全组信息:

$ openstack security group list

启动基于提供商网络(网络选项一)的实例:

$ openstack server create --flavor m1.nano --image IMAGE_NAME --nic net-id=PROVIDER_NET_ID --security-group default --key-name mykey provider-instance

IMAGE_NAMEPROVIDER_NET_ID 更改为需要选用的配置。

启动基于自服务网络(网络选项二)的实例:

$ openstack server create --flavor m1.nano --image IMAGE_NAME --nic net-id=SELFSERVICE_NET_ID --security-group default --key-name mykey selfservice-instance

IMAGE_NAMESELFSERVICE_NET_ID 更改为需要选用的配置。

实例无法启动: 错误信息:InvalidURL: Failed to parse: http:controller:9292 错误原因:控制节点 /etc/nova/nova.conf[glance] 部分的 api_servers 的值有误。 解决方案:补全 HTTP 协议头,将 http: 改写为 http://

查看实例启动状态:

$ openstack server list

实例启动错误 status:ERROR: 错误信息:VirtualInterfaceCreateException: Virtual Interface creation failed 错误原因:libvirt 再启动之前会等待 neutron 确认插件情况。这使得 libvirt 驱动在真正的虚拟机启动之前使用实例事件机制去等待 neutronVIF 信息。等待超时后,就会报虚拟机启动错误。 解决方案:在计算节点的 /etc/nova/nova.conf[DEFAULT] 部分中增加:

vif_plugging_is_fatal: false 
vif_plugging_timeout: 0

然后重新启动 openstack-nova-compute 即可。

登录实例#

通过 VNC 登入#

$ openstack console url show INSTANCE_NAME

INSTANCE_NAME 替换成自己的实例名称。

通过给出的 URL 登录实例。

通过命令行登入#

查看网络情况:

$ openstack network list

查看虚拟网络中的命名空间:

$ ip netns

通过指定命名空间执行命令登入:

$ ip netns exec NETNS_NAME ssh USER@SERVER_IP_ADDRESS

需要将 NETNS_NAMEUSERSERVER_IP_ADDRESS 更换成目标服务器的信息。

验证网络连通性#

$ ping -c 4 GATEWAY_IP
$ ping -c 4 triplez.cn

GATEWAY_IP 改为当前加入网络的网关 IP

CirrOS 启动卡在 further output written to /dev/ttys0 错误信息:further output written to /dev/ttys0 错误原因:无法获取网卡 IP 解决方案:在计算节点上运行 sudo systemctl restart openstack-compute neutron-linuxbridge-agent 即可。

实例无法联网: 错误信息:获取不到 IP 错误原因:更改了 nova-compute 模块后没有重启计算节点上的 neutron-linuxbridge-agent 服务。 解决方案:在计算节点上运行 sudo systemctl restart openstack-compute neutron-linuxbridge-agent 即可。

实例无法 ping 通域名: 错误信息:ping: bad address ‘triplez.cn’ 错误原因:初始化的 DNS 服务不可用。 解决方案:移除原来子网中设置的 DNS 服务器,新增 8.8.8.89.9.9.9 公共 DNS 服务器。

添加浮动 IP#

仅针对自服务网络(网络选项二)。

生成浮动 IP

$ openstack floating ip create provider

将生成的浮动 IP 绑定到目标实例 selfservice-instance 上:

$ openstack server add floating ip selfservice-instance FLOATING_IP

FLOATING_IP 改为生成的浮动 IP 地址。

在控制节点上验证网络连通性:

$ ping -c 4 FLOATING_IP

FLOATING_IP 改为生成的浮动 IP 地址。

总结#

启动实例是一个比较综合的工作,需要之前安装的四个基础模块的互相配合才能够如我们预期般运行。OpenStack 本是一个解耦的系统,然而我们在部署时,需要将其重新耦合起来。出问题也是很正常的。还是要有耐心对待,仔细写配置文件,出错看日志文件,相信能够解决大多数问题。


知识共享许可协议
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK