制作OpenStack上使用的CentOS系统镜像

本文详细介绍如何在OpenStack环境中创建一个自定义的CentOS镜像。从安装必要的支持包开始,通过具体步骤引导读者完成镜像制作,并最终在OpenStack环境中部署。

http://www.linuxidc.com/Linux/2012-10/72483.htm

很多进行Openstack测试的人都发现,自己的openstack测试环境搭建的很成功,安全策略也添加了,但是上传镜像之后,却出现无法Ping通,无法ssh到实例等问题,实际上这很可能是由于我们没有使用一个正确的镜像导致的。那么如何创建一个自己想要的镜像呢,这里我就给大家说一下制作CentOS镜像的步骤。

一、准备工作

首先你需要有一台CentOS的机器,作为制作镜像的机器。比如自己的虚拟机。我的环境是用一台R410上面装CentOS6.3的系统来做的。

1.安装底层支持包

yum groupinstall Virtualization "Virtualization Client" 
yum install libvirt

2.下载或从本地上传进去一个完整的系统镜像

(这里我下载的是从163镜像源下载的CentOS6.3,如果你需要其他版本的CentOS,请下载对应的版本)

mkdir /openstack-image cd /openstack-image 
wget 
http://mirrors.163.com/centos/6/isos/x86_64/CentOS-6.3-x86_64-bin-DVD1.iso

3.启动服务

service libvirtd restart

二、制作镜像

1.建立镜像文件

cd /openstack-image
qemu-img create -f qcow2 CentOS6.3-openstack.img 10G
chown qemu:qemu /openstack-image -R

2.通过virt-install来创建一个新的虚拟机

virt-install -n CentOSimg -r 4096 --cpu host -c /images/CentOS-6.3-x86_64-bin-DVD1.iso --disk path=/openstack-image/CentOS6.3-openstack.img,device=disk,bus=virtio,size=30,format=qcow2 --vnc --vncport=5900 --vnclisten=0.0.0.0 -v

这里要注意-n的指定我们虚拟机的名字,一会儿还要用到,这个命令运行之后,你就可以用VNC软件来连入了,ip就是你服务器的ip,端口就是5900,推荐使用vncviewer这个绿色的小软件来打开:

image

3.安装操作系统

操作系统的安装和正常的安装几乎一样,你需要什么样的包,就安装什么样的包,有两点需要注意的:

注意一:分区,分区的时候只给"/" 根目录分一个区即可,其他都不要。 
注意二:网络设置方面,确保你的网卡eth0是DHCP状态的,而且请务必勾上"auto connect"的对勾

之后系统就按照你正常装的样子安装完毕了,安装完毕之后,我们刚才使用的vnc-install命令会自动退出。


4.设置系统

此时我们还需要为openstack的镜像而打磨一下我们刚装好的系统,你可以使用virsh list来看当前已启动的虚拟机。

virsh start CentOSimg 
virsh list

查看确定是我们刚才制作的虚拟机"CentOSimg"重新开启了.

之后再次用VNC连入到这个虚拟机中,端口不变,我们需要做下面的一些操作

4.1.删除网络配置

删除ifcfg-eth0的HWADDR一行,最后你的ifcfg-eth0的配置文件应该是这样的:

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="dhcp"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"

删除已生成的网络设备规则

rm -rf /etc/udev/rules.d/70-persistent-net.rules

4.2.关闭防火墙和selinux

sed -i s/^SELINUX=.*/SELINUX=disabled/g /etc/selinux/config
service iptables stop && chkconfig iptables off
service ip6tables stop && chkconfig ip6tables off

4.3(可选)设置系统能自动获取openstack指定的hostname和ssh-key

使用vim编辑/etc/rc.local文件

然后将以下内容输入进去,放在"touch /var/lock/subsys/local"之前

  1.  if [ ! -d /root/.ssh ]; then   
  2.   mkdir -p /root/.ssh   
  3.   chmod 700 /root/.ssh   
  4. fi   
  5.    
  6.    
  7. # Fetch public key using HTTP   
  8. ATTEMPTS=30   
  9. FAILED=0   
  10. while [ ! -f /root/.ssh/authorized_keys ]; do   
  11.     curl -f http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/metadata-key 2>/dev/null   
  12.     if [ $? -eq 0 ]; then   
  13.         cat /tmp/metadata-key >> /root/.ssh/authorized_keys   
  14.         chmod 0600 /root/.ssh/authorized_keys   
  15.         restorecon /root/.ssh/authorized_keys   
  16.         rm -f /tmp/metadata-key   
  17.         echo "Successfully retrieved public key from instance metadata"   
  18.         echo "*****************"   
  19.         echo "AUTHORIZED KEYS"   
  20.         echo "*****************"   
  21.         cat /root/.ssh/authorized_keys   
  22.         echo "*****************"   
  23.    
  24.         curl -f http://169.254.169.254/latest/meta-data/hostname > /tmp/metadata-hostname 2>/dev/null   
  25.         if [ $? -eq 0 ]; then   
  26.             TEMP_HOST=`cat /tmp/metadata-hostname`   
  27.             sed -i "s/^HOSTNAME=.*$/HOSTNAME=$TEMP_HOST/g" /etc/sysconfig/network   
  28.             /bin/hostname $TEMP_HOST   
  29.             echo "Successfully retrieved hostname from instance metadata"   
  30.             echo "*****************"   
  31.             echo "HOSTNAME CONFIG"   
  32.             echo "*****************"   
  33.             cat /etc/sysconfig/network   
  34.             echo "*****************"   
  35.    
  36.         else   
  37.             echo "Failed to retrieve hostname from instance metadata. This is a soft error so we'll continue"   
  38.         fi   
  39.         rm -f /tmp/metadata-hostname   
  40.     else   
  41.         FAILED=$(($FAILED + 1))   
  42.         if [ $FAILED -ge $ATTEMPTS ]; then   
  43.             echo "Failed to retrieve public key from instance metadata after $FAILED attempts, quitting"   
  44.             break   
  45.         fi   
  46.         echo "Could not retrieve public key from instance metadata (attempt #$FAILED/$ATTEMPTS), retrying in 5 seconds..."   
  47.         sleep 5   
  48.   fi   
  49. done 


三、上传镜像,开启实例

如果以上的内容都做完了,那么就可以直接把这个生成的镜像关机了

init 0

之后,我们可以看看之前生成的那个qcow2格式的img,发现不超过2G应该。

我们只需要将这个镜像传到Openstack的环境里,然后使用glance add添加即可

glance add name=XXXX is_public=true container_format=ovf disk_format=qcow2 < /tmp/CentOS6.3-openstack.img

再之后,用这个镜像创建一个实例~~启动起来看看吧~~你会发现直接获取的就是Openstack分配的ip ~而且直接可以ssh到哦~!


<think>好的,我需要帮助用户在OpenStack中基于CentOS 9云镜像创建实例。首先,我得确认用户提供的引用内容是否相关。用户引用了两个资料,一个是关于CentOS 7镜像制作使用,另一个是创建实例的基本方法。不过用户需要的是CentOS 9的教程,所以可能需要结合通用步骤和CentOS 9的特点。 首先,用户可能需要先获取CentOS 9的云镜像CentOS官方通常提供云镜像下载,比如从cloud.centos.org获取qcow2格式的镜像。下载完成后,需要将镜像传到OpenStack的Glance服务中。这里可以参考引用[1]中的命令,但需要调整镜像名称和版本。例如,使用`openstack image create`命令,指定正确的磁盘格式和文件路径。 接下来是创建实例的步骤,引用[2]提到选择镜像源和实例类型,这些步骤对于CentOS 9应该也是类似的。用户需要确保在创建实例时选择正确的CentOS 9镜像配置网络、安全组等参数。可能需要注意CentOS 9的默认用户和认证方式,比如使用cloud-init设置密码或SSH密钥。 另外,用户可能需要配置实例的元数据或用户数据,以便自动化初始化过程。例如,通过用户数据脚本安装软件或配置网络。安全组设置也需要开放必要的端口,如SSH的22端口。 还需要考虑存储选项,比如是否使用LVM卷,但根据用户提供的引用[1]中的标签,可能涉及LVM配置,但CentOS 9镜像可能已经预先配置好。不过需要确认镜像是否支持OpenStack的需求,比如cloud-init工具是否安装,以确保实例能够正确初始化。 最后,验证实例创建后是否能够通过SSH登录,检查网络连接和系统状态。如果有问题,可能需要查看日志或调整配置。 总结步骤应该是:下载镜像、上传镜像创建实例(选择镜像、配置参数)、初始化和验证。需要确保每个步骤的命令和参数正确,特别是针对CentOS 9的调整。</think>### 如何在 OpenStack 中基于 CentOS 9 云镜像创建实例 #### 步骤 1:获取 CentOS 9 云镜像CentOS 官方或 OpenStack 社区获取适配的 CentOS 9 云镜像(通常为 `.qcow2` 格式)。例如: - 官方下载地址:`https://cloud.centos.org/centos/9-stream/x86_64/images/` #### 步骤 2:上传镜像OpenStack Glance 使用 OpenStack CLI 或 Dashboard 上传镜像: ```bash openstack image create --disk-format qcow2 \ --file CentOS-Stream-Generic-cloud-9.qcow2 \ --tag centos9 --container-format bare CentOS-9-Stream ``` 参数说明: - `--disk-format qcow2`: 指定镜像格式 - `--file`: 镜像文件路径 - `--tag centos9`: 添加标签便于筛选[^1] #### 步骤 3:创建实例 1. **选择镜像** 在 Dashboard 的「实例」页面点击「启动实例」→「源」→ 选择已上传的 CentOS 9 镜像[^2]。 2. **配置实例类型** 根据需求选择 CPU、内存和磁盘配置(例如 `m1.small` 或 `m1.medium`)。 3. **网络设置** 绑定可用的网络和安全组,确保开放 SSH 端口(默认 22)。 4. **密钥对或密码注入** - 若镜像支持 `cloud-init`,可通过「配置」→「自定义脚本」注入密码: ```yaml #cloud-config password: your_password chpasswd: { expire: False } ssh_pwauth: True ``` - 或绑定预先创建的 SSH 密钥对。 #### 步骤 4:启动验证实例 1. 启动后通过 Dashboard 获取实例 IP。 2. 使用 SSH 或控制台登录: ```bash ssh -i your_key.pem centos@<实例IP> ``` 若镜像默认用户非 `centos`,可尝试 `cloud-user` 或查看镜像文档。 --- ### 注意事项 1. **镜像兼容性** CentOS 9 Stream 镜像需支持 `cloud-init` 以实现元数据注入。 2. **存储配置** 若需 LVM 分区,可在上传镜像时添加 `--property hw_disk_bus=scsi` 参数。 3. **安全组策略** 建议限制 SSH 访问源 IP 范围以提高安全性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值