安装Cloud-Init FAQ
Cloud-init能做什么
cloud-init是一款用于初始化云主机的工具,它拥有丰富的模块,能够为云主机提供的能力有:初始化密码、扩容根分区、设置主机名、注入公钥、执行自定义脚本等等,功能十分强大。
安装cloud-init
检查是否已经安装Cloud-Init工具
不同的操作系统,命令不同,以centos为例,执行以下命令查看系统是否已经安装cloud-init:
rpm -qa | grep cloud-init
安装cloud-init
无明确版本要求,建议安装系统源上的版本(若采用旧有编译安装,则建议在大更改时重做为系统源版本):
采用以下命令安装:
yum install cloud-init cloud-utils-growpart -y
配置cloud-init
默认的cloud.cfg配置文件/etc/cloud/cloud.cfg修改如下(不同操作系统会有不同,根据实际情况来定需要设置的值):
- 确定参数值如下:true/True/1, false/False/0 均可
disable_root: false
ssh_pwauth: true
ssh_deletekeys: false
preserve_hostname: false
- 若 cloud-init 版本 >= 21.1(参考 cloud-init -v)
在配置文件中,preserver_hostname: false 另起一行(或保证缩进同级即可),加上
Prefer_fqdn_over_hostname: true
- 若 cloud-init 版本 < 21.1
修改 cloudinit python 包源码 cloudinit/distros/ init .py,将:
def_select_hostname (self,hostname,fqdn) :
# Prefer the short hostname over the long
# fully qualified domain nameif not hostname:
return fqdn
return hostname
替换为:
def_select_hostname (self, hostname, fgdn) :
if fqdn:
return fqdn
return hostname
说明修改配置或代码都是为了优先使用 fqdn 从而避免像 AAA.bbb 这样的 hostname“截断”成 AAA 的问题。确保输入 hostname 命令显示的是 AAA.bbb 非“截断”主机名即可,因系统限制在终端显示的 root@AAA 可忽略。
- 模块包括如下内容(建议参考修改)
cloud_init_modules:
- migrator
- seed random
- bootcmd
- write-files
- growpart
- resizefs
- disk setup
- mounts
- set hostname
- update hostname
- update etc hosts
- ca-certs
- rsyslog
- users-groups
- ssh
- 修改system_info部分,distro内容不做修改
distro内容不做修改
default_user:默认用户名改为root,lock_passwd 改为False
其余部分涉及系统 yum/apt 源的更改,建议遵循“系统其他配置修改”,保留系统默认,去除 cloud-init 配置
system_info下其余内容不做修改
system_info:
# This will affect which distro class gets used
distro: openEuler
# Default user name + that default users groups (if added/used)
default user:
name: root
lock_passwd: False
- 添加 datasource_list 和 datasource 部分,禁用网络托管。
datasource_list: [ ConfigDrive,OpenStack ]
datasource:
ConfigDrive:
dsmode: local
OpenStack:
metadata_urls:["http://169.254.169.254"]
max_wait: 120
timeout: 10
retries: 5
network:
config: disabled
云主机安装Cloud-Init可以做什么?
cloud-init是一款用于初始化云主机的工具,它拥有丰富的模块,能够为云主机提供的能力有:初始化密码、扩容根分区、设置主机名、注入公钥、执行自定义脚本等等,功能十分强大。
安装NetworkManager后,使用Cloud-Init注入密钥或密码失败怎么办?
如果在安装了NetworkManager后使用Cloud-Init注入密钥或密码失败,可能是因为Cloud-Init的版本与NetworkManager不兼容所致,特别是在Debian 9.0及以上版本中可能会出现兼容性问题。以下是处理此问题的方法:
- 卸载当前版本的Cloud-Init: 首先,您需要卸载当前安装的Cloud-Init版本。
- 安装较旧版本的Cloud-Init: 安装Cloud-Init的0.7.6版本或更早的版本。这些较旧的版本可能与NetworkManager兼容性更好。
如何安装Cloudbase-Init工具?
- 根据Windows操作系统的不同位数,您需要在Cloudbase官网下载所需版本的Cloudbase-Init工具安装包。
- 打开Cloudbase-Init工具安装包开始安装。
- 单击“Next”。
- 勾选“I accept the terms in the License Agreement”,单击“Next”。
- 使用Cloudbase-Init默认安装路径进行安装,单击“Next”。
- 在“Configuration options”窗口中,设置用户名为“Administrator”,日志输出串口选择“COM1”,且不勾选“Run Cloudbase-Init service as LocalSystem”。
- 单击“Next”。
- 单击“Install”。
- 在“Files in Use”窗口保留默认勾选“Close the application and attempt to restart them”,单击“OK”。
- 单击“Finish”。
如何配置Cloudbase-Init工具?
- 打开 Windows 实例,登录到管理员账户。
- 打开安装目录。例如:“C:\Program Files (x86)\Cloudbase Solutions\Cloudbase-Init\conf”。
- 复制“cloudbase-init-unattend.conf.sample”文件并重命名为“cloudbase-init.conf”。
- 使用文本编辑器(如记事本)打开 “cloudbase-init.conf”。
- 修改或添加配置项来适配您的需求。以下是一些常见配置项:
- username: 指定默认用户名。
- password: 指定默认密码。
- ssh_user: 指定用于 SSH 访问的用户名,如果需要的话。
- ssh_public_key: 指定用于 SSH 访问的公钥,如果需要的话。
- metadata_services: 指定获取元数据的服务,如 openstack 或 cloudbase-init.
- network_adapter: 指定要进行网络配置的适配器名称。
- ntp_use_vm_logical_clock: 是否使用虚拟机的逻辑时钟作为 NTP 时钟源。
- 保存并关闭配置文件。
- 打开命令提示符,切换到 Cloudbase-Init 的安装目录。
- 运行以下命令启动 Cloudbase-Init:
cloudbase-init.exe --config-file cloudbase-init.conf
Cloudbase-Init 将读取配置文件并执行初始化操作,根据您的配置来自定义 Windows 实例。
- 部分配置可能需要实例重启才能生效。您可以使用 Windows 的重新启动选项来完成这一步骤。
SUSE 11 SP4如何安装growpart?
操作场景
SUSE/openSUSE系列growpart工具是独立的工具包,不是以“cloud-*”开头。请参考以下步骤安装growpart工具。
操作步骤
- 使用以下命令检查是否已安装cloud-init和growpart:
rpm -qa | grep cloud-init
rpm -qa | grep growpart
- 如果已安装,请使用以下命令卸载已安装的cloud-init和growpart:
zypper remove cloud-init growpart
- 清理残留文件。
rm -fr /etc/cloud/*
rm -fr /var/lib/cloud/*
- 执行以下命令安装growpart。
zypper install http://download.opensuse.org/repositories/home:/garloff:/OTC:/cloudinit/SLE_11_SP4/noarch/growpart-0.27-1.1.noarch.rpm
- 执行以下命令安装python-oauth。
zypper install http://download.opensuse.org/repositories/home:/garloff:/OTC:/cloudinit/SLE_11_SP4/x86_64/python-oauth-1.0.1-35.1.x86_64.rpm
- 执行以下命令安装cloud-init。
zypper install http://download.opensuse.org/repositories/home:/garloff:/OTC:/cloudinit/SLE_11_SP4/x86_64/cloud-init-0.7.6-27.23.1.x86_64.rpm
- 使用以下命令检查growpart、python-oauth和cloud-init是否安装成功:
rpm -qa | grep growpart
rpm -qa | grep python-oauth
rpm -qa | grep cloud-init
- 配置服务开机启动:
chkconfig cloud-init-local on
chkconfig cloud-init on
chkconfig cloud-config on
chkconfig cloud-final on