OpenStack 制作镜像

OpenStack 制作镜像

安装软件包

yum -y install qemu-kvm  qemu-img kvm qemu-kvm-tools libvirt  bridge-utils virt-install libguestfs-tools
systemctl start libvirtd #启动

自行下载Centos的ISO镜像

创建KVM虚拟机磁盘

qemu-img create -f qcow2 /data/centos.qcow2 10G # create disk image

使用以下命令创建KVM虚拟机

virt-install --name centos7 \
--ram 2048 --vcpus 1 \
--os-type linux --os-variant rhel7 --arch=x86_64 \
--network network=default,model=virtio \
--disk path=/data/centos.qcow2,format=qcow2 \
--cdrom=/data/CentOS-7.iso \
--console pty,target_type=serial \
--graphics vnc,listen=0.0.0.0,port=7788


## 使用VNC连接宿主机的7788端口 就能看到系统安装的过程

图形化安装CentOS虚拟机,选择手动分区,且只分一个根分区
配置完成后就可以开始安装了,在CONFIGURATION中设置root密码,制作完后cloud-init可以重新设置root初始密码。大约几分钟后,即可自动完成安装配置工作,最后点击右下角的reboot重启退出虚拟机。注意:reboot后,kvm虚拟机不会重启,需要手动通过以下指令完成虚拟机重启。
#  virsh start centos7 # 启动虚拟机

虚拟机操作

安装acpid软件包,并设置开机启动服务

yum install -y acpid && systemctl enable acpid
# acpid是一个用户空间的服务进程, 用来处理电源相关事件,比如将kernel中的电源事件转发给应用程序,告诉应用程序安全的退出,防止应用程序异常退出导致数据损坏

配置nova console log功能

# 当操作系统内核崩溃时会报出内核系统crash出错信息,通常启动的时候一闪而过, 而此时系统还没有起来,不能通过远程工具(比如ssh)进入系统查看,我们可以通过配置grub,把这些日志重定向到Serial Console中,这样我们就可以通过Serial console来访问错误信息,以供分析和排错使用。修改配置文件/etc/default/grub,设置GRUB_CMDLINE_LINUX如下:

GRUB_CMDLINE_LINUX="crashkernel=auto console=tty0 console=ttyS0,115200n8"

安装qemu-guest-agent软件包,并设置开机启动

# qemu-guest-agent是运行在虚拟机内部的一个服务,libvirt会在本地创建一个unix socket,模拟为虚拟机内部的一个串口设备,从而实现了宿主机与虚拟机通信,这种方式不依赖于TCP/IP网络,实现方式简单方便。
# 通过这种方式,宿主机可以发送指令写到socket文件中,虚拟机内部的qemu-guest-agent会轮询查看这个串行设备是否有指令,一旦接收到指令就可以执行对应的脚本,从而实现了宿主机控制虚拟机执行命令的功能,其中最常用的指令就是通过libvirt修改虚拟机密码,用法举例如下:
virsh set-user-password instance-00000028 --user root --password 123123


yum install -y qemu-guest-agent && systemctl enable qemu-guest-agent

修改//etc/sysconfig/qemu-ga配置文件:

  • TRANSPORT_METHOD="virtio-serial"
    DEVPATH="/dev/virtio-ports/org.qemu.guest_agent.0"
    LOGFILE="/var/log/qemu-ga/qemu-ga.log"
    PIDFILE="/var/run/qemu-ga.pid"
    BLACKLIST_RPC=""
    FSFREEZE_HOOK_ENABLE=0
    

通过以下脚本,可以查看qemu-guest-agent支持的指令

  • 注意:确认包含guest-set-user-password指令,支持修改管理员密码。
virsh qemu-agent-command $vm_name '{"execute":"guest-info"}' | python -m json.tool | grep 'name' | cut -d ':' -f 2 | tr -d '",' | grep passwd

配置zeroconf

# zeroconf是一种古老的自动网络配置技术,在没有DHCP服务的年代,所有服务器都需要网管手动配置IP、hostname等,非常麻烦,zeroconf正好解决了这个问题,不过目前通常都通过DHCP获取地址了。但是,一些操作系统仍然会开启这个服务,当DHCP获取IP失败时,会尝试通过zeroconf配置。zeroconf启动时会自动创建一条路由169.254.0.0/16,而虚拟机访问metadata服务的地址正好是169.254.169.254,如果启动了zeroconf服务,由于路由冲突,虚拟机不能通过169.254.169.254路由到网络节点的metadata服务了。OpenStack虚拟机通常都是通过DHCP获取IP的,因此我们并不需要zeroconf服务。为了虚拟机能够访问metadata服务,我们必须禁止zeroconf服务。具体配置如下:
echo "NOZEROCONF=yes" >> /etc/sysconfig/network
echo "NETWORKING=yes" >> /etc/sysconfig/network

安装cloud-init(重要)

# cloud-init是虚拟机第一次启动时执行的脚本,主要负责从metadata服务中拉取配置信息,完成虚拟机的初始化工作,比如设置主机名、初始化密码以及注入密钥等。手动安装cloud-init并设置开机启动如下:
yum install -y cloud-init && systemctl enable cloud-init

#对于 Linux 镜像,cloud-init 负责 instance 的初始化工作。cloud-init 功能很强大,能做很多事情,而且我们可以通过修改配置文件灵活定制 cloud-init。
  • cloud-init 的配置文件为 /etc/cloud/cloud.cfg,这里举几个应用场景:
#1. 如果希望 root 能够直接登录 instance(默认不允许 root 登录),设置:
	disable_root: 0
#2. 如果希望能以 ssh passwod 方式登录(默认只能通过 private key 登录),设置:
	ssh_pwauth: 1
#3. 如果希望能够修改 instance 的 hostname(默认 instance 每次重启后 cloud-init 都会重新将 hostname 恢复成初始值),将cloud_init_modules 列表中下面两项删除或注释掉:
	- set_hostname
	- update_hostname
#instance 每次启动 cloud-init 都会执行初始化工作,如果希望改变所有 instance 的初始化行为,则修改镜像的 /etc/cloud/cloud.cfg 文件;如果只想改变某个 instance 的初始化行为,直接修改 instance 的 /etc/cloud/cloud.cfg。

  • Set Passwords:
chpasswd:
  list: |
    centos:openstack
  expire: False
#如果指定expire, 并且设置为 false, 则将密码全局配置键用作所有用户帐户的密码。如果指定了expire并将其设置为 true, 则用户密码将过期, 从而防止使用默认的系统密码。


安装growpart

# 虚拟机制作镜像时指定了根分区大小(比如我们设置为10GB),为了使虚拟机能够自动调整为flavor disk指定的根磁盘大小,即自动扩容, 我们需要安装glowpart(老版本叫growroot)并完成以下配置:
yum install -y epel-release
yum install -y cloud-utils-growpart
rpm -qa kernel | sed 's/^kernel-//' | xargs -I {} dracut -f /boot/initramfs-{}.img {}
# 完成以上工作后,我们的镜像配置基本结束,删除一些无用文件,清理history命令后执行关机:

宿主机操作

  • 移除本地信息

    #在宿主机上运行以下命名,移除宿主机信息,比如mac地址等。
    virt-sysprep -d centos7
    
  • 压缩镜像

    virt-sparsify --compress $kvname.qcow2 $kvname-.qcow2
    

可以上传镜像了

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值