实例¶
管理实例¶
创建实例¶
使用 OS::Nova::Server 资源创建计算实例。 flavor 属性是唯一强制的属性,但您需要使用 image 或 block_device_mapping 属性之一定义启动源。
如果您租户中可用多个网络,您还需要定义 networks 属性,以指示您的实例必须连接到哪些网络。
以下示例创建一个简单的实例,从镜像启动,并连接到 private 网络
resources:
instance:
type: OS::Nova::Server
properties:
flavor: m1.small
image: ubuntu-trusty-x86_64
networks:
- network: private
将实例连接到网络¶
使用 OS::Nova::Server 资源的 networks 属性定义实例应连接到哪些网络。将每个网络定义为 YAML 映射,其中包含以下键之一
port现有网络端口的 ID。通常,您会在相同的模板中使用 OS::Neutron::Port 资源创建此端口。您将能够将浮动 IP 关联到此端口,并将端口关联到您的计算实例。
network现有网络的名称或 ID。如果您使用此属性,则无需创建 OS::Neutron::Port 资源。但是,由于没有为服务器指定端口,因此您将无法为此实例使用 neutron 浮动 IP 关联。
以下示例演示了 port 和 network 属性的使用
resources:
instance_port:
type: OS::Neutron::Port
properties:
network: private
fixed_ips:
- subnet_id: "private-subnet"
instance1:
type: OS::Nova::Server
properties:
flavor: m1.small
image: ubuntu-trusty-x86_64
networks:
- port: { get_resource: instance_port }
instance2:
type: OS::Nova::Server
properties:
flavor: m1.small
image: ubuntu-trusty-x86_64
networks:
- network: private
创建并关联安全组到实例¶
使用 OS::Neutron::SecurityGroup 资源创建安全组。
定义 OS::Neutron::Port 资源的 security_groups 属性,以将安全组关联到端口,然后将端口关联到实例。
以下示例创建一个允许在 80 和 443 端口上进行入站连接(Web 服务器)的安全组,并将此安全组关联到实例端口
resources:
web_secgroup:
type: OS::Neutron::SecurityGroup
properties:
rules:
- protocol: tcp
remote_ip_prefix: 0.0.0.0/0
port_range_min: 80
port_range_max: 80
- protocol: tcp
remote_ip_prefix: 0.0.0.0/0
port_range_min: 443
port_range_max: 443
instance_port:
type: OS::Neutron::Port
properties:
network: private
security_groups:
- default
- { get_resource: web_secgroup }
fixed_ips:
- subnet_id: private-subnet
instance:
type: OS::Nova::Server
properties:
flavor: m1.small
image: ubuntu-trusty-x86_64
networks:
- port: { get_resource: instance_port }
创建并关联浮动 IP 到实例¶
使用 OS::Neutron::FloatingIP 资源创建浮动 IP,并使用 OS::Neutron::FloatingIPAssociation 资源将浮动 IP 关联到端口
parameters:
net:
description: name of network used to launch instance.
type: string
default: private
resources:
inst1:
type: OS::Nova::Server
properties:
flavor: m1.small
image: ubuntu-trusty-x86_64
networks:
- network: {get_param: net}
floating_ip:
type: OS::Neutron::FloatingIP
properties:
floating_network: public
association:
type: OS::Neutron::FloatingIPAssociation
properties:
floatingip_id: { get_resource: floating_ip }
port_id: {get_attr: [inst1, addresses, {get_param: net}, 0, port]}
您还可以创建一个 OS::Neutron::Port 并将其与服务器和浮动 IP 关联。但是,上述方法在堆栈更新时效果更好。
resources:
instance_port:
type: OS::Neutron::Port
properties:
network: private
fixed_ips:
- subnet_id: "private-subnet"
floating_ip:
type: OS::Neutron::FloatingIP
properties:
floating_network: public
association:
type: OS::Neutron::FloatingIPAssociation
properties:
floatingip_id: { get_resource: floating_ip }
port_id: { get_resource: instance_port }
启用对实例的远程访问¶
OS::Nova::Server 资源的 key_name 属性定义用于启用 SSH 远程访问的密钥对
resources:
my_instance:
type: OS::Nova::Server
properties:
flavor: m1.small
image: ubuntu-trusty-x86_64
key_name: my_key
注意
有关密钥对的更多信息,请参阅 配置实例的访问和安全性。
创建密钥对¶
您可以使用 OS::Nova::KeyPair 资源创建新的密钥对。密钥对可以在堆栈创建期间导入或创建。
如果未指定 public_key 属性,则 Orchestration 模块会创建一个新的密钥对。如果将 save_private_key 属性设置为 true,则资源的 private_key 属性包含私钥。
以下示例创建一个新的密钥对,并将其用作实例的身份验证密钥
resources:
my_key:
type: OS::Nova::KeyPair
properties:
save_private_key: true
name: my_key
my_instance:
type: OS::Nova::Server
properties:
flavor: m1.small
image: ubuntu-trusty-x86_64
key_name: { get_resource: my_key }
outputs:
private_key:
description: Private key
value: { get_attr: [ my_key, private_key ] }
管理网络¶
创建网络和子网¶
注意
您的 OpenStack 部署必须启用 Networking 服务 (neutron) 才能创建和管理网络和子网。如果您的部署使用传统网络 (nova-network),则无法创建网络和子网。
使用 OS::Neutron::Net 资源创建网络,并使用 OS::Neutron::Subnet 资源为该网络提供子网
resources:
new_net:
type: OS::Neutron::Net
new_subnet:
type: OS::Neutron::Subnet
properties:
network_id: { get_resource: new_net }
cidr: "10.8.1.0/24"
dns_nameservers: [ "8.8.8.8", "8.8.4.4" ]
ip_version: 4
创建和管理路由器¶
使用 OS::Neutron::Router 资源创建路由器。您可以使用 external_gateway_info 属性定义其网关
resources:
router1:
type: OS::Neutron::Router
properties:
external_gateway_info: { network: public }
您可以使用 OS::Neutron::RouterInterface 资源将子网连接到路由器
resources:
subnet1_interface:
type: OS::Neutron::RouterInterface
properties:
router_id: { get_resource: router1 }
subnet: private-subnet
完整的网络示例¶
以下示例创建一个网络堆栈
一个网络和一个关联的子网。
一个带有外部网关的路由器。
一个连接到新路由器的新的子网接口。
在此示例中,public 网络是一个现有的共享网络
resources:
internal_net:
type: OS::Neutron::Net
internal_subnet:
type: OS::Neutron::Subnet
properties:
network_id: { get_resource: internal_net }
cidr: "10.8.1.0/24"
dns_nameservers: [ "8.8.8.8", "8.8.4.4" ]
ip_version: 4
internal_router:
type: OS::Neutron::Router
properties:
external_gateway_info: { network: public }
internal_interface:
type: OS::Neutron::RouterInterface
properties:
router_id: { get_resource: internal_router }
subnet: { get_resource: internal_subnet }
管理卷¶
创建卷¶
使用 OS::Cinder::Volume 资源创建新的块存储卷。
例如
resources:
my_new_volume:
type: OS::Cinder::Volume
properties:
size: 10
默认情况下,您创建的卷是空的。使用 image 属性从现有镜像创建可启动卷
resources:
my_new_bootable_volume:
type: OS::Cinder::Volume
properties:
size: 10
image: ubuntu-trusty-x86_64
您还可以从另一个卷、卷快照或卷备份创建新的卷。使用 source_volid、snapshot_id 或 backup_id 属性从现有源创建新的卷。
例如,要从备份创建新的卷
resources:
another_volume:
type: OS::Cinder::Volume
properties:
backup_id: 2fff50ab-1a9c-4d45-ae60-1d054d6bc868
在此示例中,未定义 size 属性,因为块存储服务使用备份的大小来定义新卷的大小。
将卷附加到实例¶
使用 OS::Cinder::VolumeAttachment 资源将卷附加到实例。
以下示例创建一个卷和一个实例,并将该卷附加到该实例
resources:
new_volume:
type: OS::Cinder::Volume
properties:
size: 1
new_instance:
type: OS::Nova::Server
properties:
flavor: m1.small
image: ubuntu-trusty-x86_64
volume_attachment:
type: OS::Cinder::VolumeAttachment
properties:
volume_id: { get_resource: new_volume }
instance_uuid: { get_resource: new_instance }
从卷启动实例¶
使用 OS::Nova::Server 资源的 block_device_mapping 属性定义用于启动实例的卷。此属性是附加到实例在其启动之前要附加的卷的列表。
以下示例从镜像创建可启动卷,并使用它来启动实例
resources:
bootable_volume:
type: OS::Cinder::Volume
properties:
size: 10
image: ubuntu-trusty-x86_64
instance:
type: OS::Nova::Server
properties:
flavor: m1.small
networks:
- network: private
block_device_mapping:
- device_name: vda
volume_id: { get_resource: bootable_volume }
delete_on_termination: false