跳转至

基础-T版-02-镜像制作

kvm环境搭建

安装KVM相关软件

yum install qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install wget -y 

检查kvm内核是否被加载

[root@linux-node1~]# lsmod|grep kvm  #查看kvm内核是否被加载
kvm_intel             148081  0
kvm                   461126  1 kvm_intel

启动相关服务

systemctl enable libvirtd.service
systemctl start libvirtd.service

检查服务是否启动

systemctl status libvirtd.service       

提示:如果你的虚拟机硬盘比较小的话,会影响后面的操作,所以需要添加一块硬盘,如果你的虚拟机硬盘足够大的话,那么此步骤可以略过!进入系统将新添加的硬盘进行格式化

mkfs.xfs -f /dev/sdb
mkdir -p /data
mount /dev/sdb /data/
 echo "/dev/sdb                                  /data                   xfs     defaults        0 0" >>/etc/fstab ; cat /etc/fstab |grep data

提示:如果是虚拟机硬盘不够的情况使用此方法,如果够请略过此方法!

centos7.9

镜像制作

CentOS image(官网文档参考资料) https://docs.openstack.org/image-guide/centos-image.html

公有镜像的获取地址:https://cloud.centos.org/centos/7/images/

创建虚拟磁盘

创建qcow2格式的虚拟磁盘(使用多少占用多少)二选一
mkdir -p /data/kvm-data/linux-node-moban/
qemu-img create -f qcow2 /data/kvm-data/linux-node-moban/linux-node-moban.qcow2 100G

创建raw格式的虚拟磁盘(会立刻占用所有空间容量)二选一
mkdir -p /data/kvm-data/linux-node-moban/
qemu-img create -f raw /data/kvm-data/linux-node-moban/linux-node-moban.raw 10G

下载centos7.9的iso镜像

cd /tmp
wget https://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso

备用下载:
wget https://mirrors.cloud.tencent.com/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso

创建一台KVM虚拟机(通过iso镜像创建虚拟机)

mkdir -p /data/kvm-data/linux-node-moban/
virt-install --name linux-node-moban --virt-type kvm --vcpus 2 --ram 2048 \
--cdrom=/tmp/CentOS-7-x86_64-Minimal-2009.iso  \
--disk path=/data/kvm-data/linux-node-moban/linux-node-moban.qcow2  \
--channel  unix,path=/var/lib/libvirt/qemu/linux-node-moban.agent,mode=bind,target_type=virtio,name=org.qemu.guest_agent.0   \
--network network=default  \
--graphics vnc,listen=0.0.0.0  \
--noautoconsole

配置VNC客户端连接KVM虚拟机

打开一个VNC客户端,输入192.168.56.111:5900(第一个默认5900,第二个5901,以此类推)连接虚拟机里面建立的KVM虚拟机,安装CentOS7的过程,此处不在演示如何安装

image-20211029213403720

操作系统安装:

为了统一环境,保证实验的通用性,建议将网卡名称设置为 eth*,不使用 CentOS7 默

认的网卡命名规则。所以需要在安装的时候,增加内核参数。

image-20211029213419311

点击 Tab,打开 kernel 启动选项,增加 net.ifnames=0 biosdevname=0 回车即可安装

安装CentOS7,在启动前修改内核让网卡为eth0,如图1-2

image-20211029213428196

以下为详细的步骤:

virsh destroy linux-node-moban  #强制关闭虚拟机
virsh undefine linux-node-moban #删除虚拟机  #如何制作失败重新创建虚拟机即可

上面的图是正在安装系统的过程!对于安装成功的系统我们需要重启启动一下KVM虚拟机

[root@linux-node1 ~]# virsh start linux-node-moban
Domain linux-node-moban started
[root@linux-node1 ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 6     linux-node-moban                running

1.修改IP地址为DHCP自动获取IP

cat >/etc/sysconfig/network-scripts/ifcfg-eth0<<EOF
BOOTPROTO=dhcp
DEVICE=eth0
ONBOOT=yes
EOF

2.重启网卡使其配置生效

systemctl restart network

3.安装配置常见的YUM源安装常用的软件包。

rm -f /etc/yum.repos.d/*.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum repolist

安装Linux常用软件

yum install -y net-tools vim lrzsz tree screen lsof tcpdump bash-completion bash-completion-extras wget 

4.关闭 NetworkManager 和防火墙

systemctl disable firewalld && systemctl stop firewalld
systemctl disable NetworkManager && systemctl stop NetworkManager

5.关闭并确认 SELinux 处于关闭状态

sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config && grep 'SELINUX=disabled' /etc/selinux/config
setenforce 0
getenforce

6.开启虚拟机支持virsh console功能

systemctl start serial-getty@ttyS0.service
systemctl enable serial-getty@ttyS0.service

7.安装部署Kvm QGA(Qemu Guest Agent)

yum -y install qemu-guest-agent --enablerepo=C7.4* 
systemctl enable qemu-guest-agent
systemctl start qemu-guest-agent

vi /etc/sysconfig/qemu-ga 
# 注释如下行
#BLACKLIST_RPC=guest-file-open,guest-file-close,guest-file-read,guest-file-write,guest-file-seek,guest-file-flush,guest-exec,guest-exec-status
systemctl restart qemu-guest-agent

8.优化ssh服务

sed -i 's%#UseDNS yes%UseDNS no%g' /etc/ssh/sshd_config
systemctl restart sshd

9.关闭postfix服务

systemctl stop postfix
systemctl disable postfix

10.配置dns服务

cat >/etc/resolv.conf<<EOF
nameserver 114.114.114.114
EOF

11.配置ntp服务

yum -y install chrony ntp
vi /etc/chrony.conf
server ntp1.aliyun.com iburst

systemctl enable chronyd.service
systemctl start chronyd.service

12.安装 ACPI 服务,启动后,你可能需要手动配置你的虚拟机的网络。为了让虚拟化层能重启和关闭虚拟机,必须在虚拟机内安装并运行 acpid 服务。

在 CentOS虚拟机内运行以下命令安装 ACPI 服务并配置为系统启动时自动启动。

yum install acpid -y
systemctl enable acpid

配置获取metadata虚拟机在启动的时候需要和元数据服务交互以便完成几个任务,例如,虚拟机必须获取ssh公钥以及运行用户数据脚本。确保虚拟机能完成这些任务,使用以下几个方法之一:安装从 Ubuntu cloud-init 移植过来的cloud-init RPM包,这也是推荐的方法。

13.修改 /etc/rc.local 文件从元数据服务获取信息。使用 cloud-init 获取公钥 cloud-init 包自动从元数据服务获取公钥并保存到账户,你可以在 CentOS虚拟机添加 EPEL 安装源来安装 cloud-init 包。

yum install cloud-init -y

14.禁用zeroconf路由(要让虚拟机访问元数据服务)

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

配置console,使nova console-log命令生效

15.在/etc/default/grub文件中最后添加一行:

vi /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0"
然后执行:
grub2-mkconfig -o /boot/grub2/grub.cfg

清除MAC地址相关信息:

16.操作系统会在/etc/sysconfig/network-scripts/ifcfg-eth0和/etc/udev/rules.d/70-persistent-net.rules 这类文件记录下网卡MAC地址,但是,虚拟机的网卡MAC地址在每次虚拟机创建的时候都会不同,因此这些信息必须从配置文件删除掉。

Centos7镜像时,cloud-init安装版本为 0.7.2 , 安装配置好后,glance上传完成后使用该镜像创建虚机,通过SSH登陆该虚机就出现了问题,提示Permission denied (publickey,gssapi-keyex,gssapi-with-mic) 就是root用户名输入回车后发现只能用public key公钥登陆,而不能用密码认证登陆。

17.进vnc控制台发现在/etc/ssh/sshd_config发现“PasswordAuthentication no” ,重新打开镜像发现在/etc/ssh/sshd_config发现“PasswordAuthentication yes” 然后后上传到OpenStack中,创建虚机,发现root还是没法用密码认证登陆,再次查看/etc/ssh/sshd_config,竟然发现“PasswordAuthentication no”

原因是cloud-init搞的鬼,在安装好cloud-init后,会生成/etc/cloud/cloud.cfg配置文件,找到该文件,就在配置文件置顶的前五行内,就赫然显示其配置限制了登陆方式:

vi /etc/cloud/cloud.cfg
users:
 - defaults
disable_root:0
ssh_pwauth:  1

cloud-init默认配置是,ssh_pwauth 为 0 是关闭状态,就是禁止password认证。重新修改镜像,修改为 ssh_pwauth: 1 ,重新打镜像ssh远程登陆,root可以用密码正常登陆。 找到sshd_config配置文件,发现里面多了“PasswordAuthentication yes”,看来的确是cloud-init引起的

12.开始清理服务器日志和命令记录

> /var/log/messages
> /var/log/secure 
> /var/log/lastlog 
> /var/log/yum.log
> /var/log/wtmp
> /var/log/boot.log
> /var/log/maillog
> /var/log/dmesg
> /var/log/maillog
> /var/log/cron
> /var/log/grubby_prune_debug
> /root/.bash_history
history -c

可以设置虚拟机的密码,测试gqa功能是否正常

virsh set-user-password <domain>  <user> <password>   #kvm

virsh set-user-password linux-node-moban  --user root --password 123

将模版虚拟机进行关机

virsh shutdown linux-node-moban

复制模版文件到指定位置

\cp /data/kvm-data/linux-node-moban/linux-node-moban.qcow2 /data/centos79200920220510.qcow2

将镜像复制到openstack控制节点

scp /data/centos79200920220510.qcow2 192.168.1.216:/root/

上传镜像

开始上传镜像到openstack集群

使用已经做好的镜像
source /root/admin-openrc
 glance image-create --name "centos79200920220510" \
  --file /var/lib/glance/images/centos79200920220510.qcow2 \
  --disk-format qcow2 --container-format bare \
  --property hw_qemu_guest_agent=yes \
  --property os_type="linux" \
  --visibility public \
  --progress
openstack image list

使用自己制作的镜像
source /root/admin-openrc
 glance image-create --name "linux-node-moban" \
  --file /var/lib/glance/images/linux-node-moban.qcow2 \
  --disk-format qcow2 --container-format bare \
  --property hw_qemu_guest_agent=yes \
  --property os_type="linux" \
  --visibility public \
  --progress
openstack image list

创建虚机

创建flavor规格

openstack flavor create --id 1 --vcpus 2 --ram 2048  --disk 100 2C2G

开始创建虚拟机进行测试

使用已经做好的镜像
source /root/demo-openrc 
openstack image list
openstack network list
source /root/demo-openrc 
openstack server create --flavor 2C2G --image centos79200920220510 \
  --nic net-id=8547b120-8083-432f-a5f9-8ea7beeda429 --security-group default \
  --key-name mykey centos79001

使用自己制作的镜像
source /root/demo-openrc 
nova delete centos79001
openstack image list
openstack network list
source /root/demo-openrc 
openstack server create --flavor 2C2G --image linux-node-moban \
  --nic net-id=8547b120-8083-432f-a5f9-8ea7beeda429 --security-group default \
  --key-name mykey centos79001

检查您的实例的状态:

openstack server list

获取实例的虚拟网络计算 (VNC) 会话 URL 并从 Web 浏览器访问它:

openstack console url show  centos79001

在提供者虚拟网络上创建一个浮动 IP 地址:

openstack floating ip create provider

将浮动 IP 地址与实例关联:

openstack server add floating ip centos79001 192.168.57.167

检查您的浮动 IP 地址的状态

openstack server list

通过控制器节点或提供商物理网络上的任何主机的浮动 IP 地址验证与实例的连接:

ping -c 4 203.0.113.104

使用 SSH 从控制器节点或提供商物理网络上的任何主机访问您的实例:

ssh cirros@203.0.113.104

重设密码

我们可以测试修改虚拟机的密码

nova set-password centos79001 

获取虚拟机密码

nova get-password centos79001  ~/.ssh/id_rsa

通过vnc验证密码是否修改成功

windows2012

镜像制作

Microsoft Windows image(官网文档参考资料) https://docs.openstack.org/image-guide/windows-image.html

创建虚拟磁盘

创建qcow2格式的虚拟磁盘(使用多少占用多少)
mkdir -p /data/kvm-data/windows-node-moban/
qemu-img create -f qcow2 /data/kvm-data/windows-node-moban/windwos-node-moban.qcow2 100G

下载windows2012的iso镜像

windows镜像下载网站:https://msdn.itellyou.cn/

创建一台windows KVM虚拟机(通过iso镜像创建虚拟机)

virt-install --name windows-node-moban --ram 2048 --vcpus 2 \
  --network network=default,model=virtio \
  --disk path=/data/kvm-data/windows-node-moban/windwos-node-moban.qcow2,format=qcow2,device=disk,bus=virtio \
  --disk path=/tmp/cn_windows_server_2012_r2_x64_dvd_2707961.iso,device=cdrom,perms=ro \
  --disk path=/tmp/2k12-virtio-0.1.215.iso,device=cdrom,perms=ro \
  --graphics vnc,listen=0.0.0.0 --noautoconsole \
  --channel unix,path=/var/lib/libvirt/qemu/windows-node-moban.agent,mode=bind,target_type=virtio,name=org.qemu.guest_agent.0 \
  --os-type windows --os-variant win2k12 

配置VNC客户端连接KVM虚拟机

virsh destroy windows-node-moban    #强制关闭虚拟机
virsh undefine windows-node-moban   #删除虚拟机  #如何制作失败重新创建虚拟机即可

设置nginx文件中转站

yum -y install nginx

vi /etc/nginx/nginx.conf
http {
    autoindex on;
    autoindex_exact_size on;
    autoindex_localtime on;
        server {
             root         /data/mirrors/;


rm -f  /usr/share/nginx/html/index.html 
nginx -t 
systemctl restart nginx

cd /tmp
\cp CloudbaseInitSetup_1_1_2_x64.msi QEMU.zip /usr/share/nginx/html/

windows2012激活码

78NJB-CB3WX-GWPCM-VMKG7-94QWW

https://www.jiaochengzhijia.com/win10/121070.html


按下windows+x打开快捷菜单,选择命令提示符(管理员)
  slmgr /ipk D2N9P-3P6X9-2R39C-7RTCD-MDVJX
  slmgr /skms kms.03k.org
  slmgr /ato

安装谷歌浏览器

安装好压软件

关闭windows2012防火墙

为了保证创建的新虚拟机可以自定义配置(例如修改虚拟机密码、系统盘自动扩容),建议您安装Cloudbase-init工具。

不安装Cloudbase-init工具,将无法对虚拟机进行自定义配置,只能使用镜像原有密码登录虚拟机。

image-20220510164142385

接受用户协议—Next

image-20220510164150584

Next

image-20220510164159167

Next(注意username需要修改为Administrator)

image-20220510164213052

Next

image-20220510164222338

Finish

image-20220510164232205

下载安装qga工具将QEMU文件夹(QGA安装包)解压,并上传至windows虚拟机C:\Program Files目录下,如下图示:

image-20220510164022646

进入QEMU目录→Guest-Agent目录中,右键install安装程序-以管理员身份运行

image-20220510164041520

程序会自动完成ctcm的安装

为拥有更好的镜像体验,建议您根据此章节对您的windows镜像进行一些优化配置。

gpedit.msc

在"本地组策略编辑器"对话框中打开 "计算机配置→windows设置→安全设置→本地策略→审核策略",将策略设置成下图

image-20220510164336471

在"本地组策略编辑器"对话框中打开 "计算机配置→windows设置→安全设置→账户策略–>密码策略" 将密码长度最小值设为8,密码最长使用期限改为0(不过期),如下图:

image-20220510164352829

打开控制面板-系统和安全,按照以下图示进行操作

image-20220510164416644

选择系统和安全

image-20220510164428093

点击更改计划设置

image-20220510164440860

选择从不 然后保存修改

测试是否可以修改密码

virsh set-user-password  windows-node-moban Administrator P@sswd123

上传镜像

开始上传镜像到openstack集群

使用已经做好的镜像
source /root/admin-openrc
 glance image-create --name "windows201220220510" \
  --file /var/lib/glance/images/windows201220220510.qcow2 \
  --disk-format qcow2 --container-format bare \
  --property os_type="windows" \
  --property hw_qemu_guest_agent=yes \
  --visibility public \
  --progress
openstack image list

使用自己制作的镜像
source /root/admin-openrc
 glance image-create --name "windwos-node-moban" \
  --file /var/lib/glance/images/windwos-node-moban.qcow2 \
  --disk-format qcow2 --container-format bare \
  --property os_type="windows" \
  --property hw_qemu_guest_agent=yes \
  --visibility public \
  --progress
openstack image list


openstack image set --property os_type=windows 19fc500b-635d-4375-ac93-e09831129d0d 
openstack image show 19fc500b-635d-4375-ac93-e09831129d0d

创建虚机

创建flavor规格

source /root/admin-openrc
openstack flavor create --id 1 --vcpus 2 --ram 2048  --disk 100 2C2G

开始创建虚拟机进行测试

source /root/demo-openrc 
openstack image list
openstack network list

使用已经做好的镜像
source /root/demo-openrc 
openstack server create --flavor 2C2G --image windwos-node-moban \
  --nic net-id=8547b120-8083-432f-a5f9-8ea7beeda429 --security-group default \
  --key-name mykey windows2012001

使用自己制作的镜像
source /root/demo-openrc 
openstack server create --flavor 2C2G --image windows201220220510 \
  --nic net-id=8547b120-8083-432f-a5f9-8ea7beeda429 --security-group default \
  --key-name mykey windows2012001

检查您的实例的状态:

openstack server list

获取实例的虚拟网络计算 (VNC) 会话 URL 并从 Web 浏览器访问它:

openstack console url show  windows2012001

在提供者虚拟网络上创建一个浮动 IP 地址:

openstack floating ip create provider

将浮动 IP 地址与实例关联:

openstack server add floating ip windows2012001 192.168.57.167

检查您的浮动 IP 地址的状态

openstack server list

允许安全外壳 (RDP) 访问:

openstack security group rule create --proto tcp --dst-port 3389 default

重设密码

修改虚拟机的密码

openstack server set --root-password  windows2012001

如何获取虚拟机的密码

[root@controller ~]# nova get-password  windows2012001 ~/.ssh/id_rsa
bX5sUdWHTIv6uHzV21eG

https://raymii.org/s/tutorials/OpenStack_nova_get_-_password_set_-_password_and_post_encrypted_password_to_metadata_service.html

ubuntu2004

https://docs.openstack.org/image-guide/obtain-images.html

公有镜像的获取地址:https://cloud-images.ubuntu.com/minimal/releases/focal/release/

经验篇02-手工制作OpenStack的Ubuntu16.04镜像

https://kkutysllb.cn/2020/07/09/%E7%BB%8F%E9%AA%8C%E7%AF%8702-%E6%89%8B%E5%B7%A5%E5%88%B6%E4%BD%9COpenStack%E7%9A%84Ubuntu16-04%E9%95%9C%E5%83%8F/

镜像制作

创建虚拟磁盘

创建qcow2格式的虚拟磁盘(使用多少占用多少)二选一
mkdir -p /data/kvm-data/ubuntu-node-moban/
qemu-img create -f qcow2 /data/kvm-data/ubuntu-node-moban/ubuntu-node-moban.qcow2 100G

下载centos7.9的iso镜像

cd /tmp
wget https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/20.04/ubuntu-20.04.4-live-server-amd64.iso

创建一台KVM虚拟机(通过iso镜像创建虚拟机)

virt-install --name ubuntu-node-moban --virt-type kvm --vcpus 2 --ram 2048 \
--cdrom=/tmp/ubuntu-20.04.4-live-server-amd64.iso  \
--disk path=/data/kvm-data/ubuntu-node-moban/ubuntu-node-moban.qcow2  \
--channel unix,path=/var/lib/libvirt/qemu/ubuntu-node-moban.agent,mode=bind,target_type=virtio,name=org.qemu.guest_agent.0  \
--network network=default  \
--graphics vnc,listen=0.0.0.0 --noautoconsole

配置VNC客户端连接KVM虚拟机

打开一个VNC客户端,输入192.168.56.111:5900(第一个默认5900,第二个5901,以此类推)连接虚拟机里面建立的KVM虚拟机,安装CentOS7的过程,此处不在演示如何安装

image-20211029213403720

操作系统安装:

为了统一环境,保证实验的通用性,建议将网卡名称设置为 eth*,不使用 CentOS7 默

认的网卡命名规则。所以需要在安装的时候,增加内核参数。

选择语言

image-20220511161632398

设置键盘

image-20220516140838599

配置动态IP地址

image-20220516140858220

table 切换到 proxy address

这个可以配置阿里云(http://mirrors.aliyun.com/ubuntu/),下载加速 或者默认…

image-20220516140944457

回车设置镜像源地址,

image-20220516141004553

配置磁盘布 使用整个磁盘:此方法将擦除整个硬盘并自动对驱动器进行分区。推荐给新手 如果选择此选项,则可以选择设置LVM并使用LUKS加密LVM配置 自定义存储布局:手动设置他们选择的分

image-20220516141025875

查看当前文件系统配置 继续,或返回 并根据需要重新配置存储。

image-20220516141042890

选择“继续”,开始安装

image-20220516141108996

输入服务器系统的详细信息, 设置一个用户 ,名称,服务器名称,用户名及其密码

image-20220516141126853

留空,下一步; 如果你想注册这个系统,请在这里输入你的Ubuntu Advantage令牌。否则,将此留空。

image-20220516141146650

选择安装openSSH服务器 习惯用第三方工具连接,所以选择。按ENTER继续

image-20220516141201837

下次一定装… 选择适用于您的Ubuntu系统的可用特性软件包列表。它们将与Ubuntu服务器安装一起安装。使用SPACE选择或取消选择它们。按ENTER查看快照应用程序的更多详细信息。这是可选的,您以后也可以这样做。

image-20220516141219611

安装中…

image-20220516141238420

安装好了,重启

image-20220516141259985

安装好系统后,需要进行配置才能作为glance镜像使用。在上面启动虚拟机后,首先通过如下指令配置root密码,

passwd

然后,切换到root用户。如果云主机需要支持root ssh远程登录,需要开启root远程ssh登录功能,修改配置文件/etc/ssh/sshd_config并修改PermitRootLogin值为yes,重启ssh服务生效:

root@ubuntu:~# vi /etc/ssh/sshd_config
PermitRootLogin yes

/etc/init.d/ssh restart

需要注意:

  • 生产环境不建议开启密码登录功能,使用密钥登录更安全。
  • 生产环境不建议开启root远程登录。

更新国内源(阿里源)

cp /etc/apt/sources.list /etc/apt/sources.list_bak
cat >/etc/apt/sources.list<<EOF
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
EOF

更新源

apt-get update

安装acpid软件包,并设置开机启动服务 acpid是一个用户空间的服务进程, 用来处理电源相关事件,比如将kernel中的电源事件转发给应用程序,告诉应用程序安全的退出,防止应用程序异常退出导致数据损坏。libvirt可以通过向guest虚拟机发送acpid事件触发电源操作,使虚拟机安全关机、重启等操作,相对于强制执行关闭电源操作更安全。通过acpid事件发送开关机信号即我们经常所说的软重启或者软关机。用户执行重启或者关机操作时,OpenStack会首先尝试调用libvirt的shutdown方法,即软关机。当软关机执行失败或者超时(默认120秒),则会调动libvirt的destroy方法,即强制关机,因此如果虚拟机关机或者重启很慢,很可能是acpid没有正常运行。为了使虚拟机进程安全退出,减少数据损坏风险,尽量使用软操作,硬操作可能导致程序崩溃或者数据丢失。

apt install -y acpid 
service acpid start

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

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

通过以下命令,重新引导Grub启动文件

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

安装cloud-init

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

apt install -y cloud-init 
service cloud-init start

注意:cloud-init的配置文件默认不允许通过root用户登录,且不允许通过用户名/密码的方式登录,只允许通过秘钥方式。因此,可以通过修改配置文件/etc/cloud-init/cloud.cfg如下选项改变上述情况:

20.04版本 配置文件路径: /etc/cloud/cloud.cfg

disable_root: false
ssh_pwauth:  true

同时,在modules下添加:- resolv-conf选项

- resolv-conf

注意,与CentOS镜像制作不同的是,需要在/etc/cloud/cloud.cfg.d/90_dpkg.cfg配置只支持OpenStack镜像,如下:

root@ubuntu:~# vi /etc/cloud/cloud.cfg.d/90_dpkg.cfg
datasource_list: [ openstack ]

安装qga工具

apt-get install qemu-guest-agent
/etc/init.d/qemu-guest-agent start

验证ubuntu镜像修改密码的功能

[root@linux-bkce-node014 ~]# virsh set-user-password ubuntu-node-moban --user ubuntu --password 123456
Password set successfully for chris in ubuntu-node-moban
[root@linux-bkce-node014 ~]# virsh set-user-password ubuntu-node-moban --user root --password 123456
Password set successfully for root in ubuntu-node-moban

关闭虚拟机

virsh shutdown ubuntu-node-moban

上传镜像

开始上传镜像到openstack集群

使用已经做好的镜像
source /root/admin-openrc
 glance image-create --name "ubuntu200420220510" \
  --file /var/lib/glance/images/ubuntu200420220510.qcow2 \
  --disk-format qcow2 --container-format bare \
  --property os_type="linux" \
  --property hw_qemu_guest_agent=yes \
  --visibility public \
  --progress

openstack image list  

使用自己制作的镜像
source /root/admin-openrc
 glance image-create --name "ubuntu-node-moban" \
  --file /var/lib/glance/images/ubuntu-node-moban.qcow2 \
  --disk-format qcow2 --container-format bare \
  --property os_type="linux" \
  --property hw_qemu_guest_agent=yes \
  --visibility public \
  --progress

openstack image list  


openstack image set --property os_type=windows 19fc500b-635d-4375-ac93-e09831129d0d 
openstack image show 19fc500b-635d-4375-ac93-e09831129d0d

创建虚机

开始创建虚拟机进行测试

source /root/demo-openrc 
openstack image list
openstack network list

使用已经做好的镜像
source /root/demo-openrc 
openstack server create --flavor 2C2G --image ubuntu200420220510 \
  --nic net-id=8547b120-8083-432f-a5f9-8ea7beeda429 --security-group default \
  --key-name mykey ubuntu2004001

使用自己制作的镜像
source /root/demo-openrc 
openstack server create --flavor 2C2G --image ubuntu-node-moban \
  --nic net-id=8547b120-8083-432f-a5f9-8ea7beeda429 --security-group default \
  --key-name mykey ubuntu2004001

检查您的实例的状态:

openstack server list

获取实例的虚拟网络计算 (VNC) 会话 URL 并从 Web 浏览器访问它:

openstack console url show  ubuntu2004001

在提供者虚拟网络上创建一个浮动 IP 地址:

openstack floating ip create provider

将浮动 IP 地址与实例关联:

openstack server add floating ip ubuntu2004001 203.0.113.109

检查您的浮动 IP 地址的状态

openstack server list

重设密码

修改虚拟机的密码

openstack server set --root-password  ubuntu2004001

如何获取虚拟机的密码

[root@controller ~]# nova get-password  ubuntu2004001 ~/.ssh/id_rsa
bX5sUdWHTIv6uHzV21eG

其他系统

上传镜像

清理内存

echo "3">/proc/sys/vm/drop_caches

开始上传镜像到openstack集群

qemu-img convert -f raw -O qcow2 CS76-DOCKER-20220216.raw CS76-DOCKER-20220216.qcow2


tmux new -s test01
unzip CS76-DOCKER-20220216.raw.zip

source /root/admin-openrc
glance image-create --name "k8s-centos76v1" \
  --file /var/lib/glance/images/CS76-DOCKER-20220216.raw \
  --disk-format qcow2 --container-format bare \
  --property hw_qemu_guest_agent=yes \
  --property os_type="linux" \
  --visibility public \
  --progress

source /root/admin-openrc
ctyunos-public-image.qcow2
glance image-create --name "k8s-ctyunos20v1" \
  --file /var/lib/glance/images/ctyunos-public-image.qcow2 \
  --disk-format qcow2 --container-format bare \
  --property hw_qemu_guest_agent=yes \
  --property os_type="linux" \
  --visibility public \
  --progress


openstack image list

创建虚机

创建flavor规格

openstack flavor create --id 10 --vcpus 4 --ram 8192  --disk 150 4C8G

开始创建虚拟机进行测试

使用自己制作的镜像
openstack image list
openstack network list
source /root/demo-openrc 
openstack server create --flavor 4C8G --image k8s-centos76v1 \
  --nic net-id=667c3eb8-3162-4794-966d-0b9d591df566 --security-group 342104a8-b7a9-47a9-910e-11cf4d1d0e26 \
  --key-name mykey k8s-centos76-001

source /root/demo-openrc 
openstack server create --flavor 4C8G --image k8s-ctyunos20v1 \
  --nic net-id=667c3eb8-3162-4794-966d-0b9d591df566 --security-group 342104a8-b7a9-47a9-910e-11cf4d1d0e26 \
  --key-name mykey k8s-ctyunos20-001

检查您的实例的状态:

openstack server list

获取实例的虚拟网络计算 (VNC) 会话 URL 并从 Web 浏览器访问它:

openstack console url show  centos79001

在提供者虚拟网络上创建一个浮动 IP 地址:

openstack floating ip create provider

将浮动 IP 地址与实例关联:

openstack server add floating ip centos79001 192.168.57.167

检查您的浮动 IP 地址的状态

openstack server list

通过控制器节点或提供商物理网络上的任何主机的浮动 IP 地址验证与实例的连接:

ping -c 4 203.0.113.104

使用 SSH 从控制器节点或提供商物理网络上的任何主机访问您的实例:

ssh cirros@203.0.113.104