01/01/23 Sunday 11AM0
cloud-init是GPLv3和Apache2.0双协议发布的自由软件, 于2009年,最初 Canonical为其服务器版操作系统Ubuntu运行于亚马逊EC2而设计。 cloud-init使得Ubuntu灵活运行于云端,因此Canonical就把自己的操作系统叫云原生操作系统。
cloud-init连接云平台和操作系统。
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] |
2
其中EC2最早。著名IP 169.254.169.254就来自此。基于EC2的变种有:
- aliyun,
- aws,
- brightbox,
- e24cloud,
- outscale,
- 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 Agent是LXD运行在LXD所起虚机里的Agent。
+--------------HOST-----------------+
| +-------VM-------+ |
+--------------+ | +-----+ | +-----------+ | |
| lxc shell vm +--http-+->| LXD +-vsock-+->| LXD Agent | | |
+--------------+ | +-----+ | +-----------+ | |
| +----------------+ |
+-----------------------------------+
须知:
LXD Agent监听vsock。LXD通过vsock与LXD Agent通讯。
执行命令和上传下载文件是容器技术的标配。LXD把系统容器管理做到了极致,逐渐拓展到虚机管理。由此LXD兼具系统容器管理和虚机管理。在跨界的过程中(从API角度看并未跨界),exec和sftp也从系统容器带到了虚机。
5
LXD做系统容器管理的时候,系统容器支持cloud-init。一般容器里应用配置都固化在容器镜像里,比如Docker容器镜像。容器启动应用运行,并不需要沉重的cloud-init配置。但LXD支持的是系统容器。系统容器要和虚机越像越好。系统容器里的配置要和虚机里的配置相同。因此LXD就支持了 cloud-init。
那如何支持呢?
两种:
- NoCloud,
- LXD
其实现是显然的,这里不做展开。