OpenStack 制作镜像
OpenStack 制作镜像安装软件包yum -y install qemu-kvmqemu-img kvm qemu-kvm-tools libvirtbridge-utils virt-install libguestfs-toolssystemctl start libvirtd #启动自行下载Centos的ISO镜像创建KVM虚拟机磁盘qemu-img create -f qcow2 /d
·
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
可以上传镜像了
更多推荐
所有评论(0)