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所支持的数据源:
数据源 | 创建日期 | 贡献者 |
---|---|---|
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
其实现是显然的,这里不做展开。