01/01/23 Sunday 11AM

0

cloud-init是GPLv3和Apache2.0双协议发布的自由软件, 于2009年,最初 Canonical为其服务器版操作系统Ubuntu运行于亚马逊EC2而设计。 cloud-init使得Ubuntu灵活运行于云端,因此Canonical就把自己的操作系统叫云原生操作系统。

cloud-init连接云平台和操作系统。

1

cloud-init所支持的云平台叫数据源(Data Source),也就是初始化操作系统所用数据的来源。如果把数据源看作一个服务,那就又提metadata service的概念了。

以下列出cloud-init所支持的数据源:

数据源创建日期贡献者
NoCloud2009Canonical, HP
EC22009Canonical, HP
AltCloud2009Canonical, HP, Yahoo!
OVF2011Canonical, HP
None2012Yahoo!
MAAS2012Canonical
ConfigDriver2012Canonical
CloudStack2012Canonical, Cosmin Luta
OpenNebula2012Canonical, Yahoo!, Cerit-Science Cloud
SmartOS2013Canonical
OpenStack2014Yahoo!
CloudSigma2014CloudSigma
DigitalOcean2014DigitalOcean
GCE2014GCE
Azure2013Canonical
Bigstep2015Bigstep
Aliyun2016Aliyun
Scaleway2017Scaleway
[Hetzner]2018[Hetzner]
IBMCloud2018IBMCloud
OracleCloud2018Canonical
RbxCloud2018RbxCloud
[VMware]2018[VMware]
Exoscale2019Exoscale
UpCloud2021UpCloud
LXD2021Canonical
Vultr2021Vultr
[NWCS]2022[NWCS]

2

其中EC2最早。著名IP 169.254.169.254就来自此。基于EC2的变种有:

  1. aliyun,
  2. aws,
  3. brightbox,
  4. e24cloud,
  5. outscale,
  6. zstack.

其中阿里云后来加了自己的数据源:

class DataSourceAliYun(EC2.DataSourceEc2):

    dsname = "AliYun"
    metadata_urls = ["http://100.100.100.200"]

    # The minimum supported metadata_version from the ec2 metadata apis
    min_metadata_version = "2016-01-01"
    //

3

以上Metadata来自网络,可以叫​Metadata Service

4

LXD AgentLXD运行在LXD所起虚机里的Agent。


                       +--------------HOST-----------------+
                       |                +-------VM-------+ |
+--------------+       |  +-----+       |  +-----------+ | |
| lxc shell vm +--http-+->| LXD +-vsock-+->| LXD Agent | | |
+--------------+       |  +-----+       |  +-----------+ | |
                       |                +----------------+ |
                       +-----------------------------------+

须知:

  1. LXD运行在Host机器上,
  2. LXD Agent运行在虚机上,
  3. LXD Agent通过管控面LXD暴露给用户的服务:
    1. exec - 执行虚机里任意命令,
    2. sftp - 上传或下载虚机里任意文件。

LXD Agent监听vsockLXD通过vsockLXD Agent通讯。

执行命令和上传下载文件是容器技术的标配。LXD把系统容器管理做到了极致,逐渐拓展到虚机管理。由此LXD兼具系统容器管理和虚机管理。在跨界的过程中(从API角度看并未跨界),execsftp也从系统容器带到了虚机。

5

LXD做系统容器管理的时候,系统容器支持cloud-init。一般容器里应用配置都固化在容器镜像里,比如Docker容器镜像。容器启动应用运行,并不需要沉重的cloud-init配置。但LXD支持的是系统容器。系统容器要和虚机越像越好。系统容器里的配置要和虚机里的配置相同。因此LXD就支持了 cloud-init

那如何支持呢?

两种:

  1. NoCloud,
  2. LXD

其实现是显然的,这里不做展开。