Oracle Orchestration V2使用介绍_JavaOrchestration简介

         随着Oracle Cloud即将在中国落地,Oracle企业级的云服务即将为中国企业用户提供更优质的服务。本文介绍的Orchestration服务就是Oracle云服务的重要部分。     

        那什么是Orchestration呢?举个例子,用户在使用公有云服务时,如创建云主机、创建存储,设置安全控制等,一般都是在Web上通过向导,填入必要的信息,逐步点Next就可以完成的。这当然很简单方便,但如果是创建10个,100个云主机呢?如果需要设置多个安全策略呢?这就需要太多重复的工作了。这个时候就需要一个资源编排工具,通过对公有云上的资源进行编排,设定资源之间的依赖关系,简单就可以实现10个,100个,1000个云上资源的创建、关闭、删除等管理工作。Orchestration就是Oracle提供的一种资源编排工具。

        目前Oracle已经发布了Orchestration的第2个版本,V2比V1版本有了更多功能和特点,本文不再详细比较这两个版本的特性,如有兴趣,可以详细阅读附录中的官方文档。本文后续的内容大部分是通用的,但主要是以V2为主,示例也是V2的。



Oracle Orchestration V2使用介绍_Java使用Orchestration

        首先需要明确Orchestration的三个基本概念:

  • Type,即Orchestration能够管理的资源类型,如云主机的type就是Instance,云存储的type就是StorageVolume。

  • Objects,即每个资源类型的实例,如对于云主机type来说,一个Objects就是一个云主机。在一个Orchestration中可以定义100个Objects。

  • Template,即资源对应的属性。显然,对于每种资源type来说,其对应的属性是不同的,也意味着其Template是完全由资源type来确定的。

        我们可以通过一个例子来深入理解以上概念。首先,Orchestration的定义是通过JSON格式来完成的,下图中type就是IpNetwork,这段定义了一个具体的Object叫做gse_ipnet_app,这个Object的Template属性中包括了name, ipNetworkExchange和ipAddressPrefix等。

Oracle Orchestration V2使用介绍_Java_03

        同时,在示例中对象之间是有依赖关系的,这个依赖关系通过{{lable:name}}的方式进行说明。对象之间的依赖关系,在后面的具体讲解中会有说明。

        那么Orchestration能够管理的对象也可以分为三类:

  • Computing,对应的是云主机,是客户直接面对的最终对象,包括名称、主机名、主机间的依赖关系以及主机的存储、网络等。

  • Storage,对应的是块存储,可以是纯粹的数据盘,也可以是带操作系统的启动盘。

  • Networking,对应的是云端的网络资源,即Shared Network和IP Network。

        考虑到计算资源是依赖存储资源和网络资源的,我们先介绍存储资源的定义,再讨论网络资源的定义,最后讨论如何定义云主机。

定义存储

        在云计算的世界中,存储包括块存储和对象存储,对象存储主要用于备份、BYOI、snapshot等功能,块存储才是云主机直接使用的存储。在Oracle公有云中,块存储还可以分为两类:

  • 启动存储,此时存储创建时是以某个操作系统Image为基础的,这个存储本身就可以启动。如果设定存储大小为100GB,则数据可用容量是100GB减去操作系统的大小。

  • 数据存储,这种存储仅用于保存数据,存储上没有操作系统文件,也不可以启动。这种存储设定的大小就是数据可用容量。

        我们使用一个简单的Orchestration来说明存储的创建方法,如下图所示:

Oracle Orchestration V2使用介绍_Java_04

        首先orch2-gse-storages.json就是我们完成的Orchestration,这个Orchestration用于创建两个存储。每个Orchestration可以包括以下属性(Top Attributes):

  • Name,必须属性,是Orchestration的名称,是由三段组成,第一段Compute-gse00002994中的Compute是Namespace,表明是IaaS Compute相关的,gse00002994是客户在Oracle公有云上的identity Domain Name;第二段cloud.admin是客户在Oracle公有云上的用户名。当然这个用户必须具有相应的权限才能创建相应的资源;第三段gse_storages_01是可以自定义的名称,可以采用客户自己的命名规则,但需要保持唯一性。

  • desired_state,必须属性。状态值有四个:active,表示上传Orchestration后立即启动Orchestration,创建相应资源;inactive,表示Orchestration立即停止,删除所有定义的资源;suspend,表示Orchestration立即停止,但只删除非持久性资源;delete,停止Orchestration,并删除所有定义的资源以及Orchestration本身。

  • Objects,必须属性,代表着这个orchestration定义的资源。每个Orchestration文件最多可以定义100个Objects。

  • Description是可选的,可根据需要填写详细的描述。

  • Tags也是可选属性,可自定义。

        示例中Objects是存储StorageVolume,由type属性确定,Objects有通用的属性,某些对象还有特别属性需要设置。通用属性包括:

  • Type,必须属性,说明要创建的对象类型,包括StorageVolume,Instance等。

  • Label,必须属性,字符串,每个Object在Orchestration中Label是唯一的。

  • Template,必须属性,是对象的详细属性值的集合。

  • Persistent,可选属性,如果为True,那此对象为持久化对象,否则为非持久化对象。这个值默认为false。

  • Relationships,可选属性,如果定义的对象和其他对象有依赖关系,可通过这个属性来设置。


        内层是Template,每种Object的详细设置信息。示例中包括了启动存储和数据存储,可以从属性上进一步区分:

  • Name,必须属性,存储的名称,和Orchestration的名称一样,也是三段式,第三段是自定义的。

  • Size,必须属性,存储的大小,单位可以是K、M、G、T,也可以是小写字母,在Oracle公有云中存储的范围是1GB ~ 2TB。

  • Properties,必须属性,磁盘属性,主要是磁盘的IOPS和吞吐量属性有差异。/oracle/public/storage/default普通存储,/oracle/public/storage/latency是高性能存储,/oracle/public/storage/ssd/gp1是SSD存储。

  • Bootable,可选属性,默认为False,存储不可启动,是数据存储;设置为True时,必须设置imagelist属性来指定启动的操作系统Image。

  • Imagelist,可选属性,仅当Bootable设置为True时需要设置。当操作系统Image是客户自定义的Image(BYOI)或来自于Oracle Cloud Marketplace时,设置为/Compute-gse00002994/cloud.admin/<Image-Name>,如果使用Oracle公有云提供的操作系统Image。例如用Oracle Linux 6.8,设置为/oracle/public/OL_6.8_UEKR4_x86_64。可通过REST API查询系统提供的Image名称,也可以在Web上在向导中获得。

定义网络

        在Oracle公有云的OCIC和OCC中,支持两类网络:Shared Network和IP Network,这两种网络包括的对象类型和对象属性完全不一样,我们来分别讨论。

Oracle Shared Network

        Shared Network是默认的网络模式,此种模式下云主机的外部IP地址和内部IP地址是由Oracle自动赋予的,但用户可以定义保留IP功能来保证外网IP地址不变,但无法干预、指定内部私有IP。

        Shared Network模式下,通过Security List、Security Application、Security IP List和Security Rule来定义网络的安全性,架构图如下:

Oracle Orchestration V2使用介绍_Java_05

  • Security List,本质上是虚拟防火墙,默认规则是拒绝外部访问(Deny Inbound),容许访问外部(Permit Outbound),在一个Security List之内的主机之间的访问是畅通的。因此在Oracle公有云当中,如果仅仅设置了Security List,那么客户默认是不能访问到这个云主机的(客户端访问,对于云主机属于外部访问,默认是拒绝的),这也是Oracle公有云默认的安全设置。

  • Security Application,定义一个需要访问的协议和端口。Oracle已经定义了大部分常见的协议和端口,如ssh、https等,客户可以定义自己独有的协议和端口。

  • Security IP List,定义一个安全的IP列表,在Security Rule中作为source时,则客户只能通过指定的这些IP来访问到Destination。

  • Security Rule,定义一条安全规则,允许Source通过制定的Security Application来访问Destination,其中Security List可以做为Source或Destination,Security IP List只能作为Source。

定义Shared Network的这些资源是比较简单的,定义Security List示例:

Oracle Orchestration V2使用介绍_Java_06

定义Security Application示例:

Oracle Orchestration V2使用介绍_Java_07

定义Security Rule示例,注意,创建Security Rule需要Security Application和Security List准备好,因此需要设置依赖关系,此处是在同一个Orchestration中定义的,可使用{{label:name}}的Reference方法进行设置,如果是不同的Orchestration,就需要通过relationship来定义依赖关系。

Oracle Orchestration V2使用介绍_Java_08

Oracle IP Network

        与Shared Network不同,Oracle IP Network的内部IP地址是客户可以自己定义的,使用私网IP地址,如192.168.x.x,10.0.x.x等,云主机之间通信可以采用私网IP地址。显然,IP Network的优点是可以完全兼容于客户目前的网络架构,采用VPN打通云端和本地数据中心后,即可实现一个虚拟的、混合云网络;另外,采用IP Network也可以降低公有IP的使用费用,以及加强网络的安全性。

IP Network下有三个常用设置:

  • IP Network,即一个自定义的私有网段,如192.168.2.x/24网段。

  • IP Network Exchange,虚拟的网络路由器,一个IP Network Exchange可以包括多个IP Network,这些IP Network网段之间直接连通,因此一个IP Network Exchange中的IP Network网段不能重复,不同的Exchange中的IP Network网段则可以重复。

  • Virtual Nic Set,虚拟网卡集合,主要用于设置基于网卡的访问控制策略。

        通常来讲,IP Network是私有网络,外部不能直接访问,必须通过VPN或Shared Network才能访问,安全性主要通过Shared Network来设置,IP Network本身很少设置安全策略,但Oracle实际上也对IP Network提供了很多安全设置,对安全性要求较高的客户可以考虑设置。

定义计算

        最后,我们来定义计算资源,我们首先给出一个示例来说明:

Oracle Orchestration V2使用介绍_Java_09

  • Name,可选属性,也是一个三段式的命名。

  • Shape,必需属性,是Oracle定义的计算实例资源的名称,本质上是OCPU(Oracle定义的CPU单位,代表着一个物理核)和内存的组合,某些特殊Shape还代表着不同大小的SSD存储大小。通常情况下,一个OCPU可以配置7.5GB内存(普通版)或15GB内存(高配版,标志是shape名称后面有一个m),Shape的定义可在文章参考列表中获得。

  • Label,可选属性,字符串,设置依赖关系的Reference时使用Label属性。

  • Hostname,可选属性,自定义主机名。

  • Attributes,可选属性,用于定义一些云主机使用的属性。但对于Windows云主机,必须使用这个属性来设置Administrator的密码和在Windows上启用RDP服务。

  • Sshkeys,可选属性,但对于Linux类主机,必须使用这个属性指定云主机使用的SSH Public Key(Oracle公有云强制Linux使用SSH Key的方式,加强安全性)。

  • Networking,必须属性,设置网络相关属性,Oracle在OCIC上支持多达8个网卡,这个属性可以针对每个网卡进行设置,其中针对Shared Network和IP Network的属性是有差异的。示例中使用了两个网卡,第一个网卡采用的是IP Network模式,第二个网卡使用的是Shared Network模式。

  • Storage_attachments,必须属性,设置存储属性。每个云主机可以设置10个存储,设置时从1开始,指定每个存储的三段式名称或通过Reference进行设置。

  • Boot_order,当Storage_attachments定义的第一个存储是启动存储时,必须设置这个属性为1。

  • Imagelist,当Storage_attachments定义的第一个存储是数据存储时,必须设置这个属性为操作系统Image,可以是Oracle提供的,或者来自Oracle Marketplace,也可以来自于BYOI。

Web编辑还是文本编辑

        根据我们的介绍,现在其实已经可以完成一个Orchestration了。显然,这个Orchestration是基于文本的,采用JSON格式编写的,那么Oracle是否提供图形化界面呢?

        答案是,有的。Oracle提供了Web界面来协助客户完成Orchestration的编写,在Orchestration Tab中点击Create Orchestration,然后选择你要创建的Object,通过向导即可创建,之后会自动生成对应的JSON代码。

        当然,这个图形编辑器的功能还是有限的,远远没有文本编辑器的效率高。但通过Web编辑器可以学习所需要对象的具体示例写法,对于文本编写还是有很大参考价值的。当然,通过Web向导创建一个计算实例,Oracle也会自动生成对应的Orchestration,也具有很好的参考价值。

        编写完成的Orchestration可以通过Web进行上传、启动、关闭、挂起、删除等操作,也可以通过REST API进行。关于REST API的详细使用,可以访问附件中的官方文档。

小结

        Oracle通过Orchestration提供了一种方便、灵活的资源定义及管理工具,通过简单的Web点击或文本编辑即可实现,对于云端的管理和运维还是很有价值的。

        在使用过程中,V2可以将一个应用的所有资源定义在一个文件中,但考虑到灵活性和多实例的创建,小编建议采用网络、存储和计算资源分别进行定义的方式。

        最后需要指出的是,Orchestration在OCI-C和Oracle Cloud @ Customer都是可以使用的,如果您已经拥有这些云服务,享受您的Orchestration吧!


参考资料:

  • Orchestration V2 Public Doc:https://docs.oracle.com/en/cloud/iaas/compute-iaas-cloud/stcsg/

  • Orchestration REST API:http://docs.oracle.com/cloud/latest/stcomputecs/STCSA/QuickStart.html

  • About Shape:https://docs.oracle.com/en/cloud/iaas/compute-iaas-cloud/stcsg/machine-images-and-shapes.html

编辑:Henry