Cloud-init 是一种开源软件或服务,允许用户创建自定义的云服务器和虚拟机。它由 Canonical 开发,可让您灵活地自动配置云实例。目前,它支持所有主要的 Linux 发行版,包括 Ubuntu,Debian,FreeBSD,CentOS,Fedora,Gentoo,OpenSUSE 等。所有主要的云供应商都使用它在启动时修改通用操作系统配置。
您可以使用所需的配置和软件来设置云实例,以便与 cloud-init 一起使用。云初始化服务在系统引导过程中启动,并使用云供应商提供的元数据。
Cloud-init 提供了通过用户数据执行一些常见任务的方法,例如:
- 设置主机名
- 设置装入点
- 更新系统软件包和内核
- 添加用户和组。
- 在系统引导时运行特定命令
- 安装和配置软件
- 添加软件存储库
- 重置实例并重新运行 cloud-init 而无需完全重新安装
- 用您的用户数据覆盖 Vultr 的供应商数据。
这篇文章将解释如何使用云初始化用户数据升级 Vultr Linux 实例中的 Linux 内核。
一、创建云初始化配置文件
本节说明如何创建云初始化配置文件以升级 CentOS 7 操作系统中的 Linux 内核。
在云配置用户数据文件中编写以下代码:
#cloud-config
runcmd:
- [ yum, "-y", --enablerepo=elrepo-kernel, install, "kernel-ml" ]
- grub2-mkconfig -o /boot/grub2/grub.cfg
- grub2-set-default 0
power_state:
delay: now
mode: reboot
message: "Reboot after upgrading Kernel"
condition: true
上述配置文件中每个指令的简要说明如下所示:
runcmd:
您可以指定要在首次引导期间运行的命令列表。power_state:
您可以在执行指令中指定的所有命令后重新启动或关闭 Linux 实例。runcmd:
delay:
您可以指定以分钟 (+m) 为单位的超时。mode:
您可以将操作指定为、或实例。poweroff
halt
reboot
message:
该过程完成后显示消息。condition:
以 true(始终满足)或 false(从不满足)指定条件。
当您预置新的 Vultr 实例时,cloud-init 会处理上述云配置文件,并按顺序执行以下步骤:
- 安装最新的主线稳定内核。
- 从目录中收集信息以查找新安装的 Linux 内核并生成新的配置文件。
/boot
grub.cfg
- 将默认内核设置为最新的主线内核,以便在重新启动后引导系统。
- 升级 Linux 内核后重新启动系统。
二、使用云初始化用户数据升级 Vultr 实例上的内核
此时,cloud-init 配置文件已准备好升级 Linux 内核。你现在可以使用此配置文件来配置新的 CentOS 7 Vultr 实例并升级 Linux 内核。
请按照以下步骤配置 CentOS 7 Vultr 实例并升级 Linux 内核:
- 登录 Vultr 客户门户,如下所示:
- 单击部署服务器按钮。
- 在“选择服务器”部分中选择首选服务器。
- 在“服务器位置”部分中选择您附近的位置。
- 在“服务器映像”部分选择一个CentOS映像和版本 7。
- 在“服务器大小”部分中选择服务器规格。
- 选中其他功能部分中的启用云初始化用户数据框,并以纯文本形式添加云初始化用户数据。
- 在“服务器主机名和标签”部分中定义服务器主机名和标签。
- 单击立即部署以开始预置实例。
上述过程需要一些时间来预置实例。配置 CentOS 7 实例后,通过 SSH 登录到 CentOS 7 实例,然后执行以下命令以验证新安装的内核。
# uname -r
您应该在以下输出中看到新的 Linux 主线内核:
6.0.8-1.el7.elrepo.x86_64
三、排查云初始化问题
有时,云初始化并没有做你想要的事情。在这种情况下,您可以检查云初始化日志以排查问题。
云初始化主日志文件位于以下目录中:
/var/log/cloud-init.log
/var/log/cloud-init-output.log
您还可以在目录中找到更多日志。此外,您可以使用以下命令解析云初始化日志:/run/cloud-init
# cloud-init analyze -h
您可以使用以下任何子命令来解析日志:
usage: /usr/local/bin/cloud-init analyze [-h] {blame,show,dump,boot} ...
options:
-h, --help show this help message and exit
Subcommands:
{blame,show,dump,boot}
blame Print list of executed stages ordered by time to init
show Print list of in-order events during execution
dump Dump cloud-init events in JSON format
boot Print list of boot times for kernel and cloud-init
四、结论
在这篇文章中,您学习了如何使用 cloud-init 用户数据来升级 Vultr 云实例上的 Linux 内核。Cloud-init 是一个强大的工具,经常使用新模块和供应商数据源进行更新。有关更多信息,请访问云初始化官方文档。