nanjj

cloud-init

Table of Contents

1. 0

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

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

2. 1

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

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

数据源 创建日期 贡献者
NoCloud 2009 Canonical, HP
EC2 2009 Canonical, HP
AltCloud 2009 Canonical, HP, Yahoo!
OVF 2011 Canonical, HP
None 2012 Yahoo!
MAAS 2012 Canonical
ConfigDriver 2012 Canonical
CloudStack 2012 Canonical, Cosmin Luta
OpenNebula 2012 Canonical, Yahoo!, Cerit-Science Cloud
SmartOS 2013 Canonical
OpenStack 2014 Yahoo!
CloudSigma 2014 CloudSigma
DigitalOcean 2014 DigitalOcean
GCE 2014 GCE
Azure 2013 Canonical
Bigstep 2015 Bigstep
Aliyun 2016 Aliyun
Scaleway 2017 Scaleway
[Hetzner] 2018 [Hetzner]
IBMCloud 2018 IBMCloud
OracleCloud 2018 Canonical
RbxCloud 2018 RbxCloud
[VMware] 2018 [VMware]
Exoscale 2019 Exoscale
UpCloud 2021 UpCloud
LXD 2021 Canonical
Vultr 2021 Vultr
[NWCS] 2022 [NWCS]

3. 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"
    //

4. 3

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

5. 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 - 上传或下载虚机里任意文件。

LXDAgent监听vsockLXD通过vsockLXD Agent通讯。

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

6. 5

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

那如何支持呢?

两种: 1. NoCloud, 2. LXD

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