7.8、如何制作openstack镜像


1、创建openstack-linux镜像:

下载已经做好的的镜像:https://docs.openstack.org/image-guide/obtain-images.html#centos

(1)安装软件包:

yum install -y qemu-kvm libvirt virt-install

systemctl enable libvirtd

systemctl start libvirtd

(2)上传centos镜像到/tmp/目录下;

(3)创建虚拟机硬盘:

qemu-img create -f qcow2 /tmp/centos.qcow2 10G

(4)创建虚拟机:

1)默认网卡:

virt-install --virt-type kvm --name centos --ram 1024 \

--disk /tmp/centos.qcow2,format=qcow2 \

--network network=default \

--graphics vnc,listen=0.0.0.0 --noautoconsole \

--os-type=linux --os-variant=rhel7 \

--location=/tmp/CentOS-7-x86_64-DVD-1804.iso

2)如果是桥接网卡(推荐):

virt-install --virt-type kvm --name centos --ram 1024 \

--disk /tmp/centos.qcow2,format=qcow2 \

--network bridge=br0 \

--graphics vnc,listen=0.0.0.0 --noautoconsole \

--os-type=linux --os-variant=rhel7 \

--location=/tmp/CentOS-7-x86_64-DVD-1804.iso

提示:桥接网卡的建立方法参考文档'6、安装kvm虚拟机:';

(5)虚拟机安装:

参考文档'2.14、制作Centos模板及优化操作';

(6)开启虚拟机:

virsh start centos

(7)虚拟机优化:

参考文档'2.14、制作Centos模板及优化操作';

(8)给虚拟机安装acpi服务:

使虚拟机监控程序能够重新启动或关闭实例;

yum install acpid -y

systemctl enable acpid.service

systemctl start acpid.service

(9)给虚拟机安装cloud-utils-growpart以允许分区调整大小:

yum install cloud-utils-growpart

(10)禁用虚拟机zeroconf路由:

要访问元数据服务的实例,必须禁用默认的zeroconf路由;

echo "NOZEROCONF=yes" >> /etc/sysconfig/network

tail -1 /etc/sysconfig/network

NOZEROCONF=yes

(11)配置虚拟机输出控制台和设备内核兼容:

1)修改/etc/sysconfig/grub配置文件如下内容:

GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap console=tty0 console=ttyS0,115200n8 noapic"

2)运行以下命令使配置生效:

grub2-mkconfig -o /boot/grub2/grub.cfg

(12)编写虚拟机metada脚本:

1)编写脚本:

vim /tmp/init.sh

#!/bin/bash


set_key() {

if [ ! -d /root/.ssh ]; then

mkdir -p /root/.ssh

chmod 700 /root/.ssh

fi


for ((i=1;i<=5;i++));do

if [ ! -f /root/.ssh/authorized_keys ];then

curl -f http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/metadata-key 2>/dev/null

if [ $? -eq 0 ];then

cat /tmp/metadata-key >> /root/.ssh/authorized_keys

chmod 0600 /root/.ssh/authorized_keys

restorecon /root/.ssh/authorized_keys

rm -f /tmp/metadata-key

echo "Successfully retrieved public key from instance metadata"

echo "*****************"

echo "AUTHORIZED KEYS"

echo "*****************"

cat /root/.ssh/authorized_keys

echo "*****************"

break

fi

else

break

fi

done

}



set_hostname() {

PRE_HOSTNAME=$(curl -s http://169.254.169.254/latest/meta-data/hostname)

if [ $? -eq 0 ];then

DOMAIN_NAME=$(echo ${PRE_HOSTNAME} | awk -F '.' '{print $1}')

hostnamectl set-hostname `echo ${DOMAIN_NAME}`

fi

}


set_static_ip(){

PRE_IP=$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4)

if [ $? -eq 0 ];then

NET_FILE="/etc/sysconfig/network-scripts/ifcfg-eth0"

echo "TYPE=Ethernet" >${NET_FILE}

echo "BOOTPROTO=static" >>${NET_FILE}

echo "NAME=eth0" >>${NET_FILE}

echo "DEVICE=eth0" >>${NET_FILE}

echo "ONBOOT=yes" >>${NET_FILE}

echo "IPADDR=${PRE_IP}" >>${NET_FILE}

echo "NETMASK=255.255.255.0" >>${NET_FILE}

echo "GATEWAY=10.0.0.253" >>${NET_FILE}

echo "DNS1=114.114.114.114" >>${NET_FILE}

fi

}


main(){

set_key;

set_hostname;

set_static_ip;

/bin/cp -a /tmp/rc.local /etc/rc.d/rc.local

reboot

}


main


2)将rc.local拷贝到/tmp/下:

cp -a /etc/rc.d/rc.local /tmp/

3)CentOS7开机执行rc.local,需将rc.local添加执行权限:

chmod +x /etc/rc.d/rc.local

4)编辑rc.local

vim /etc/rc.d/rc.local

/bin/sh /tmp/init.sh

5)提示:

提示:启动时使用的是openstack分配的ip地址,然后执行/etc/rc.d/rc.local中的

的脚本把主机的ip地址静态化,再把/etc/rc.d/rc.loacl还原为原来的模式,重启系统使网卡、主机名生效,该脚

本只执行一次,如果执行失败使用的是openstack分配的动态地址(也可以到虚拟机内部执行sh /tmp/init.sh);

如果修改虚拟机模板需要重新执行上面的3)、4)、步骤;

(13)修改网卡:

因为台虚拟机的网卡在重启的时候都是不一

样的,需要清除网卡的唯一标识;

vim /etc/sysconfig/network-scripts/ifcfg-eth0

TYPE=Ethernet

BOOTPROTO=dhcp

NAME=eth0

DEVICE=eth0

ONBOOT=yes

(14)关闭虚拟机:

shutdown -h now

(15)在宿主机上初始化虚拟机镜像:

1)清除网络相关硬件生成信息(这里不使用该命令);

此操作会清理一些个性操作,比如/etc/rc.d/rc.local信息,清空/tmp/目录中

的文件等,如果配置了个性化操作,不要使用该命令,如果是全新的系统可以使用该命令;

yum install libguestfs-tools

virt-sysprep -d centos

2)压缩虚拟机镜像:

qemu-img convert -c -O qcow2 /tmp/centos.qcow2 /tmp/centos7.qcow2

(16)在控制节点上传镜像到glance:

1)获得管理员的身份:

. /scripts/admin-openstack.sh

#提示也可以登录界面上传专属于自己项目的镜像;

2)上传公共镜像:

openstack image create "CentOS-7.5-x86_64" \

--file /tmp/centos7.qcow2 \

--disk-format qcow2 --container-format bare \

--public

3)镜像位置:

du -sh /var/lib/glance/images/0a0362a3-5180-4347-8b4a-a74930378489

898M /var/lib/glance/images/0a0362a3-5180-4347-8b4a-a74930378489

(17)使用镜像创建虚拟机:

1)使用admin用户登录创建镜像的实例类型:

2)使用demo用户登录创建虚拟机:

提示:第一次使用镜像创建虚拟机时需要拷贝镜像到计算节点,孵化的过程可能有点慢,等下次再创建虚拟机就会快很多了;

3)验证:

在控制节点免秘钥登录新建的虚拟机;

[root@controller ~]# ssh -p22 [email protected]

Last login: Wed Apr 3 16:07:56 2019 from 10.0.0.11

[root@web-node1 ~]# ping www.baidu.com

PING www.a.shifen.com (183.232.231.172) 56(84) bytes of data.

64 bytes from 183.232.231.172 (183.232.231.172): icmp_seq=1 ttl=128 time=39.2 ms

64 bytes from 183.232.231.172 (183.232.231.172): icmp_seq=2 ttl=128 time=34.2 ms

^C

--- www.a.shifen.com ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 1004ms

rtt min/avg/max/mdev = 34.284/36.757/39.230/2.473 ms

2、创建openstack-windows镜像:

下载已经做好的的镜像:https://docs.openstack.org/image-guide/obtain-images.html#microsoft-windows

(1)安装软件包:

yum install -y qemu-kvm libvirt virt-install

systemctl enable libvirtd

systemctl start libvirtd

(2)上传windows镜像到/tmp/目录下;

(3)下载windows驱动插件:

cd /tmp/

wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso

(4)创建虚拟机磁盘:

qemu-img create -f qcow2 /tmp/ws2012r2.qcow2 15G

(5)创建虚拟机:

virt-install --virt-type kvm --name ws2012r2 --ram 1024 \

--network bridge=br0,model=virtio \

--disk /tmp/ws2012r2.qcow2,format=qcow2,device=disk,bus=virtio \

--disk /tmp/cn_windows_server_2012_r2_x64_dvd_2707961.iso,device=cdrom,bus=ide \

--disk /tmp/virtio-win-0.1.141.iso,device=cdrom,bus=ide \

--graphics vnc,listen=0.0.0.0 --noautoconsole \

--os-type=windows --os-variant=win2k12r2 \

--check path_in_use=off

提示:桥接网卡的建立方法参考文档'6、安装kvm虚拟机:';

(6)安装虚拟机和虚拟机调优:

参考文档'6.11、制作windows虚拟机';

虚拟机密码是:a123456A

(7)将PowerShell执行策略设置为不受限制:

因为Cloudbase-Init在实例引导期间需要运行脚本;

1)更改命令:

PS C:\Users\Administrator> Set-ExecutionPolicy Unrestricted

执行策略更改

执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 http://go.microsoft.com/fwlink/?LinkID=135170

中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略?

[Y] 是(Y) [N] 否(N) [S] 挂起(S) [?] 帮助 (默认值为“Y”): Y

2)查看更改:

PS C:\Users\Administrator> Get-ExecutionPolicy

Unrestricted

(8)安装Cloudbase-Init插件:

1)下载插件:

cd /tmp/

wget https://www.cloudbase.it/downloads/CloudbaseInitSetup_Stable_x64.msi

2)安装:

3)修改Cloud-Init的配置文件:

在C:\Program Files\Cloudbase Solutions\Cloudbase-init\conf\cloudbase-init.conf文件末尾添加如下内容:

netbios_host_name_compatibility=false

retry_count=40

retry_count_interval=5

first_logon_behaviour=no

[openstack]

add_metadata_private_ip_route=False


#使Windows系统的hostname长度支持到63个字符,默认最大时15个字符;

#获取metadata的重试次数;

#获取metadata的间隔时间,默认单位是秒;

#选择密码注入方式首次登录时不修改密码,系统默认强制用户修改登录密码;

#防止Windows添加默认路由导致metadata网络不通;

4)删除Cloudbase-Init安装包;

(9)将系统的网络设置为dhcp模式:

(10)初始化操作系统,使系统保持唯一的用户id:

1)注意:此操作会让操作系统保持唯一的id,尤其是域操作,必须保证域中操作系统用户id的唯一性;此

操作会删除用户的个性化操作,清除administrator的密码,登录时需要更改密码,激活的系统需要重新注册,本文使用了该方法;

如果操作系统不需要加入域,可以忽略此操作,系统不需再次注册,也不需要首次登录时修改administrator的密码;

查看当前系统用户的id的方法:在cmd窗口中输入'whoami /user'命令即可查看;

2)初始化:

清理回收站中的内容;

C:\Windows\System32\Sysprep.exe

(11)上传镜像到glance:

1)压缩镜像:

qemu-img convert -c -O qcow2 /tmp/ws2012r2.qcow2 /tmp/ws2012r2-model.qcow2

2)获得keystone管理员的权限:

. /scripts/admin-openstack.sh

3)上传:

openstack image create "ws2012r2-x86_64" \

--file /tmp/ws2012r2-model.qcow2 \

--disk-format qcow2 --container-format bare \

--public

(12)创建实例类型:

(13)创建实例:

(14)登录虚拟机:

1)通过dashboard控制台或者是vnc连接虚拟机;

2)修改administrator密码;

3)用修改后的面登录虚拟机;

4)查看系统的配置;

(15)验证:

[root@controller ~]# ping 10.0.0.77

PING 10.0.0.72 (10.0.0.72) 56(84) bytes of data.

64 bytes from 10.0.0.72: icmp_seq=1 ttl=128 time=9.53 ms

64 bytes from 10.0.0.72: icmp_seq=2 ttl=128 time=22.0 ms

64 bytes from 10.0.0.72: icmp_seq=3 ttl=128 time=17.8 ms

64 bytes from 10.0.0.72: icmp_seq=4 ttl=128 time=14.2 ms

^C

--- 10.0.0.72 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3006ms

rtt min/avg/max/mdev = 9.534/15.901/22.023/4.602 ms



猜你喜欢

转载自www.cnblogs.com/LiuChang-blog/p/12321188.html