暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

OCI上使用cloud-init客户化云主机启动过程

1572

关于云和开源的关系,云和开源会互相拥抱和支持,云服务不会排斥开源软件和开源技术标准,而是会给开源软件更多的可能与发展, 云会给开源带来更多的可能和想象空间。甲骨文OCI云服务基于自身研发的处于业界领先水平的云平台,结合业界众多流行的开源软件和技术标准,为客户提供高可用、稳定弹性的云服务。在OCI的计算实例服务中,OCI通过兼容实现业界广泛采用的开源的Cloud-init技术标准,来满足客户化启动云主机的业务需求。

Cloud-init介绍

Cloud-init 是行业标准的跨平台云实例初始化的方法。

Cloud-init是开源的,能够对新创建的云服务器中指定的自定义信息(主机名、密钥和用户数据等)进行初始化配置。主要的公共云厂商、私有云厂商的和裸金属安装方案都支持Cloud-init。


支持Cloud-init的公有云厂商包括OCI、AWS、Azure、GCP等。


支持Cloud-init的Linux主要发行版包括RHEL/CentOS/Fedora/Debian/Ubuntu/Suse等。


云实例从磁盘镜像(Disk Image)和实例数据完成初始化,来源于以下三类数据:

  • 云元数据 Cloud metadata

  • 用户数据User data Vendor data(可选)

  • 厂商数据Vendor data(可选)


Cloud-init将使计算实例启动期间读取任何提供的元数据并相应地初始化系统。这可以设置网络和存储设备以配置SSH访问密钥和系统用户/用户组/访问权限的许多其他方面。


当系统启动时,Cloud-init会从固定分区读取数据,然后执行定制化操作。

Cloud-init 有五个执行阶段:

  • Generator

  • Local

  • Network

  • Config

  • Final

这些服务是一次性进程, 即systemd启动之后这些进程或者命令只会执行一次, 不会以常驻进程存在。

Cloud-init的典型应用场景

  • 设置 hostname

cloud-init默认会将Instance的名字设置为hostname。但这样不太方便,有时希望能够将二者分开,可利用 Cloud-init 的set_hostname 模块实现。set_hostname 它会查询 metadata 中 hostname 信息,默认值就是 instance 的名字。

  • 定制用户初始密码

官方的 Cloud Image 默认只能通过 ssh key 登录。我们可以利用set-passwords 模块为用户设置密码并启用密码登录。

  • 安装软件

标准镜像中不可能包含我们需要的所有软件,定制安装是不可避免的。一个办法是部署完后手动安装,另一个办法是通过package-update-upgrade-install模块让Cloud-init 自动为我们安装。

OCI上使用cloud-init初始化云主机实例

下面通过一个示例,展示在OCI上展示如何通过Cloud-init客户化计算实例的启动过程,示例代码如下:

  • packages执行安装软件nginx/firewalld操作。

  • runcmd执行命令行的命令,设定主机防火墙规则,这里运行对http 协议80端口的访问,启动ngnix服务,对外提供web访问服务。

  • write_files执行文件写入命令,这里生成一个html文件写入到/usr/share/nginx/html/instance-info.html文件中,该文件位于web服务器nginx的安装目录下,nginx启动后,可以直接访问。通过cloud-init 变量 {{ local_hostname }}  {{ ds.shape }} {{ instance_id }} {{ availability_zone }}读取信息,分别读取云主机名称,云主机规格等信息,完成动态信息的初始化工作。

在OCI Console上启动计算实例过程中,在高级选项(advanced options)中,上传文件cloud-init.yaml。


通过以上过程,在云主机启动完成后,可以通过云主机Public IP直接访问。


通过以上示例,可以看到在OCI提供的标准镜像上,通过Cloud-init操作客户化云主机的启动过程,供应出符合自身要求的云主机来提供服务。


更多OCI云主机启动过程参考:

https://docs.oracle.com/en-us/iaas/Content/Compute/Tasks/launchinginstance.htm

Cloud-init项目信息参考:

https://github.com/canonical/cloud-init



作者简介

向志华,甲骨文云架构团队资深咨询顾问,专注 Application PaaS 产品及服务,同时关注Docker容器产品及Kubernetes容器调度产品方向。13年IT行业从业经验,擅长J2EE产品架构及开发,参与过Openstack相关产品研发工作。您可以通过george.xiang@oracle.com,与他联系。

 


文章转载自甲骨文开发者社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论