上云无忧 > 文档中心 > 腾讯云云服务器CVM - Linux 系统安装 cloud-init
云服务器CVM
腾讯云云服务器CVM - Linux 系统安装 cloud-init

文档简介:
操作场景: Cloud-init 主要提供实例首次初始化时自定义配置的能力。如果导入的镜像没有安装 cloud-init 服务,基于该镜像启动的实例将无法被正常初始化,导致该镜像正常导入失败。本文档指导您安装 cloud-init 服务。
*此产品及展示信息均由腾讯云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

操作场景

Cloud-init 主要提供实例首次初始化时自定义配置的能力。如果导入的镜像没有安装 cloud-init 服务,基于该镜像启动的实例将无法被正常初始化,导致该镜像正常导入失败。本文档指导您安装 cloud-init 服务。 安装 cloud-init 推荐以下三种方式:
通过 下载 cloud-init 二进制包
通过 手工下载 cloud-init 源码包方式
通过 使用软件源上的 cloud-init 包方式

前提条件

安装 cloud-init 的服务器可正常访问外网。

操作步骤

下载 cloud-init 二进制包
手工下载 cloud-init 源码包方式
使用软件源上的 cloud-init 包方式
说明
cloud-init 依赖于
qcloud-python, qcloud-python 是腾讯云重新编译打包的软件包,是单独的 python 环境,仅用于 cloud-init 运行环境,建议您根据对应操作系统下载安装包,并安装在 /usr/local/qcloud/python 目录下,与系统中默认的 python 不相冲突。
cloud-init 是腾讯云基于社区20.1版本研发的,适配腾讯云运行环境的专属 cloud-init。
cloud-init 二制包支持如下 OS:
类型
OS
版本
x86_64
arm64
qcloud-python
cloud-init
qcloud-python
cloud-init
rpm
CentOS
6
qcloud-python-3.7.10-2.el6.x86_64.rpm
cloud-init-20.1.0011-2.el6.x86_64.rpm
NA
NA
7
qcloud-python-3.7.10-1.el7.x86_64.rpm
cloud-init-20.1.0011-1.el7.x86_64.rpm
qcloud-python-3.7.10-1.el7.centos.aarch64.rpm
cloud-init-20.1.0011-3.el7.centos.aarch64.rpm
8
qcloud-python-3.7.10-1.el8.x86_64.rpm
cloud-init-20.1.0011-1.el8.x86_64.rpm
qcloud-python-3.7.10-1.el8.aarch64.rpm
cloud-init-20.1.0011-3.el8.aarch64.rpm
Fedora
36
qcloud-python-3.7.10-2.fc36.x86_64.rpm
cloud-init-20.1.0011-2.fc36.x86_64.rpm
NA
NA
Kylin
20sp1
qcloud-python-3.7.10-1.ky10.x86_64.rpm
cloud-init-20.1.0011-2.ky10.x86_64.rpm
qcloud-python-3.7.10-1.ky10.aarch64.rpm
cloud-init-20.1.0011-1.ky10.aarch64.rpm
openSUSE
15.4
qcloud-python-3.7.10-2.x86_64.rpm
cloud-init-20.1.0011-2.x86_64.rpm
NA
NA
deb
Debian
11
qcloud-python_3.7.10-1_amd64.deb
cloud-init_20.1.0011-1_amd64.deb
qcloud-python_3.7.10-1_arm64.deb
cloud-init_20.1.0011-1_arm64.deb
10
qcloud-python_3.7.10-1_amd64.deb
cloud-init_20.1.0011-1_amd64.deb
NA
NA
9
qcloud-python_3.7.10-1_amd64.deb
cloud-init_20.1.0011-1_amd64.deb
NA
NA
8
qcloud-python_3.7.10-1_amd64.deb
cloud-init_20.1.0011-1_amd64.deb
NA
NA
Ubuntu
22.04
qcloud-python_3.7.10-1_amd64.deb
cloud-init_20.1.0011-1_amd64.deb
NA
NA
20.04
qcloud-python_3.7.10-1_amd64.deb
cloud-init_20.1.0011-1_amd64.deb
qcloud-python_3.7.10-1_arm64.deb
cloud-init_20.1.0011-1_arm64.deb
18.04
qcloud-python_3.7.10-1%2Bubuntu18.04_amd64.deb
cloud-init_20.1.0011-1%2Bubuntu18.04_amd64.deb
qcloud-python_3.7.10-1_arm64.deb
cloud-init_20.1.0011-1_arm64.deb
16.04
qcloud-python_3.7.10-1_amd64.deb
cloud-init_20.1.0011-1_amd64.deb
NA
NA
UOS
20
qcloud-python_3.7.10-1_amd64.deb
cloud-init_20.1.0011-1_amd64.deb
qcloud-python_3.7.10-1_arm64.deb
cloud-init_20.1.0011-1_arm64.deb

下载 cloud-init 二进制包

1. 下载上述安装包。
2. 如果系统中已经有 cloud-init,请排查并执行如下命令,清理残留。
				
rm -rf /var/lib/cloud
rm -rf /etc/cloud
rm -rf /usr/local/bin/cloud*
3. 根据操作系统,执行如下命令:
deb(Ubuntu、Debian等)系列,执行以下命令:
				
dpkg -i *.deb
rpm(CentOS、Red Hat Enterprise Linux、Fedora等)系列, 执行如下命令:
				
rpm -ivh *.rpm
4. 查询版本是否正确安装。
				
cloud-init qcloud -v
/usr/bin/cloud-init qcloud 0011
5. 重启后生效。

下载 cloud-init 源码包

说明
在正常安装的情况下
,cloud-init-20.1.0011 版本与腾讯云的兼容性最佳,可以保证使用该镜像创建的云服务器的所有配置项都可以正常初始化。建议选择 cloud-init-20.1.0011.tar.gz 安装版本。您也可以 点此获取 其他版本的 cloud-init 源码包。本文以 cloud-init-20.1.0011 版本为例。
执行以下命令,下载 cloud-init 源码包。
				
wget https://gerryguan-1306210569.cos.ap-chongqing.myqcloud.com/cloud-init/src/cloud-init-20.1.0011.tar.gz

安装 cloud-init

1. 执行以下命令,解压 cloud-init 安装包。
说明
如果您使用的操作系统为 Ubuntu,请切换至 root 账号。
				
tar -zxvf cloud-init-20.1.0011.tar.gz
2. 执行以下命令,进入已解压的 cloud-init 安装包目录(即进入 cloud-init-20.1.0011 目录)。
				
cd cloud-init
3. 根据操作系统版本,安装 Python-pip。
CentOS 6/7系列,执行以下命令:
				
yum install python3-pip -y
Ubuntu 系列,执行以下命令:
				
apt-get -y install python3-pip
OpenSUSE / SUSE系列,执行以下命令:
				
zypper -n install python3-pip
若在安装时,出现无法安装或找不到安装包的错误,可参考 解决无法安装 Python-pip 问题 进行处理。
4. 执行以下命令,升级 pip。
				
python3 -m pip install --upgrade pip
5. 执行以下命令,安装依赖包。
注意
Cloud-init 依赖组件 requests 2.20.0版本后,已弃用 Python2.6。如果镜像环境的 Python 解释器为 Python2.6及以下,在安装 cloud-init 依赖包之前,请执行 pip install 'requests<2.20.0' 命令,安装 requests 2.20.0 版本以下的版本。
				
pip3 install -r requirements.txt
6. 根据操作系统版本,安装 cloud-utils 组件。
CentOS 6系列,执行以下命令:
				
yum install cloud-utils-growpart dracut-modules-growroot -y
dracut -f
CentOS 7系列,执行以下命令:
				
yum install cloud-utils-growpart -y
Ubuntu 系列,执行以下命令:
				
apt-get install cloud-guest-utils -y
OpenSUSE / SUSE 系列,执行以下命令:
				
zypper install -y growpart
7. 执行以下命令,安装 cloud-init。
				
python3 setup.py build
				
python3 setup.py install --init-system systemd
注意
--init-system 的可选参数有:(systemd, sysvinit, sysvinit_deb, sysvinit_freebsd, sysvinit_openrc, sysvinit_suse, upstart) [default: None]。请根据当前操作系统使用的自启动服务管理方式,进行选择。若选择错误,cloud-init 服务会无法开机自启动。
centos6 及以下系统请选择 sysvinit,centos7 及以上系统请选择 systemd。本文以 systemd 自启动服务管理为例。

修改 cloud-init 配置文件

1. 根据不同操作系统,下载 cloud.cfg。
点此下载 Ubuntu 操作系统的 cloud.cfg。
点此下载 CentOS 操作系统的 cloud.cfg。
点此下载 OpenSUSE / SUSE 操作系统的 cloud.cfg。
2. /etc/cloud/cloud.cfg 的内容替换为已下载的 cloud.cfg 文件内容。

添加 syslog 用户

执行以下命令,添加 syslog 用户。
				
useradd syslog

设置 cloud-init 服务开机自启动

若操作系统是 systemd 自启动管理服务,则执行以下命令进行设置。
说明
您可执行 strings /sbin/init | grep "/lib/system" 命令,若有返回信息,则操作系统是 systemd 自启动管理服务。
针对 Ubuntu 或 Debian 操作系统,需执行以下命令。
				
ln -s /usr/local/bin/cloud-init /usr/bin/cloud-init
所有操作系统都需执行以下命令。
				
systemctl enable cloud-init-local.service
systemctl start cloud-init-local.service
systemctl enable cloud-init.service
systemctl start cloud-init.service
systemctl enable cloud-config.service
systemctl start cloud-config.service
systemctl enable cloud-final.service
systemctl start cloud-final.service
systemctl status cloud-init-local.service
systemctl status cloud-init.service
systemctl status cloud-config.service
systemctl status cloud-final.service
针对 CentOS 和 Redhat 操作系统,需执行以下命令。 将 /lib/systemd/system/cloud-init-local.service 文件替换为如下内容:
				
[Unit]
Description=Initial cloud-init job (pre-networking)
Wants=network-pre.target
After=systemd-remount-fs.service
Before=NetworkManager.service
Before=network-pre.target
Before=shutdown.target
Conflicts=shutdown.target
RequiresMountsFor=/var/lib/cloud
[Service]
Type=oneshot
ExecStart=/usr/bin/cloud-init init --local
ExecStart=/bin/touch /run/cloud-init/network-config-ready
RemainAfterExit=yes
TimeoutSec=0
# Output needs to appear in instance console output
StandardOutput=journal+console
[Install]
WantedBy=cloud-init.target
将 /lib/systemd/system/cloud-init.service 文件替换为以下内容:
				
[Unit]
Description=Initial cloud-init job (metadata service crawler)
Wants=cloud-init-local.service
Wants=sshd-keygen.service
Wants=sshd.service
After=cloud-init-local.service
After=systemd-networkd-wait-online.service
After=networking.service
After=systemd-hostnamed.service
Before=network-online.target
Before=sshd-keygen.service
Before=sshd.service
Before=systemd-user-sessions.service
Conflicts=shutdown.target
[Service]
Type=oneshot
ExecStart=/usr/bin/cloud-init init
RemainAfterExit=yes
TimeoutSec=0
# Output needs to appear in instance console output
StandardOutput=journal+console
[Install]
WantedBy=cloud-init.target
若操作系统是 sysvinit 自启动管理服务,则执行以下命令进行设置。
说明
您可执行 strings /sbin/init | grep "sysvinit" 命令,若有返回信息,则操作系统是 sysvinit 自启动管理服务。
				
chkconfig --add cloud-init-local
chkconfig --add cloud-init
chkconfig --add cloud-config
chkconfig --add cloud-final
chkconfig cloud-init-local on
chkconfig cloud-init on
chkconfig cloud-config on
chkconfig cloud-final on

安装 cloud-init

执行以下命令,安装 cloud-init
				
apt-get/yum install cloud-init
说明
通过 apt-get 或 yum 命令安装的 cloud-init 默认为当前操作系统配置的软件源中默认的 cloud-init 版本。使用该方式安装的镜像创建的实例可能会存在部分配置项初始化不符合预期的情况,建议使用 手工下载 cloud-init 源码包方式 进行安装。

修改 cloud-init 配置文件

1. 根据不同操作系统,下载 cloud.cfg。
点此下载 Ubuntu 操作系统的 cloud.cfg。
点此下载 CentOS 操作系统的 cloud.cfg。
点此下载 OpenSUSE / SUSE 操作系统的 cloud.cfg。
2. /etc/cloud/cloud.cfg 的内容替换为已下载的 cloud.cfg 文件内容。

相关操作

注意
以下操作执行完成后,请勿重启服务器,否则需重新执行下以下操作。
1. 执行以下命令,检查 cloud-init 相关配置是否成功。
		
cloud-init init --local
返回类似如下信息,则说明已成功配置 cloud-init。
		
Cloud-init v. 20.1.0011 running 'init-local' at Fri, 01 Apr 2022 01:26:11 +0000. Up 38.70 seconds.
2. 执行以下命令,删除 cloudinit 的缓存记录。
		
rm -rf /var/lib/cloud
3. 针对 Ubuntu 或 Debian 操作系统,需执行以下命令。
		
rm -rf /etc/network/interfaces.d/50-cloud-init.cfg
4. 针对 Ubuntu 或 Debian 操作系统,需将 /etc/network/interfaces 修改为以下内容:
		
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*

附录

解决无法安装 Python-pip 问题

若在安装 Python-pip 出现无此安装包或无法安装的错误,可对应实际使用的操作系统,参考以下步骤进行解决:
CentOS 6/7系列
Ubuntu 系列
1. 执行以下命令,设置 EPEL 存储库。
				
yum install epel-release -y
2. 执行以下命令,安装 Python-pip。
				
yum install python3-pip -y
相似文档
  • 操作场景: 目前腾讯云云服务器支持导入镜像文件格式为:RAW、VHD、QCOW2、VMDK。其他格式的镜像文件需进行转换才可导入。本文介绍通过 qemu-img 工具将其他格式的镜像文件转换为 VHD 或 RAW 格式。
  • 操作场景: 如果用户的 Linux 镜像无法 安装 cloudinit ,可以使用强制导入镜像功能完成导入。但由于强制导入的镜像没有安装 cloudinit,腾讯云无法初始化配置云服务器。因此,用户需要根据腾讯云提供的配置文件,自行设置脚本来配置云服务器。本文档将指导用户在强制导入镜像的前提下进行配置。
  • 操作场景: 腾讯云支持将已创建的自定义镜像导出至 对象存储 COS 的存储桶内,您可通过该功能导出所需镜像。 前提条件: 已前往 对象存储控制台 开通对象存储服务。 已在自定义镜像所在地域创建存储桶,详情请参见 创建存储桶。
  • 操作场景 本文档指导您制作本地或其他平台的 Linux 服务器系统盘镜像。 操作步骤: 准备工作: 制作系统盘镜像导出时,需要进行以下检查: 说明: 如果您是通过数据盘镜像导出,则可以跳过此操作。
  • 操作场景: 本文以 Windows Server 2012 操作系统为例,指引您如何制作 Windows 镜像。若使用其他版本 Windows Server 操作系统,也可参考本文进行镜像制作。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部