制作linux雲主機鏡像
1、物理機環境准備
使用一台物理機來配置 kvm 環境,需要 cpu 支持 intel VT 等硬件虛擬化功能。
建議安裝CentOS 7操作系統,確保網絡及軟件源配置正確。
判斷是否支持虛擬化功能命令:確認有結果輸出。則表示該機器支持或已配置 intel VT vmx(intel)或 svm(AMD) 支持虛擬技術。
# 判斷是否有已經支持虛擬化
cat /proc/cpuinfo | grep vmx
安裝虛擬機化相關的軟件包
yum install libvirt qemu-kvm virt-install bridge-utils qemu-img libguestfs -y
啟動虛擬化服務
systemctl start libvirtd
2、安裝kvm虛擬機
准備ISO鏡像
/tmp/CentOS-7-x86_64-Minimal-1810.iso
創建一塊raw格式的硬盤
# 根據鏡像中軟件多少決定鏡像大小
# 盡可能使用較小的 disk,小的鏡像可以適配更大的 flavor
# 通常 Linux 基礎鏡像 4G 即可
qemu-img create -f raw /tmp/centos-7.6.raw 4G
啟動kvm虛擬機
virt-install --virt-type kvm --name centos-7.6 --ram 1024 \
--disk /tmp/centos-7.6.raw,format=raw \
--network network=ovs-external \
--graphics vnc,listen=0.0.0.0 --noautoconsole \
--os-type=linux --os-variant=rhel7 \
--location /tmp/CentOS-7-x86_64-Minimal-1810.iso\
--extra-args 'console=ttyS0,115200n8 serial'
# console=ttyS0,115200n8 serial 這個參數,為了使用virsh console 連接虛擬機;無此參數,將不能使用virsh console 去連接
--disk 指定format格式,將虛擬硬盤制作成raw格式的。
# 查看當前虛機
virsh list --all
# 使用 virsh 從 console 登入機器
virsh console centos-7.6
# 啟動虛擬機
virsh start centos-7.6
# 查看vnc端口
virsh vncdisplay centos-7.6
# 使用vnc viewer 軟件去連接
3、操作虛擬機
安裝軟件包
# 安裝NetworkManager,用於網卡的自動發現及管理
# 安裝acpid,用於虛擬機的電源管理
# 安裝epel-release,添加epel源
yum install NetworkManager acpid epel-release
# 開機啟動服務
systemctl enable acpid
systemctl enable NetworkManager
####################################################
# 安裝cloud-init,用於注入密碼/密鑰和主機名
# 安裝qemu-guest-agent,用於在面板更新密碼/密鑰
# 安裝cloud-utils,用於更改虛擬機根分區大小(可選安裝,需要啟用epel源)
yum install cloud-init qemu-guest-agent cloud-utils
# 開機啟動服務(有的linux發行版默認不開機自啟這些服務,需要手動設置開機自啟)
systemctl enable cloud-init
systemctl enable cloud-init-local
systemctl enable cloud-config
systemctl enable cloud-final
systemctl enable qemu-guest-agent # CENTOS6 為qemu-qa
或者
systemctl enable cloud-init cloud-init-local cloud-config cloud-final qemu-guest-agent
修改配置文件
disable_root: 0
ssh_pwauth: 1
locale_configfile: /etc/sysconfig/i18n
mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2']
resize_rootfs_tmp: /dev
ssh_deletekeys: 0
ssh_genkeytypes: ~
syslog_fix_perms: ~
datasource_list: ['ConfigDrive','Ec2','NoCloud']
datasource:
Ec2:
timeout: 2
max_wait: 5
cloud_init_modules:
- migrator
- seed_random
- bootcmd
- write-files
- growpart
- resizefs
- set_hostname
- update_hostname
- update_etc_hosts
- ca-certs
- rsyslog
- users-groups
- ssh
cloud_config_modules:
- mounts
- locale
- set-passwords
- timezone
- puppet
- chef
- salt-minion
- mcollective
- disable-ec2-metadata
- runcmd
cloud_final_modules:
- rightscale_userdata
- scripts-per-once
- scripts-per-boot
- scripts-per-instance
- scripts-user
- ssh-authkey-fingerprints
- keys-to-console
- phone-home
- final-message
system_info:
distro: rhel
default_user:
name: cloud-user
paths:
cloud_dir: /var/lib/cloud
templates_dir: /etc/cloud/templates
ssh_svcname: sshd
禁用默認的zero conf route
echo "NOZEROCONF=yes" >> /etc/sysconfig/network
修改linux 16所在行行尾,添加console字段
console=ttyS0,115200n8 console=tty0
關閉selinux服務
#修改 /etc/selinux/config 中 SELINUX 行
SELINUX=disabled
關閉開機啟動服務
systemctl disable iptables
systemctl disable postfix
刪除特征性文件
# 清理臨時文件和日志
yum clean all
rm -rf /var/log/yum.log
rm -rf /var/lib/yum/*
rm -rf /root/install.log
rm -rf /root/install.log.syslog
rm -rf /root/anaconda-ks.cfg
rm -rf /var/log/anaconda*
history -c
poweroff
4、在物理機上處理鏡像
初始化kvm虛擬機
virt-sysprep -d centos-7.6
刪除虛擬機
virsh undefine centos-7.6
5、拷貝制作好的raw格式的鏡像
/tmp/centos-7.6.raw
6、發布鏡像到雲平台
[root@overcloud-controller-0 ~]# openstack image create \
--container-format bare \
--disk-format raw \
--file a4230bd2-eac6-4769-beab-9ee06b08a248.raw \
--public \
--property hw_qemu_guest_agent=yes \
--property image_type=distribution \
--property os_admin_user=root \
--property image_name_order=120 \
--property image_label_order=100 \
--property os_distro=centos \
--property os_version="7.5-64bit" \
--property image_build_version="2018-05-14-lnmp" \
"CentOS 7.5 64bit 20180514 lnmp"
#######
hw_qemu_guest_agent=yes , 開啟qemu_guest_agent