为 RHEL 配置和管理 cloud-init
大约 30 分钟
为 RHEL 配置和管理 cloud-init
来源:官方文档 原始多页入口:为 RHEL 配置和管理 cloud-init 内容规模:约 28,374 字符,30 个章节标题,64 个命令/代码块,18 条提示框
阅读提要
- 副标题:使用 cloud-init 自动初始化和配置 RHEL 实例
- 摘要:通过使用 cloud-init 软件包,您可以在各种云平台中使用一致且可重复的部署有效地创建多个 RHEL 云实例。该内容解释了 cloud-init 是如何工作的、如何使用它来启动云实例,以及红帽支持的哪些 cloud-init 用例。
- 主要章节:使用 cloud-init 自动初始化和配置 RHEL 实例;对红帽文档提供反馈;第 1 章 公有云平台上的 RHEL 简介;第 2 章 cloud-init 简介;第 3 章 红帽对 cloud-init 的支持;第 4 章 使用 NoCloud 数据源创建虚拟机;第 5 章 使用 cloud-init 运行首次启动命令;第 6 章 在虚拟机上重新运行 cloud-init;第 7 章 cloud-init 中身份验证配置概述;第 8 章 使用 cloud-init 管理红帽订阅;第 9 章 使用 cloud-init 配置静态网络配置;第 10 章 使用 cloud-init 配置容器存储
- 推荐阅读顺序:先看“阅读提要”和目录,再按章节查看“关键点/命令/注意”;需要原文细节时点击来源链接。
章节笔记
概览
- 该章节主要为下一级主题的入口。
使用 cloud-init 自动初始化和配置 RHEL 实例
- 要点:摘要
对红帽文档提供反馈
- 要点:我们致力于为您提供高质量的文档,您的反馈将对我们有很大帮助。为帮助我们改进,您可以通过 Red Hat Jira 跟踪系统提交建议或报告错误。
- 要点:流程
- 列表:登录到 Jira 网站。 如果您还没有帐户,请创建一个。
- 列表:单击顶部导航栏中的 Create。
- 列表:在 Summary 字段中输入描述性标题。
- 列表:在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 列表:点窗口底部的 Create。
第 1 章 公有云平台上的 RHEL 简介
- 要点:公有云平台提供计算资源即服务。您可以将 IT 工作负载作为公共云实例运行,而不是维护内部硬件。这包括 Red Hat Enterprise Linux (RHEL)系统。
1.1. 在公有云中使用 RHEL 的好处
- 要点:在公共云平台上运行 Red Hat Enterprise Linux (RHEL)提供了灵活的资源分配、成本效率和软件控制配置,以在不管理物理硬件的情况下优化您的基础架构。
- 要点:RHEL 作为公共云平台上的云实例与内部物理系统或虚拟机(VM)的 RHEL 相比有以下优点:
- 列表:什么是公有云?
- 列表:什么是 Hyperscaler?
- 列表:云计算的类型
1.2. RHEL 的公有云用例
- 要点:在公共云中部署应用程序取决于用例。在评估将您的部署迁移到公共云是否有益时,请考虑 Red Hat Enterprise Linux (RHEL)部署的优点。
- 要点:公共云实例可以根据需求有效地扩展或缩减计算能力。这称为 纵向扩展和纵向缩减 。在以下情况下,您可以在公有云中使用 RHEL:
- 列表:公共云实例可以根据需求有效地扩展或缩减计算能力。这称为 纵向扩展和纵向缩减 。在以下情况下,您可以在公有云中使用 RHEL: 具有峰值工作负载和低常规性能要求的集群受益于灵活的扩展。在资源成本方面,根据您的需求扩展和缩减可能非常高效。 快速配置或扩展集群。这可避免配置本地服务器的大量前期成本。
- 列表:具有峰值工作负载和低常规性能要求的集群受益于灵活的扩展。在资源成本方面,根据您的需求扩展和缩减可能非常高效。
- 列表:快速配置或扩展集群。这可避免配置本地服务器的大量前期成本。
- 列表:本地环境中的更改不会影响云实例。因此,您可以使用它们进行备份和恢复。
- 列表:您正在运行一个无法调整的现有环境。自定义云实例以适合现有部署需求可能经济上并不划算。您当前的主机平台可能更具成本效益。
- 列表:您有预算方面的硬限制。本地数据中心通常提供比公共云更少的灵活性。但是,它们提供了对最大资源成本的更多控制。
1.3. 迁移到公有云时的常见关注
- 要点:将 RHEL 工作负载从本地环境移到公有云平台可能会带来有关涉及的变化的担忧。以下是最常见的问题:
- 要点:在大部分方面,公有云平台上的 RHEL 实例的工作方式与本地主机上的 RHEL 虚拟机相同,如内部服务器。主要例外包括:
- 列表:公有云实例使用特定于提供商的控制台接口,而不是私有编排接口,来管理云资源。
- 列表:某些功能(如嵌套虚拟化)可能无法正常工作。如果特定功能对部署至关重要,请提前检查该功能与您选择的公有云提供商的兼容性。
- 列表:您的公有云供应商负责云 hypervisor 的安全性
- 列表:红帽在您的实例中提供 RHEL 客户机操作系统的安全功能
- 列表:您可以在云基础架构中管理特定的安全设置和实践
1.4. 为公有云部署获取 RHEL
- 要点:要在公有云环境中部署 Red Hat Enterprise Linux (RHEL),您必须选择一个经过认证的云服务供应商(CCSP)并创建 RHEL 云实例。
- 要点:其他资源
- 列表:根据您的要求和市场中的当前产品,选择运行 RHEL 实例的最佳 CCSP 是 Amazon Web Services (AWS)、Google Cloud 和 Microsoft Azure。
- 列表:在云平台上创建 RHEL 云实例。
- 列表:使用红帽更新基础架构(RHUI) 使您的 RHEL 部署保持最新状态。
- 列表:RHUI 文档
- 列表:红帽开放混合云
- 列表:Red Hat Ecosystem Catalog
1.5. 创建 RHEL 云实例的方法
- 要点:您可以创建 Red Hat Enterprise Linux (RHEL)系统镜像,并将其导入到云平台。
- 要点:要构建系统镜像,您可以使用 RHEL 镜像构建程序,或者从云服务供应商市场购买镜像。然后您可以将 RHEL 镜像部署为云实例。
- 列表:要创建系统镜像,您可以使用 RHEL 镜像构建器 或手动构建镜像。
- 列表:此方法使用您现有的 RHEL 订阅(自带订阅(BYOS))。
- 列表:您每年预付订阅费,您可以使用您的红帽客户折扣。
- 列表:红帽提供客户服务。
- 列表:要有效地创建很多镜像,您可以使用 cloud-init 工具。
- 列表:您按小时为使用的服务后付费。这个方法也称为按需支付(PAYG)。
第 2 章 cloud-init 简介
- 要点:cloud-init 工具在第一次引导过程中自动初始化和配置虚拟机(VM)。您可以配置 cloud-init,设置主机名、配置网络接口、安装软件包、运行脚本和更改默认虚拟机操作。
2.1. cloud-init 配置的概述
- 要点:cloud-init 实用程序为实例配置 YAML 配置文件中定义的任务。
- 要点:当实例引导时,cloud-init 从 YAML 文件启动并运行指令。然后,cloud-init 根据配置,在当前引导期间或下一次引导序列中完成任务。
- 列表:cloud.cfg 文件包含各种系统配置的指令,如用户访问、身份验证和系统信息。 此文件还包括 cloud-init 的默认和可选模块。默认模块组如下: cloud_init_modules cloud_config_modules cloud_final_modules
- 列表:cloud_init_modules
- 列表:cloud_config_modules
- 列表:cloud_final_modules
- 列表:您可以在 cloud.cfg.d 目录中包括 cloud-init 的额外的指令。
- 列表:在向 cloud.cfg.d 目录中添加指令时,将它们添加到名为 *.cfg 的自定义文件中,并且在文件的顶部包含 #cloud-config。
2.2. cloud-init 的数据源类型
- 要点:DataSource 是 cloud-init 实用程序的配置数据源。cloud-init 会自动标识现有的数据源,也可以配置自定义数据源指令。
- 要点:对于数据源,有三种类型的配置数据:用户数据、元数据和供应商数据。
- 列表:用户数据 包括 cloud.cfg 文件和 cloud.cfg.d 目录中指定的指令。例如,用户数据可以包含要运行的文件、要安装的软件包和 shell 脚本。
- 列表:元数据 提供由认证云服务供应商(token)创建的配置驱动器。元数据包括与特定数据源关联的数据。例如,服务器名称和实例 ID。如果您使用特定的云平台,CCSP 决定您的实例可以在哪里找到用户数据和元数据。在向 HTTP 服务添加用户数据和元数据后,cloud-init 会消耗来自 HTTP 服务的用户数据和元数据。
- 列表:供应商数据 (可选)由 CCSP 提供,包括可以自定义镜像以更好地适合镜像运行环境的信息。在读取任何元数据并初始化系统后,cloud-init 对可选的厂商数据和用户数据进行操作。默认情况下,厂商数据会在第一次引导时运行。您可以禁用厂商数据执行。
- 列表:如何识别正在使用的数据源
- 列表:实例元数据
- 列表:厂商数据
2.3. cloud-init 的引导阶段
- 要点:在系统引导过程中,cloud-init 实用程序分五个阶段运行。这些阶段指定了 cloud-init 在哪个阶段运行,以及找到其数据源的位置,以及其他任务。每个阶段也属于一个模块执行 阶段,该阶段控制要运行的模块。
- 要点:检测阶段 :通过使用 systemd 服务,此阶段决定是否在引导时运行 cloud-init 工具。ds-identify 工具检测在没有有效平台的情况下是否运行 cloud-init。
- 列表:检测阶段 :通过使用 systemd 服务,此阶段决定是否在引导时运行 cloud-init 工具。ds-identify 工具检测在没有有效平台的情况下是否运行 cloud-init。 此阶段属于 Initialization 阶段,不运行任何模块。相反,它会识别 cloud-init 配置的数据源。
- 列表:本地阶段:cloud-init 搜索本地数据源并应用网络配置,包括基于 DHCP 的回退机制。 此阶段属于 Initialization 阶段,不运行任何模块。
- 列表:网络阶段:cloud-init 通过运行 /etc/cloud/cloud.cfg 文件中 cloud_init_modules 下列出的模块来处理用户数据。您可以在 cloud_init_modules 部分种添加、删除、启用或禁用模块。 此阶段属于 Networking 模块执行阶段。
- 列表:配置 阶段:cloud-init 运行 /etc/cloud/cloud.cfg 文件中 cloud_config_modules 部分下列出的模块。您可以在 cloud_config_modules 部分种添加、删除、启用或禁用模块。 此阶段属于 Configuration 模块执行阶段。
- 列表:最后阶段 :cloud-init 运行 /etc/cloud/cloud.cfg 文件的 cloud_final_modules 部分中包含的模块和配置。它可以包含特定软件包的安装,并触发配置管理插件和用户定义的脚本。您可以在 cloud_final_modules 部分种添加、删除、启用或禁用模块。 这个阶段等同于 Finalization 模块执行阶段。
- 列表:PER_INSTANCE 表示该模块在实例第一次引导时运行。例如,如果您克隆实例或从保存的镜像创建新实例,则根据实例运行阶段指定的模块会再次运行。
- 注意:注意 用于唯一标识实例的实例 ID。当实例 ID 发生变化时,cloud-init 将实例视为新实例。
- 注意:注意 您可在配置模块时或使用命令行覆盖模块频率的设置。
2.4. 对 cloud-init 很重要的文件和目录
- 要点:您可以使用 cloud-init 中重要的文件和目录。使用这些文件和文件夹,配置 cloud-init 实用程序来检查日志文件,查找模板,并在 cloud-init 完成执行后查看配置详情。
- 要点:红帽支持包含特定 cloud-init 模块的 cloud-init,以及列出的默认目录和文件。根据您的要求和数据源,可能会有其它对您的配置很重要的文件和目录。
- 列表:要在其中一个 cloud-init 阶段执行操作,您必须单独配置每个模块,并在 cloud.cfg 文件中列出它们。模块按照 cloud.cfg 中给出的顺序运行。
- 列表:您不应更改此顺序。但是,您可以在 cloud.cfg 中添加更多红帽支持的模块。
- 列表:cloud.cfg 指令可以被用户数据覆盖。手动运行 cloud-init 时,您可以使用命令行选项覆盖 cloud.cfg。
- 列表:每个模块都有其自身的配置选项,您可以在其中添加特定信息。
- 列表:为确保配置的最佳功能,请使用下带有下划线(_)而不是横线(-)的模块名称。
- 列表:Red Hat Enterprise Linux(RHEL)文件的默认内容如下: users: - default disable_root: true resize_rootfs_tmp: /dev ssh_pwauth: false mount_default_fields: [~, ~, 'auto', 'defaults,nofail,x-systemd.requires=cloud-init.service', '0', '2'] ssh_deletekeys: true ssh_genkeytypes: ['rsa', 'ecdsa', 'ed25519'] syslog_fix_perms: ~ disable_v…
- 命令/配置摘录:
users: - default disable_root: true resize_rootfs_tmp: /dev ssh_pwauth: false mount_default_fields: [~, ~, 'auto', 'defaults,nofail,x-systemd.requires=cloud-init.service', '0', '2'] ssh_deletekeys: true ssh_genkeytypes: ['rsa', 'ecdsa', 'ed25519'] syslog_fix_perms: ~ disable_vmware_customization: false 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 cloud_config_modules: - ssh_import_id - locale - set_passwords - rh_subscription - spacewalk - yum_add_repo - ntp …
## This yaml formatted config file handles setting ## logger information. The values that are necessary to be set ## are seen at the bottom. The top '_log' are only used to remove ## redundancy in a syslog and fallback-to-file case. ## The 'log_cfgs' entry defines a list of logger configs ## Each entry in the list is tried, and the first one that ## works is used. If a log_cfg list entry is an array, it will ## be joined with '\n'. _log: - &log_base | [loggers] keys=root,cloudinit [handlers] keys=consoleHandler,cloudLogHandler [formatters] keys=simpleFormatter,arg0Formatter [logger_root] level=DEBUG handlers=consoleHandler,cloudLog…- 注意:注意 虽然您可以通过在 cloud.cfg 文件中添加用户数据指令来配置模块,但基于最佳实践,最好不要修改 cloud.cfg。将您的指令添加到 /etc/cloud/cloud.cfg.d 目录中。在这个目录中添加指令可方便将来的修改和升级。
- 表格样本(共 8 行):
- 目录或文件 | 描述
- /etc/cloud/cloud.cfg | cloud.cfg 文件包含基本的 cloud-init 配置,并显示每个模块运行的阶段。
- /etc/cloud/cloud.cfg.d | cloud.cfg.d 目录,您可以在其中为 cloud-init 添加附加指令。
- /var/lib/cloud | 当 cloud-init 运行时,它会在 /var/lib/cloud 下创建一个目录布局。布局包括特定于您的实例配置的目录和文件。
第 3 章 红帽对 cloud-init 的支持
- 要点:红帽支持不同产品中的 cloud-init 实用程序、cloud-init 模块、默认目录和文件。
3.1. 使用 cloud-init 的红帽产品
- 要点:您可以将 cloud-init 与 Red Hat OpenStack Platform、Red Hat Satellite 和 Red Hat OpenShift 搭配使用,以配置和初始化虚拟机。
- 要点:其他资源
- 列表:Red Hat OpenStack Platform :您可以使用 cloud-init 来帮助配置用于 OpenStack 的镜像。
- 列表:Red Hat Satellite:您可以在 Red Hat Satellite 中使用 cloud-init。
- 列表:Red Hat OpenShift:您可以在为 OpenShift 创建虚拟机时使用 cloud-init。
- 列表:实例和镜像指南
- 列表:准备镜像以使用 cloud-init 模板
- 列表:创建虚拟机
3.2. 支持的 cloud-init 模块
- 要点:红帽支持大多数 cloud-init 模块。每个模块可以包含多个配置选项,并具有决定何时运行的默认模块频率。下表列出了受支持的 cloud-init 模块。
- 要点:其他资源
- 列表:cloud-init 模块
- 表格样本(共 35 行):
- cloud-init 模块 | 描述 | 默认模块频率
- ansible | 运行 Ansible playbook | per instance
- bootcmd | 在引导过程的早期阶段运行命令 | per always
- ca_certs | 添加 CA 证书 | per instance
3.3. 红帽不支持 cloud-init 模块
- 要点:红帽不支持某些 cloud-init 模块,也非常不鼓励在 cloud-init 配置中使用它们。
- 要点:其他资源
- 列表:模块
- 列表:apt_configure
- 列表:apt_pipeline
- 列表:byobu
- 列表:chef
- 列表:emit_upstart
第 4 章 使用 NoCloud 数据源创建虚拟机
- 要点:要使用 NoCloud 数据源部署虚拟机(VM),请创建 meta-data 用于实例详情,并创建 user-data 用于用户访问详情。将其添加到 Red Hat Enterprise Linux (RHEL) ISO 中,并将其附加到 KVM 客户机虚拟机中。在第一次引导过程中,cloud-init 使用这些文件来配置虚拟机。
- 要点:先决条件
- 列表:您已创建了一个 红帽帐户。
- 列表:您已下载了一个 KVM 客户机镜像,它预安装了 cloud-init,且设置了 cloud-init 在虚拟机上自动运行。
- 列表:您在 ~/.ssh/id_rsa.pub 文件中有 SSH 公钥。
- 列表:创建 cloudinitiso 目录,并将其设置为您的工作目录: $ mkdir cloudinitiso $ cd cloudinitiso
- 列表:编辑 meta-data 文件: $ vi meta-data instance-id: citest local-hostname: citest-1
- 列表:编辑 user-data 文件: $ vi user-data #cloud-config password: cilogon chpasswd: {expire: False} ssh_pwauth: True ssh_authorized_keys: - <ssh-rsa AAAxxxhHQ== sample@example.com>
- 命令/配置摘录:
$ mkdir cloudinitiso
$ cd cloudinitiso- 注意:注意 对于 OpenStack ,创建和管理实例包含使用 cloud-init 配置实例的信息。有关特定流程,请参阅创建自定义实例。
第 5 章 使用 cloud-init 运行首次启动命令
- 要点:在虚拟机(VM)上,要在初始化过程早期运行命令,并在每次引导时默认运行,请使用 bootcmd 部分。要在进程末尾附近运行命令,且仅在第一次引导和初始化期间运行命令,请使用 runcmd 部分。
- 要点:先决条件
- 列表:根据数据源的要求,编辑 user-data 文件或在 cloud.cfg.d 目录中添加以下指令: 注意 所有用户指令都包括文件顶部的 #cloud-config,以便 cloud-init 将文件识别为包含用户指令。 当您在 cloud.cfg.d 目录中包含指令时,将该文件命名为 *.cfg,且始终在文件的顶部包含 #cloud-config。
- 列表:为 bootcmd 和 runcmd 添加部分;包含您希望 cloud-init 运行的命令: #cloud-config users: - default - name: user2 gecos: User N. Ame groups: users chpasswd: list: | root:password fedora:myfedpassword user2:mypassword2 expire: False bootcmd: - echo New MOTD >> /etc/motd runcmd: - echo New MOTD2 >> /etc/motd
- 列表:通过检查 MOTD 文件来验证 bootcmd 和 runcmd 部分是否都运行: # cat /etc/motd | tail -n2 New MOTD New MOTD2 如果输出显示 New MOTD 和 New MOTD2,则命令在第一次引导过程中成功运行。
- 列表:可选:通过重启虚拟机验证 bootcmd 是否在每次引导时运行: # sudo reboot 虚拟机重启后,再次运行验证命令。bootcmd 配置段在每次引导时添加了新的 MOTD 行,因此您可以通过检查文件中显示的次数来验证引导计数。
- 列表:bootcmd
- 列表:runcmd
- 命令/配置摘录:
#cloud-config users: - default - name: user2 gecos: User N. Ame groups: users chpasswd: list: | root:password fedora:myfedpassword user2:mypassword2 expire: False bootcmd: - echo New MOTD >> /etc/motd runcmd: - echo New MOTD2 >> /etc/motd
# cat /etc/motd | tail -n2- 注意:注意 所有用户指令都包括文件顶部的 #cloud-config,以便 cloud-init 将文件识别为包含用户指令。 当您在 cloud.cfg.d 目录中包含指令时,将该文件命名为 *.cfg,且始终在文件的顶部包含 #cloud-config。
第 6 章 在虚拟机上重新运行 cloud-init
- 要点:当您需要对使用 cloud-init 服务配置的虚拟机(VM)进行额外配置时,您可以重新运行 cloud-init 进程。
- 注意:警告 如果您重新运行 cloud-init 进程,可能会丢失数据并覆盖凭证,如 SSH 密钥和密码。避免在生产环境中重新运行 cloud-init。
6.1. 在 cloud-init 运行后修改从 KVM 客户机镜像创建的虚拟机
- 要点:要在初始启动后更改虚拟机(VM)设置,请修改 cloud-init 配置并重新运行 cloud-init。
- 要点:先决条件
- 列表:您已创建了一个 红帽帐户。
- 列表:您已选择以下选项之一: 您已从红帽客户门户网站下载了一个 Red Hat ISO 镜像,并创建了 KVM 客户机镜像,该镜像预安装了 cloud-init,并设置 cloud-init 在虚拟机上自动运行。 您已通过从红帽客户门户网站下载 Red Hat ISO 镜像并在其上安装 cloud-init 来创建自定义镜像。 您已创建了一个自定义的 Red Hat Enterprise Linux (RHEL)镜像,该镜像可使用 RHEL 镜像构建器 为公共云平台做好准备。这些镜像格式预装了 cloud-init :Amazon Machine Image (AMI)、Virtual Hard Drive (VHD) 和 QEMU c…
- 列表:您已从红帽客户门户网站下载了一个 Red Hat ISO 镜像,并创建了 KVM 客户机镜像,该镜像预安装了 cloud-init,并设置 cloud-init 在虚拟机上自动运行。
- 列表:您已通过从红帽客户门户网站下载 Red Hat ISO 镜像并在其上安装 cloud-init 来创建自定义镜像。
- 列表:您已创建了一个自定义的 Red Hat Enterprise Linux (RHEL)镜像,该镜像可使用 RHEL 镜像构建器 为公共云平台做好准备。这些镜像格式预装了 cloud-init :Amazon Machine Image (AMI)、Virtual Hard Drive (VHD) 和 QEMU copy-on-write (QCOW2)。
- 列表:您已在重新运行 cloud-init 前清理了虚拟机数据目录,以应用新的配置。
- 命令/配置摘录:
# vi /etc/cloud/cloud.cfg
# cloud-init clean- 注意:注意 您可以将清理的镜像保存为模板镜像,并将该镜像用于多个虚拟机。新虚拟机将使用更新的配置来运行 cloud-init。
- 注意:注意 您还可以通过检查 /var/log/cloud-init.log 文件来验证 cloud-init 配置。
6.2. 在 cloud-init 运行后为特定的数据源修改虚拟机
- 要点:您可以在重新运行 cloud-init 前修改 cloud-init 配置。具体步骤根据您的数据源(如 Red Hat OpenStack Platform 或其他云平台)而有所不同。
- 要点:先决条件
- 列表:您已为 Red Hat OpenStack Platform 创建了一个实例。有关为 Red Hat OpenStack Platform 创建实例的详情,请参考 创建实例。在本例中,虚拟机(VM)包含 cloud-init,它在虚拟机引导时运行。
- 列表:您已添加或更改指令。例如,修改存储在 OpenStack HTTP 服务器上的 user-data.file 文件。
- 列表:为 Red Hat OpenStack Platform 创建并启动实例。有关为 Red Hat OpenStack Platform 创建实例的详情,请参考 创建实例。在本例中,虚拟机(VM)包含 cloud-init,它在虚拟机引导时运行。
- 列表:添加或者更改指令。例如,修改存储在 OpenStack HTTP 服务器上的 user-data.file 文件。
- 列表:清理虚拟机: # rm -rf /etc/resolv.conf /run/cloud-init # userdel -rf cloud-user # hostnamectl set-hostname localhost.localdomain # rm /etc/NetworkManager/conf.d/99-cloud-init.conf 注意 您可以将清理的镜像保存为模板镜像,并将该镜像用于多个虚拟机。新虚拟机使用您更新的 cloud-init 配置运行 cloud-init。
- 列表:重新运行 cloud-init 或重启虚拟机,以实现您所做的配置更改。
- 命令/配置摘录:
# rm -rf /etc/resolv.conf /run/cloud-init
# userdel -rf cloud-user- 注意:注意 您可以将清理的镜像保存为模板镜像,并将该镜像用于多个虚拟机。新虚拟机使用您更新的 cloud-init 配置运行 cloud-init。
- 注意:注意 您还可以通过检查 /var/log/cloud-init.log 文件来验证 cloud-init 配置。
第 7 章 cloud-init 中身份验证配置概述
- 要点:要管理用户,请配置访问权限和 sudo 权限,设置或重置 root 密码,并且要求在第一次登录时更改虚拟机(VM)的密码,您可以使用 cloud-init 工具
- 要点:流程
- 列表:根据数据源的要求,编辑 user-data 文件或在 cloud.cfg.d 目录中添加以下指令: 注意 所有用户指令都包括文件顶部的 #cloud-config,以便 cloud-init 将文件识别为包含用户指令。当您在 cloud.cfg.d 目录中包含指令时,将该文件命名为 *.cfg,且始终在文件的顶部包含 #cloud-config。
- 列表:要添加用户和用户选项,请按照以下步骤操作: 默认情况下,如果没有 selinux-user 值,用户会被标记为 unconfined_u。 注意 这个示例将用户 user2 放在两个组中:users 和 wheel。 添加或修改 users 部分以添加用户。例如: #cloud-config users: - default - name: user2 gecos: User N. Ame selinux-user: staff_u groups: users,wheel ssh_pwauth: True ssh_authorized_keys: - ssh-rsa AA..vz user@domain.com c…
- 列表:默认情况下,如果没有 selinux-user 值,用户会被标记为 unconfined_u。 注意 这个示例将用户 user2 放在两个组中:users 和 wheel。
- 列表:添加或修改 users 部分以添加用户。例如: #cloud-config users: - default - name: user2 gecos: User N. Ame selinux-user: staff_u groups: users,wheel ssh_pwauth: True ssh_authorized_keys: - ssh-rsa AA..vz user@domain.com chpasswd: list: | root:password cloud-user:mypassword user2:mypassword2 expire: False
- 列表:如果您希望 cloud-user 与您指定的其他用户一起创建的默认用户,请确保将 default 添加为这个部分中的第一个条目。如果这不是第一个条目,则不会创建 cloud-user。
- 列表:要将 sudo 用户添加到用户列表, 请按照以下步骤操作: 添加 sudo 条目并指定用户访问权限。例如,sudo: ALL=(ALL)NOPASSWD:ALL 允许用户进行不受限制的用户访问。 添加一个 groups 条目,并指定包含用户的组: #cloud-config users: - default - name: user2 gecos: User D. Two sudo: ["ALL=(ALL) NOPASSWD:ALL"] groups: wheel,adm,systemd-journal ssh_pwauth: True ssh_authorized_keys: - ssh-rsa AA...vz …
- 命令/配置摘录:
#cloud-config users: - default - name: user2 gecos: User N. Ame selinux-user: staff_u groups: users,wheel ssh_pwauth: True ssh_authorized_keys: - ssh-rsa AA..vz user@domain.com chpasswd: list: | root:password cloud-user:mypassword user2:mypassword2 expire: False
#cloud-config users: - default - name: user2 gecos: User D. Two sudo: ["ALL=(ALL) NOPASSWD:ALL"] groups: wheel,adm,systemd-journal ssh_pwauth: True ssh_authorized_keys: - ssh-rsa AA...vz user@domain.com chpasswd: list: | root:password cloud-user:mypassword user2:mypassword2 expire: False- 注意:注意 所有用户指令都包括文件顶部的 #cloud-config,以便 cloud-init 将文件识别为包含用户指令。当您在 cloud.cfg.d 目录中包含指令时,将该文件命名为 *.cfg,且始终在文件的顶部包含 #cloud-config。
- 注意:注意 这个示例将用户 user2 放在两个组中:users 和 wheel。
第 8 章 使用 cloud-init 管理红帽订阅
- 要点:要将您的系统注册到红帽订阅管理,您可以使用 cloud-init 中的 rh_subscription 指令。使用用户名和密码、激活码和组织或自定义服务器主机名配置指令。
- 要点:在 rh_subscription 下,添加您的用户名和密码。
- 命令/配置摘录:
rh_subscription: username: <example@redhat.com> password: <example_password>
rh_subscription: activation-key: <example_key> org: <example_id>第 9 章 使用 cloud-init 配置静态网络配置
- 要点:要使用 cloud-init 配置网络配置,请在元数据中添加 network-interfaces 部分。有了这个设置,您可以配置静态 IP 地址、网关和其他网络设置。
- 要点:先决条件
- 列表:您有 NetworkManager 提供的默认网络服务,该服务在 Red Hat Enterprise Linux (RHEL)上动态管理网络设备和连接。
- 列表:您已确认数据源是否提供了网络配置。如需更多信息,请查阅相关的 cloud-init 文档部分。
- 列表:您还未为 cloud-init 指定自定义网络配置或已禁用网络配置,允许 cloud-init 检测附加的设备并自动生成基于动态主机配置协议(DHCP)的配置(如果活跃连接存在)。
- 列表:根据数据源的要求,编辑 user-data 文件或在 cloud.cfg.d 目录中添加以下指令: 注意 所有用户指令都包括文件顶部的 #cloud-config,以便 cloud-init 将文件识别为包含用户指令。当您在 cloud.cfg.d 目录中包含指令时,将该文件命名为 *.cfg,且始终在文件的顶部包含 #cloud-config。
- 列表:在 user-data 文件中添加 network-interfaces 部分: network: version: 1 config: - type: physical name: eth0 subnets: - type: static address: 192.0.2.1/24 gateway: 192.0.2.254
- 列表:可选:您还可以禁用网络配置: network: config: disabled
- 命令/配置摘录:
network: version: 1 config: - type: physical name: eth0 subnets: - type: static address: 192.0.2.1/24 gateway: 192.0.2.254
network: config: disabled- 注意:注意 所有用户指令都包括文件顶部的 #cloud-config,以便 cloud-init 将文件识别为包含用户指令。当您在 cloud.cfg.d 目录中包含指令时,将该文件命名为 *.cfg,且始终在文件的顶部包含 #cloud-config。
第 10 章 使用 cloud-init 配置容器存储
- 要点:您可以通过在 cloud-init 的 write_files 模块中引用 container-storage-setup 工具来配置容器存储。
- 要点:先决条件
- 列表:根据数据源的要求,编辑 user-data 文件或在 cloud.cfg.d 目录中添加以下指令: 注意 所有用户指令都包括文件顶部的 #cloud-config,以便 cloud-init 将文件识别为包含用户指令。当您在 cloud.cfg.d 目录中包含指令时,将该文件命名为 *.cfg,且始终在文件的顶部包含 #cloud-config。
- 列表:添加或修改 write_files 模块,以使其包含 container-storage-setup 工具的路径: write_files: - path: /etc/sysconfig/docker-storage-setup permissions: 0644 owner: root content: | ROOT_SIZE=6G 注意 这个示例将 root 逻辑卷的大小设置为 6 GB,而不是默认的 3 GB。
- 列表:验证容器存储是否已正确配置: # docker info | grep "Docker Root Dir" Docker Root Dir: /var/lib/docker 如果输出显示容器存储配置正确。
- 命令/配置摘录:
write_files: - path: /etc/sysconfig/docker-storage-setup permissions: 0644 owner: root content: | ROOT_SIZE=6G
# docker info | grep "Docker Root Dir"- 注意:注意 所有用户指令都包括文件顶部的 #cloud-config,以便 cloud-init 将文件识别为包含用户指令。当您在 cloud.cfg.d 目录中包含指令时,将该文件命名为 *.cfg,且始终在文件的顶部包含 #cloud-config。
- 注意:注意 这个示例将 root 逻辑卷的大小设置为 6 GB,而不是默认的 3 GB。
第 11 章 在 cloud-init 中使用 shell 脚本
- 要点:您可以将列表值或字符串值添加到 cloud-init 中的 bootcmd 或 runcmd。您还可以在 userdata 中提供 shell 脚本,以便在虚拟机初始化过程中运行自定义命令。
- 要点:其它资源
- 列表:如果您使用字符串值,则整个字符串作为 shell 脚本运行。
- 列表:如果您使用 bootcmd 或 runcmd 的列表值,则每个列表项依次使用 execve 运行。
- 列表:如果要使用 cloud-init 运行 shell 脚本,请提供 shell 脚本(使用 shebang #!完成)。使用此选项而不是通过 .yaml 文件提供 cloud-init。
- 列表:在第一次引导时运行命令
第 12 章 使用 cloud-init 更改系统区域设置
- 要点:您可以通过在配置中添加 locale 指令,使用 cloud-init 中的 locale 模块来配置系统区域设置。
- 要点:先决条件
- 列表:根据数据源的要求,编辑 meta-data 文件。您还可以在 cloud.cfg 文件或 cloud.cfg.d 目录中添加以下指令。
- 列表:添加 locale 指令,指定位置。以下示例使用 Unicode 字符编码(UTF-8)将 locale 设置为 ja_JP (Japan): # vi /etc/cloud/cloud.cfg #cloud-config locale: ja_JP.UTF-8
- 列表:验证 locale 是否正确: # locale 输出应显示 locale 已设置为 ja_JP.UTF-8。
- 列表:设置系统区域设置
- 命令/配置摘录:
# vi /etc/cloud/cloud.cfg
#cloud-config locale: ja_JP.UTF-8第 13 章 防止 cloud-init 更新配置文件
- 要点:从备份镜像创建或恢复实例时,实例 ID 会改变。cloud-init 工具使用更新的实例 ID 更新配置文件。但是,在从备份创建或恢复时,您可以确保 cloud-init 不会更新某些配置文件。
- 要点:流程
- 列表:在 /etc/cloud/cloud.cfg 文件中注释或删除恢复实例时您不希望 cloud-init 更新的配置: # vi /etc/cloud/cloud.cfg cloud_init_modules: - disk_setup - migrator - bootcmd - write-files - growpart - resizefs - set_hostname - update_hostname - update_etc_hosts - rsyslog - users-groups # - ssh 在本例中,为了避免更新 SSH 密钥文件,请从 cloud_init_modules 部分删除…
- 列表:要检查 cloud-init 更新的配置文件,请检查 /var/log/cloud/cloud-init.log 文件。在实例启动的过程中,更新的文件以 Writing to 开头的消息被记录: 2019-09-03 00:16:07,XXX - util.py[DEBUG]: Writing to /root/.ssh/authorized_keys - wb: [XXX] 554 bytes 2019-09-03 00:16:08,XXX - util.py[DEBUG]: Writing to /etc/ssh/sshd_config - wb: [XXX] 3905 bytes
- 列表:cloud-init 模块
- 命令/配置摘录:
# vi /etc/cloud/cloud.cfg
cloud_init_modules: - disk_setup - migrator - bootcmd - write-files - growpart - resizefs - set_hostname - update_hostname - update_etc_hosts - rsyslog - users-groups # - ssh第 14 章 cloud-init 故障排除
- 要点:运行 cloud-init 工具后,您可以通过检查配置和日志文件来对 cloud-init 进行故障排除。然后,从命令行重新运行 cloud-init 以应用修复。
- 要点:有关常规配置问题,请查看 cloud-init 配置文件:
- 列表:有关常规配置问题,请查看 cloud-init 配置文件: 检查 /etc/cloud/cloud.cfg 配置文件。检查 cloud_init_modules、cloud_config_modules 和 cloud_final_modules 下包含哪些模块。 检查 /etc/cloud/cloud.cfg.d 目录中的指令(*.cfg 文件)。
- 列表:检查 /etc/cloud/cloud.cfg 配置文件。检查 cloud_init_modules、cloud_config_modules 和 cloud_final_modules 下包含哪些模块。
- 列表:检查 /etc/cloud/cloud.cfg.d 目录中的指令(*.cfg 文件)。
- 列表:如果 root 分区没有自动扩展,请检查 growpart 工具的日志消息。 注意 growpart 不支持逻辑卷管理器(LVM)。如果您的 root 分区基于 LVM,在第一次引导时不会自动扩展 root 分区。 查看 /var/log/cloud-init.log 和 /var/log/cloud-init-output.log 文件,以了解任何特定问题的详情。
- 列表:查看 /var/log/cloud-init.log 和 /var/log/cloud-init-output.log 文件,以了解任何特定问题的详情。
- 列表:如果文件系统没有扩展,请检查 resizefs 的日志消息 # grep resizefs /var/log/cloud-init.log
- 命令/配置摘录:
# grep resizefs /var/log/cloud-init.log
# /usr/bin/cloud-init -d init- 注意:注意 growpart 不支持逻辑卷管理器(LVM)。如果您的 root 分区基于 LVM,在第一次引导时不会自动扩展 root 分区。
- 注意:重要 以 root 用户身份重新运行 cloud-init 命令。
完整目录
- 使用 cloud-init 自动初始化和配置 RHEL 实例
- 对红帽文档提供反馈
- 第 1 章 公有云平台上的 RHEL 简介
- 1.1. 在公有云中使用 RHEL 的好处
- 1.2. RHEL 的公有云用例
- 1.3. 迁移到公有云时的常见关注
- 1.4. 为公有云部署获取 RHEL
- 1.5. 创建 RHEL 云实例的方法
- 第 2 章 cloud-init 简介
- 2.1. cloud-init 配置的概述
- 2.2. cloud-init 的数据源类型
- 2.3. cloud-init 的引导阶段
- 2.4. 对 cloud-init 很重要的文件和目录
- 第 3 章 红帽对 cloud-init 的支持
- 3.1. 使用 cloud-init 的红帽产品
- 3.2. 支持的 cloud-init 模块
- 3.3. 红帽不支持 cloud-init 模块
- 第 4 章 使用 NoCloud 数据源创建虚拟机
- 第 5 章 使用 cloud-init 运行首次启动命令
- 第 6 章 在虚拟机上重新运行 cloud-init
- 6.1. 在 cloud-init 运行后修改从 KVM 客户机镜像创建的虚拟机
- 6.2. 在 cloud-init 运行后为特定的数据源修改虚拟机
- 第 7 章 cloud-init 中身份验证配置概述
- 第 8 章 使用 cloud-init 管理红帽订阅
- 第 9 章 使用 cloud-init 配置静态网络配置
- 第 10 章 使用 cloud-init 配置容器存储
- 第 11 章 在 cloud-init 中使用 shell 脚本
- 第 12 章 使用 cloud-init 更改系统区域设置
- 第 13 章 防止 cloud-init 更新配置文件
- 第 14 章 cloud-init 故障排除
