安装cloud-init
为保证运行该镜像的ECS实例能成功完成初始化配置,建议您在制作Linux类型自定义镜像时,在源服务器上安装cloud-init。本文介绍安装阿里云版cloud-init和社区版cloud-init的操作步骤。
前提条件
如需安装阿里云版cloud-init,确保源服务器已安装python-pip依赖库。
如需安装社区版cloud-init,确保源服务器已安装git、python 2.7和python-pip依赖库。
Linux部分发行版的安装命令如下,供您参考。
- CentOS/Red Hat Enterprise Linux:
yum -y install git python python-pip
- Ubuntu/Debian:
apt-get -y install git python python-pip
- OpenSUSE/SUSE:
zypper -n install git python python-pip
背景信息
cloud-init是云平台为Linux操作系统的虚拟机做系统初始化配置的开源服务软件。阿里云、AWS、Azure和OpenStack等主流云平台均支持cloud-init。更多详情,请参见cloud-init官方文档。
阿里云版cloud-init能在实例启动阶段完成初始化配置,包括NTP、软件源、主机名和SSH密钥对等,同时进行实例自定义数据(User data)脚本的执行。
说明 高于18版本的cloud-init会自动完成网络的初始化配置,自动配置的网络为
BOOTPROTO=dhcp DEVICE=eth0 ONBOOT=yes STARTMODE=auto TYPE=Ethernet USERCTL=no
。目前,部分新版本公共镜像已升级至19.1版本。如果您安装了cloud-init后有自定义网络配置的需求,请参见下文(可选)自定义网络配置。
适用对象
阿里云所有公共镜像默认安装cloud-init。如果您在以下场景中使用自定义镜像时,为保证创建的实例能自动初始化系统配置,建议您为Linux服务器安装阿里云版cloud-init。
- 准备迁移上云的,但未安装cloud-init的Linux服务器。
- 已安装cloud-init,但版本低于0.7.9的Linux服务器。
- 已在阿里云运行的,但未安装cloud-init的ECS实例。
检查cloud-init版本
不同云平台及不同版本之间的cloud-init可能互不兼容,请选择合适的版本并配置合适的数据源(datasource)。其中阿里云cloud-init的版本为0.7.6a,数据源为Aliyun
。
安装cloud-init后,默认开机自启动,若所选版本不兼容或数据源配置不当,下次重启服务器时可能导致cloud-init运行异常、系统启动缓慢,甚至无法正常启动系统。
(推荐)安装阿里云版cloud-init
不同Linux发行平台安装阿里云cloud-init的命令示例如下,供您参考。 实际安装时,可能需要根据您的操作系统适当调整脚本。
- CentOS 6/7
# 检查安装python-pip if ! python -c 'import setuptools' >& /dev/null; then yum -y install python-pip fi # 备份旧版cloud-init test -d /etc/cloud && mv /etc/cloud /etc/cloud-old # 下载并解压阿里云版cloud-init wget http://ecs-image-utils.oss-cn-hangzhou.aliyuncs.com/cloudinit/ali-cloud-init-latest.tgz tar -zxvf ./ali-cloud-init-latest.tgz # 安装cloud-init issue_major=$( cat /etc/redhat-release | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}') bash ./cloud-init-*/tools/deploy.sh centos "$issue_major"
- Red Hat Enterprise Linux 6/7
# 检查安装python-pip if ! python -c 'import setuptools' >& /dev/null; then yum -y install python-pip fi # 备份旧版cloud-init test -d /etc/cloud && mv /etc/cloud /etc/cloud-old # 下载并解压阿里云版cloud-init wget http://ecs-image-utils.oss-cn-hangzhou.aliyuncs.com/cloudinit/ali-cloud-init-latest.tgz tar -zxvf ./ali-cloud-init-latest.tgz # 安装cloud-init issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}') bash ./cloud-init-*/tools/deploy.sh rhel "$issue_major"
- Ubuntu 14/16/18
# 检查安装python-pip if ! python -c 'import setuptools' >& /dev/null; then apt-get install python-pip -y fi # 备份旧版cloud-init test -d /etc/cloud && mv /etc/cloud /etc/cloud-old # 下载并解压阿里云版cloud-init wget http://ecs-image-utils.oss-cn-hangzhou.aliyuncs.com/cloudinit/ali-cloud-init-latest.tgz tar -zxvf ./ali-cloud-init-latest.tgz # 安装cloud-init issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}') bash ./cloud-init-*/tools/deploy.sh ubuntu "$issue_major"
- Debian 8/9
# 检查安装python-pip if ! python -c 'import setuptools' >& /dev/null; then apt-get -y install python-pip fi # 备份旧版cloud-init test -d /etc/cloud && mv /etc/cloud /etc/cloud-old # 下载并解压阿里云版cloud-init wget http://ecs-image-utils.oss-cn-hangzhou.aliyuncs.com/cloudinit/ali-cloud-init-latest.tgz tar -zxvf ./ali-cloud-init-latest.tgz # 安装cloud-init issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}') bash ./cloud-init-*/tools/deploy.sh debian "$issue_major"
- SUSE 11/12
# 检查安装python-pip if ! python -c 'import setuptools'>& /dev/null; then zypper -n install python-pip fi # 备份旧版cloud-init test -d /etc/cloud && mv /etc/cloud/etc/cloud-old # 下载并解压阿里云版cloud-init wget http://ecs-image-utils.oss-cn-hangzhou.aliyuncs.com/cloudinit/ali-cloud-init-latest.tgz tar -zxvf ./ali-cloud-init-latest.tgz # 安装cloud-init issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}') bash ./cloud-init-*/tools/deploy.sh sles "$issue_major"
- OpenSUSE 13/42
# 检查安装python-pip if ! python -c 'import setuptools'>& /dev/null; then zypper -n install python-pip fi # 备份旧版cloud-init test -d /etc/cloud && mv /etc/cloud/etc/cloud-old # 下载并解压阿里云版cloud-init wget http://ecs-image-utils.oss-cn-hangzhou.aliyuncs.com/cloudinit/ali-cloud-init-latest.tgz tar -zxvf ./ali-cloud-init-latest.tgz # 安装cloud-init issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}') bash ./cloud-init-*/tools/deploy.sh opensuse"$issue_major"
(可选)安装社区版cloud-init
(可选)自定义网络配置
故障排查
- 不同镜像缺少的库可能不同,您都可以通过pip安装,之后再次安装cloud-init。
- 如果系统默认软件包管理器(例如yum)和pip管理器分别安装过不同版本的依赖库,可能造成库版本冲突,导致cloud-init运行异常。建议您根据报错信息按需下载依赖库。
报错信息 | 原因 | 排错命令 |
---|---|---|
no setuptools module in python |
缺失模块python setuptools |
|
File "/root/cloud-init/cloudinit/log.py", line 19, in <module> import six ImportError: No module named six ) |
缺失依赖库six |
|
File "/root/cloud-init/cloudinit/url_helper.py", line 20, in <module> import oauthlib.oauth1 as oauth1 ImportError: No module named oauthlib.oauth1 ) |
缺失依赖库oauthlib |
|
报错时没有明确缺少的依赖库 | 未映射相关错误信息 | 根据cloud-init的requirements.txt文件里显示的库,运行以下命令安装所有依赖库:
|
后续步骤
- 对于准备迁移上云的Linux服务器:
- 对于已在阿里云上运行Linux自定义镜像的ECS实例:
您可以重启系统验证结果。如果系统自动配置了主机名、软件源和NTP等配置,则表示已成功安装cloud-init。例如,查看网络配置文件。
[root@iZbp1ios3psx4hoi******Z ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 # Created by cloud-init on instance boot automatically, do not edit. # BOOTPROTO=dhcp DEVICE=eth0 ONBOOT=yes STARTMODE=auto TYPE=Ethernet USERCTL=no
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论