zoukankan      html  css  js  c++  java
  • openstack镜像制作思路、指导及问题总结

    一、思路就4步:
    1、创建镜像文件
    2、用nova-compute自带的kvm,启动.iso文件,用vncviewer完成OS的安装过程
    3、OS安装完毕,停止虚拟机,kvm重启镜像,安装必要的软件
    4、后续:上传镜像到云中




    二、镜像制作指导

    很多源都有为OpenStack已经编译好的各种镜像了,您可以直接下载并通过使用这些镜像来熟悉OpenStack。
    不过如果是为生产环境进行部署的话,您一定需要构建含有定制软件或配置的镜像文件。本章将引领您完成几种较为流行的Linux发行版镜像,最后也将制作一份Windows的镜像。


    由不同的Linux发行版制作镜像时,过程几乎一样,仅有微小的差别而已。由于含有cloud-ini软件包,人们用Ubuntu系统制作镜像文件变得非常容易。Cloud-init软件在实例运行时能够自动维护实例配置,也将为无密码登陆完成密匙导入以及完成设置主机名等任务。每个实例都将通过169.254.169.254的元数据接口,从nova运算中读取特定的配置。
    如果您制作发行版不含有诸如cloud-init此类的软件包,您就需要自行完成密匙导入等操作了。说来也简单,只需向rc.local文件中添加相关命令即可。


    本文所有的例子,都是在KVM基础上完成的。接下来的操作将制作很多镜像,这些镜像代表一个没有分区的硬盘。


    二、创建Linux镜像


    第一部,首先是在Client1上创建一块空镜像,这块镜像用作虚拟机的硬盘,所以请保证留出你所需的空间的大小:
    kvm-img create -f qcow2 server.img 5G


    (一)安装准备
    下载你所需的Linux发行版iso原镜像文件,比如您想安装Ubuntu,您可以使用wget或浏览器从网站“http://releases.ubuntu.com”获得iso文件。


    将下载的iso文件置入虚拟机的CD-ROM后,启动KVM一个虚拟机实例。您将看到安装过程的开始。键入如下命令,它将在端口0开放VNC服务:
    sudo kvm -m 256 -cdrom ubuntu-12.04-server-amd64.iso -drive file=server.img,if=virtio,index=0 -boot d -net nic -net user -nographic  -vnc :0


    使用0这个展示端口连入虚拟机的VNC,并完成安装。
    举例如下,client1的IP地址是10.10.10.4,则通过下列命令访问vnc:
    vncviewer 10.10.10.4 :0


    注意,在制作Linux镜像过程中,请创建一个单独的ext4格式分区并将其挂在swap分区下。
    安装结束后,通过执行下列命令重新载入虚拟机:
    sudo kvm -m 256 -drive file=server.img,if=virtio,index=0 -boot c -net nic -net user -nographic -vnc :0


    此时,您可以在这个系统上安装定制的软件包,进行系统更新,添加用户或更改配置了。


    (二)Ubuntu


    执行以下命令:
    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get install openssh-server cloud-init


    清除 /etc/udev/rules.d文件的网络设备命名规则,因为这些规则将从实例的网卡获得。
    sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules
    (三)Fefora


    运行如下命令:
    yum update
    yum install openssh-server
    chkconfig sshd on


    然后编辑 /etc/sysconfig/network-scripts/ifcfg-eth0文件如下所示:
    DEVICE="eth0"
    BOOTPROTO=dhcp
    NM_CONTROLLED="yes"
    ONBOOT="yes"


    清除 /etc/udev/rules.d文件的网络设备命名规则,因为这些规则将从实例的网卡获得。
    sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules


    关闭虚拟机。
    由于Fedora没有cloud-init或类似软件,您需要亲自进行几步配置使实例可以得到诸如ssh key这样的元数据。
    编辑 /etc/rc.local文件并且把以下内容粘贴到“touch /var/lock/subsys/local”行前:
    depmod -a
    modprobe acpiphp
    # simple attempt to get the user ssh key using the meta-data service
    mkdir -p /root/.ssh
    echo >> /root/.ssh/authorized_keys
    curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key| grep 'ssh-rsa' >> /root/.ssh/authorized_keys
    echo "AUTHORIZED_KEYS:"
    echo "************************"
    cat /root/.ssh/authorized_keys
    echo "************************"


    (四)OpenSUSE


    选择ssh服务,curl以及其他需要的包。
    安装ssh服务器:
    zypper install openssh


    安装crul:
    zypper install curl


    使用如下步骤将Ssh Key注入实例中:
    首先,创建文件 /etc/init.d/sshkey并且写入下列内容:
    echo >> /root/.ssh/authorized_keys
    curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys
    echo "AUTHORIZED_KEYS:"
    echo "************************"
    cat /root/.ssh/authorized_keys
    echo "************************"


    然后,为该文件设置权限:
    chmod 755 /etc/init.d/sshkey


    将sshkey服务设置为开机自动启动:
    chkconfig sshkey on


    使用下列命令设置防火墙(而非iptables),令其允许ssh服务:
    yast2


    最后同样地,清除 /etc/udev/rules.d文件的网络设备命名规则,因为这些规则将从实例的网卡获得。
    sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules


    (五)Debian


    安装时选择SSH服务器,Curl及相关软件。
    然后进行必要的设置,为key注入而编辑 /etc/rc.local文件并增加如下内容:
    echo >> /root/.ssh/authorized_keys
    curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys
    echo "AUTHORIZED_KEYS:"
    echo "************************"
    cat /root/.ssh/authorized_keys
    echo "************************"


    同样地,清除 /etc/udev/rules.d文件的网络设备命名规则,因为这些规则将从实例的网卡获得。
    sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules
    (六)CentOS6及RHEL6


    安装时选择SSH服务器,Curl及相关软件。
    然后进行必要的设置,为key注入而编辑 /etc/rc.local文件并增加如下内容:
    echo >> /root/.ssh/authorized_keys
    curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys
    echo "AUTHORIZED_KEYS:"
    echo "************************"
    cat /root/.ssh/authorized_keys
    echo "************************"


    编辑 /etc/sysconfig/network-scripts/ifcfg-eth0文件如下所示:
    DEVICE="eth0"
    BOOTPROTO=dhcp
    NM_CONTROLLED="yes"
    ONBOOT="yes"


    同样地,清除 /etc/udev/rules.d文件的网络设备命名规则,因为这些规则将从实例的网卡获得。
    sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules


    (七)上传Linux镜像


    使用如下命令上传镜像:
    glance add name="<Image name>" is_public=true container_format=ovf disk_format=qcow2 < <filename>.img
    三、创建Windows镜像


    第一步,仍然是在Client1上创建一块空镜像,这块镜像用作虚拟机的硬盘,所以请保证留出你所需的空间的大小:
    kvm-img create -f qcow2 windowsserver.img 20G


    (一)安装操作系统


    当实例运行时,OpenStack利用virtio接口来使用镜像,于是镜像中的操作系统需要装有virtio驱动。不巧的是,默认Windows Server 2008是没有virtio驱动的。您可以在如下网址:http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin 下载装有该驱动的iso镜像并使用该镜像进行安装。
    译者注1:Virtio 是半虚拟化 hypervisor 中位于设备之上的抽象层。virtio 由 Rusty Russell 开发,virtio 是对半虚拟化 hypervisor 中的一组通用模拟设备的抽象。该设置还允许 hypervisor 导出一组通用的模拟设备,并通过一个通用的应用编程接口(API)让它们变得可用。[来源:开源中国http://www.oschina.net/p/virtio ]
    译者注2:该链接的virtio-win是0.1-22版,不能用。下载用1.1.16新版即可。


    执行此命令开始安装:
    sudo kvm -m 1024 -cdrom windows2008.iso -drive file=windowsserver1.img,if=virtio -boot d -drive file=virtio-win-0.1-22.iso,index=3,media=cdrom  -device virtio-net-pci -net nic -net user -nographic -vnc :5


    当安装提示您选择一块硬盘设备步骤时,您并不能看到当前有可用设备。点击左下方的“载入设备(Load drivers)”按钮,选择第二CDROM后,含有virtio驱动的硬盘便被加载了。
    在安装结束之前,您需要重启系统一次,此时您可以安装其它您所需的软件或执行任何需要的配置更改。除此之外,请务必开放实例中的远程桌面,因为远程桌面将是您连接并使用该实例的唯一途径。同时,Windows防火墙应该相应地设置为对ICMP和RDP开放。


    (二)上传Windows镜像


    关闭虚拟机并将该镜像使用如下命令上传至OpenStack中:
    glance add name="windows" is_public=true container_format=ovf disk_format=qcow2 < windowsserver.img



    三总结:
    1、在镜像制作的(2),须加上-net nic -net tap才能建立镜像到kvm网桥virbr0的映射,网络才通。之前制作镜像的时候只有centos.img加了,故能联网,而其他几个镜像的网络无论是dhcp,还是手动设置到kvm网段,都不通。


    2、在单节点的openstack中,由ifconfig可以看到网络的分布情况——两个网桥br100,virbr0:其中br100是实例的网桥,每创建一个实例都会有一个虚拟网卡vnet*生成,实例的内网Ip即floating ip,和vnet*对应,与br100在同一网段;而virbr0是kvm的网桥,用kvm启动的虚拟机(镜像)会自动生成tap*虚拟网卡,与镜像中的eth*对应,没有建立对应关系则网络不通,镜像自动获取的ip与vribr0在同一网段。另外,br100,virbro不在同一网段,最终都与eth0物理网卡相连

    3.在制作windows 镜像的时候遇到不能识别硬盘。可以查看下面内容

    在OpenStack管理界面通过iso镜像安装Windows7,出现不能识别硬盘,有的同学经常碰到这个问题,这里给总结一下:

    母系统环境:ubuntu12.04 server + kvm
    下载virtio驱动,因为win默认不支持virtio驱动,而通过openstack管理虚拟机是需要virtio驱动的。需要两个virtio驱动,一个是硬盘的,一个是网卡的,即:virtio-win-1.1.16.vfd和virtio-win-0.1-30.iso
    创建一个win7的镜像,raw格式,大小10G
    kvm-img create -f raw win7.img 10G
    启动基于win7的kvm虚拟机,映射驱动vfd到软盘A
    kvm -m 1024 -cdrom win7.iso -drive file=win7.img,if=virtio,boot=on -fda virtio-win-1.1.16.vfd -boot d -nographic -vnc :0
    用vnc安装win7,因为默认没有virtio驱动,所以识别不了硬盘,需要手动安装。

  • 相关阅读:
    JDBC batch批处理Statement executeBatch 具体解释
    NGUI字体贴图压缩以及相关Shader解读
    埃博拉患者的死亡经历
    Android URI简单介绍
    【安卓笔记】通过发送特定的短信远程控制手机
    InstallShield12豪华版破解版下载|InstallShield下载|软件打包工具
    求平方根C++
    监听手机录音
    My安装EclipseJS代码提示(Spket插件)
    四个好看的CSS样式表格
  • 原文地址:https://www.cnblogs.com/student-programmer/p/6770105.html
Copyright © 2011-2022 走看看