🎹 个人简介:大家好,我是 金鱼哥,优快云运维领域新星创作者,华为云·云享专家,阿里云社区·专家博主
📚个人资质:CCNA、HCNP、CSNA(网络分析师),软考初级、中级网络工程师、RHCSA、RHCE、RHCA、RHCI、ITIL😜
💬格言:努力不一定成功,但要想成功就必须努力🔥🎈支持我:可点赞👍、可收藏⭐️、可留言📝
文章目录
-
- 📜章节实验
-
-
- 📑1. 在工作站上,检索http://materials.example.com/osp-small.qcow2磁盘镜像并将其保存在/home/student/下。
- 📑2. 在/home/student/下创建要使用的/usr/share/diskimage-builder/elements目录的副本。
- 📑3. 创建post-install.d目录下的rhe17元素。
- 📑4. 在rhel7元素下post-install.d添加一个脚本,目录中启用httpd服务。
- 📑5. 导出以下环境变量,这些环境变量将由diskimage-builder生成。DB_NO_TMPFS变量是必需的,因为工作站有一个小的硬盘,在大多数情况下不需要它。
- 📑6. 构建一个名为production-rhel-web.qcow2的Red Hat Enterprise Linux 7镜像。使用之前确定的diskimage-builder元素。在镜像中包含httpd包。当提示时,提供student的密码。
- 📑7. 使用questfish命令向production-rhel-web.qcow2镜像添加自定义web index.html。在index.html中包含文本production-rhel-web。确保SELinux上下文为/var/ www/html/index.html是正确的。
- 📑8. 作为operator1用户,使用production-rhel-web.qcow2镜像创建一个新的OpenStack镜像,名为production-rhel-web。最小磁盘需求为10 GiB,最小RAM需求为2 GiB。
- 📑9. 作为operator1用户,使用以下属性启动实例:
- 📑10. 列出可用的浮动IP地址,然后分配一个给production-web1
- 📑11. 使用ssh命令登录到production-web1实例。验证httpd包已安装,httpd服务已启用并正在运行。
- 📑12. 从workstation确认从production-web1中显示的定制web页面包含文本production-rhel-web。
- 📑评分脚本
- 📑清除实验
-
- 💡总结
📜回顾CLOUD-INIT基础知识
为了避免镜像的激增,您可以只维护几个通用基本镜像,然后在部署期间执行特定于实例的定制。cloud-init是一组Python脚本和实用程序,用于执行实例的早期初始化。它的任务可能包括注入SSH密钥、配置网络设置和设置主机名。cloud-init设置实例所需的信息称为用户数据。用户数据支持几种格式,包括shell脚本、云配置格式、upstart作业、MIME多部分格式和include文件。这些都可以使用gzip进行压缩。
📑流行的cloud-init用户数据格式
shell脚本
cloud-init可以直接使用shell脚本作为用户数据,而不需要修改。如果您现有的强化或自定义是使用shell脚本执行的,那么这提供了一个简单的迁移路径。
cloud-config
云配置格式允许管理员使用简单的指令执行常见任务。云配置格式文件必须是有效的YAML,并具有# cloud-config头或Content-Type: text/cloud-config头文件用于MIME归档。它支持创建用户、组、文件和Yum存储库、安装包、确认SSH密钥和其他任务。
include
include文件包含一个url列表,每个url都指向支持的任何格式的用户数据。它必须有一个#include头或者Content-Type: text/x-include-url头用于MIME归档。
📜描述配置驱动
在Red Hat OpenStack平台中,cloud-init在实例启动期间运行,并从计算元数据API接收用户数据信息。OpenStack计算服务提供了–config-drive布尔值选项来自动生成一个小的ISO 9660或VFAT格式的镜像,其中包含特定于实例的用户数据。如果附加的项目网络没有启用DHCP,则此选项可以为实例提供静态网络配置信息。生成的镜像具有一个config-2的卷标,并在引导时附加到实例。
裸金属服务还支持–config-drive选项,但是这需要一个路径到包含您想要包含的文件的目录。Bare Metal服务创建一个gzip压缩的、使用base64编码的、带有config-2标签的ISO 9660镜像,其中包含目录中的文件。
📜描述元数据服务体系结构
随着Red Hat OpenStack Platform 13中OVN的引入,元数据架构发生了变化。元数据体系结构现在由元数据代理、Neutron OVN元数据代理和Nova元数据API组成。
📜描述cloud-init与计算元数据API的通信
运行在实例上的cloud-init通过两种方法之一被定向到元数据服务。在启用DHCP的项目网络上,DHCP响应包括169.254.169.254的静态路由。没有DHCP的项目网络在OVN路由器中包含一个静态路由。下面的列表描述了通信过程。
-
在实例部署期间,将选择一个compute节点作为部署目标。在目标计算节点上运行的neutron-ovn-metadata-agent负责管理网络名称空间(ovnmeta-xxx)、OVS接口和启动HAProxy进程。
-
如果实例网络的网络名称空间(ovnmeta-xxx)不存在,则neutron-ovn-metadata-agent会创建一个。
-
使用veth对将名称空间链接到OVS,并与IP地址相匹配,然后启动。
-
neutron-ovn-metadata-agent启动一个HAProxy进程,该进程被称为该名称空间中的元数据代理。下面的输出显示了名称空间、连接名称空间到OVN的接口和HAProxy进程,它们都使用相同的标识符。

-
如果实例有DHCP提供的主机路由,那么从cloud-init发出的请求将直接发送到元数据代理;如果网络上没有启用DHCP,则由OVN路由器转发到元数据代理。
-
元数据代理流程侦听HTTP流量,然后将任何请求转发到neutron-ovn-metadata-agent代理通过/var/lib/neutron/metadata_proxy套接字。作为计算元数据API不能区分实例的IP地址,包含ID的元数据代理注入一个X-OVN-Network-ID头项目的网络。

- neutron-ovn-metada-agent将请求发送给计算元数据APl,并通过相同的路径将任何响应转发回实例。

图4.1: cloud-init与计算元数据API通信
📜描述CLOUD-INIT结构
cloud-init应用程序由用Python编写的模块组成。它还包括四个Systemd服务、配置文件和一些用于分发特定文件的模板。cloud-init的数据存储在/var/lib/cloud.下。这些文件都在一个安装了cloud-init包的实例中。下面描述这四个服务的功能。
📑Cloud-Init服务
cloud-init-local.service
此服务在网络可用之前先运行,但在挂载根分区时运行读/写。理想情况下,该服务可以为实例提供网络配置信息。执行的命令是cloud-init init --local。
cloud-init.service
该服务在引导顺序中排名第二,并期望网络被确认。因为网络是可用的,所以这个阶段处理所有用户数据。所有模块列于cloud_init_modules在/etc/cloud/cloud.conf中执行。执行的命令是cloud-init init。
cloud-config.service
这个服务在cloud-init.service之后运行。所有模块列于cloud_init_modules在/etc/cloud/cloud.conf中执行。执行命令cloud-init modules --mode=config。
cloud-final.service
此服务根据cloud-config.service和rc-local.service尽可能地延迟运行。所有模块列于cloud_init_modules在/etc/cloud/cloud.conf中执行。执行命令cloud-init modules --mode = final。
您可以通过检查/var/log/下的日志文件来排除cloud-init故障。cloud-init.log文件包含这四个服务产生的信息。cloud-init-output.log文件可能存在,并包含每个模块产生的输出。可以手动运行上述服务中列出的任何命令来解决问题。
/etc/cloud/cloud.cfg文件是cloud-init的主要配置文件,但是可以通过将文件放在/etc/cloud/cloud.cfg.d下来包含其他配置文件。
📜课本练习
-
创建一个云配置格式的用户数据文件。
-
启动实例并验证是否应用了用户数据。
[student@workstation ~]$ lab customization-img-cloudinit setup
Setting up workstation for exercise work:
• Verifying project: finance.................................. SUCCESS
• Creating user environment file: developer1-finance-rc....... SUCCESS
• Creating keypair: example-keypair........................... SUCCESS
. Creating flavor: default.................................... SUCCESS
. Creating internal network: finance-network1................. SUCCESS
. Creating subnet: finance-subnet1............................ SUCCESS
. Creating external network: provider-datacentre.............. SUCCESS
. Creating router: finance-router1............................ SUCCESS
• Creating secgroup rule: ssh................................. SUCCESS
• Checking fip availability: 1................................ SUCCESS
• Adding yv alias:............................................ SUCCESS
📑1. 在cloud config格式创建/home/student/user-data文件。
[student@workstation ~]$ cat user-data
#cloud-config
users:
- name: cloud-admin
sudo: ALL=(ALL) NOPASSWD:ALL
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHufCmzG95rJkXHZOe+7rHMaf3me7geAfdYAc2fuoKjSVoBni4aF4MYkSmb1UYyXjtQ++x2+i13+Osn9FJZmvda0maqT6DuIcpiAxldVrnNJFv5L1VFGiFDbUglThPc25Ytn7bWqg02pFJz4Nc9vN+PzVETevL8b0tMvWPQ44MRuXCCM+UaHO1mBD2pcEnpQ1R/MzYxTzzdvjP5iBn4GAp7KjUw/+FvBhlNiKsXJjQGl6MHbCZhtgsntJzl7tKGY4SgJXZaUD0TnpPeCBlEmWNUz4hAoVMfiiZA4fLAmJ7yZqwRcr4EVnqbmZC6CfIhVxb1J69UHhK62KS6513MP3v Generated-by-Nova
pack

最低0.47元/天 解锁文章
1809





