一.KVM平台搭建以及虚拟机部署
二.在KVM虚拟机上创建镜像
- 实验环境
角色 | 系统 | IP地址 |
KVM宿主机 | centos7.6 | 192.168.43.102/24 |
KVM虚拟机 | centos7.6 | 192.168.43.131/24 |
控制节点 | centos7.7 | (NAT)192.168.43.201/24 (仅主机)192.168.100.10/24 |
注意:相关源与脚本,
链接:https://pan.baidu.com/s/1xnLoaWWgtHkr69JuyVH08w
提取码:wgmucentos镜像可去阿里云下载
-
确保kvm虚拟机能够ping通外网
[root@kvm ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:cc:77:47 brd ff:ff:ff:ff:ff:ff
inet 192.168.43.131/24 brd 192.168.43.255 scope global noprefixroute dynamic eth0
valid_lft 1731sec preferred_lft 1731sec
inet6 fe80::141b:1adf:8d0a:4221/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@kvm ~]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=128 time=145 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=128 time=145 ms
- 在kvm虚拟机上制作源
[root@kvm ~]# cd /etc/yum.repos.d/
[root@kvm yum.repos.d]# mkdir bak
[root@kvm yum.repos.d]# mv C* bak
[root@kvm yum.repos.d]# scp [email protected]:/opt/CentOS7-Base-163.repo ./
[email protected]'s password:
CentOS7-Base-163.repo 100% 1458 1.1MB/s 00:00
[root@kvm yum.repos.d]# ls
bak CentOS7-Base-163.repo
##清理原来的缓存、加载新的缓存
[root@kvm yum.repos.d]# yum clean all
已加载插件:fastestmirror
正在清理软件源: base extras updates
[root@kvm yum.repos.d]# yum makecache
- 关闭安全性功能,并且安装相关工具
[root@kvm ~]# systemctl stop firewalld
[root@kvm ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@kvm ~]# setenforce 0
[root@kvm ~]# vi /etc/sysconfig/selinux
##安装工具包
[root@kvm ~]# yum -y install vim net-tools bash-completion
- 上传centos-cloud-init.sh
[root@kvm ~]# scp [email protected]:/opt/centos-cloud-init.sh /
[email protected]'s password:
centos-cloud-init.sh 100% 1735 564.8KB/s 00:00
[root@kvm ~]# cd /
##改名
[root@kvm /]# mv centos-cloud-init.sh cloud-init.sh
##添加权限
[root@kvm /]# chmod 755 cloud-init.sh
[root@kvm /]# sed -i 's/\r//g' cloud-init.sh
##将该执行文件放到系统识别的地方
[root@kvm /]# mv cloud-init.sh /usr/bin
[root@kvm /]# echo ' /bin/bash /usr/bin/cloud-init.sh' >> /etc/rc.d/rc.local
[root@kvm ~]# vi /usr/bin/cloud-init.sh
#!/bin/bash
# /usr/bin/cloud-init.sh in centos/rhel
# append '/bin/sh /usr/bin/cloud-init.sh' to /etc/rc.local
STATUS_CODE=`curl -I -m 10 -o /dev/null -s -w %{http_code} http://169.254.169.254/latest`
if [ ! "$STATUS_CODE" -eq "200" ]; then
/bin/sleep 3
fi
# set the root password using user data
STATUS_CODE=`curl -I -m 10 -o /dev/null -s -w %{http_code} http://169.254.169.254/latest/user-data`
if [ "$STATUS_CODE" -eq "200" ]; then
PASS=`curl -m 10 -s http://169.254.169.254/latest/user-data | grep -Po '(?<=password": ")\S+(?="})'`
if [ "$PASS" != " " ]; then
echo $PASS | /usr/bin/passwd --stdin root
fi
fi
# get the user ssh key using the meta-data service
STATUS_CODE=`curl -I -m 10 -o /dev/null -s -w %{http_code} http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key`
if [ "$STATUS_CODE" -eq "200" ]; then
mkdir -p /root/.ssh
echo > /root/.ssh/authorized_keys
curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys
chmod 0700 /root/.ssh
chmod 0600 /root/.ssh/authorized_keys
fi
# set the hostname using the meta-data service
STATUS_CODE=`curl -I -m 10 -o /dev/null -s -w %{http_code} http://169.254.169.254/latest/meta-data/hostname`
if [ "$STATUS_CODE" -eq "200" ]; then
curl -f http://169.254.169.254/latest/meta-data/hostname > /tmp/metadata-hostname 2>/dev/null
if [ $? -eq 0 ]; then
TEMP_HOST=`cat /tmp/metadata-hostname | awk -F '.novalocal' '{print $1}'`
sed -i "s/^HOSTNAME=.*$/HOSTNAME=$TEMP_HOST/g" /etc/sysconfig/network
# centos7
#echo $TEMP_HOST > /etc/hostname
/bin/hostname $TEMP_HOST
rm -f /tmp/metadata-hostname
fi
fi
- 优化grub
vim /etc/sysconfig/grub
#添加
GRUB_CMDLINE_LINUX="crashkernel=auto console=ttyS0,115200n8 rhgb quiet"
#执行下列命令,使得参数有效
grub2-mkconfig -o /boot/grub2/grub.cfg
- 优化ssh服务
#修改dns权限
[root@kvm ~]# sed 's/.*UseDNS.*/UseDNS no/g' /etc/ssh/sshd_config -i
#允许远程ssh
[root@kvm ~]# sed 's/^#PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config -i
#优化ssh
[root@kvm ~]# sed 's/GSSAPIAuthentication.*/GSSAPIAuthentication no/g' /etc/ssh/sshd_config -i
- 测试镜像是否可用
#关闭kvm虚拟机
#重启kvm宿主机
#在kvm宿主机上执行
[root@localhost vm]# virsh start centos7.0
域 centos7.0 已开始
[root@localhost vm]# virsh console centos7.0
连接到域 centos7.0
换码符为 ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-957.el7.x86_64 on an x86_64
#查看vm虚拟机状态
[root@localhost vm]# virsh dominfo centos7.0
Id: -
名称: centos7.0
UUID: 589b8e45-6787-4f0f-870d-70406a845526
OS 类型: hvm
状态: 关闭
CPU: 1
最大内存: 1048576 KiB
使用的内存: 1048576 KiB
持久: 是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0
[root@localhost vm]#
三.上传镜像到CEPH并且应用
- 把镜像上传到control
[root@localhost vm]# ls
centos7.img
[root@localhost vm]# scp centos7.img [email protected]:/opt
The authenticity of host '192.168.43.201 (192.168.43.201)' can't be established.
ECDSA key fingerprint is SHA256:8RxPB+Ym5DhblOLKyhqtL6SQ+xhhnAAXC3n1Wx4kmfc.
ECDSA key fingerprint is MD5:1a:07:48:7f:89:19:22:b8:aa:99:d5:f4:9a:50:3e:0d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.43.201' (ECDSA) to the list of known hosts.
[email protected]'s password:
centos7.img centos7.img 100% 20GB 43.9MB/s 07:46
[root@localhost vm]#
- 在控制节点查看
[root@control opt]# ls
centos7.img openstack_rocky
centos7.qcow2 openstack_rocky.tar.gz
[root@control opt]#
- 把镜像上传到OpenStack平台
[root@control ~(keystone_admin)]# openstack image create "centos7" --file centos7.img --disk-format raw --container-format bare --public
注:也可以把镜像下载到本机,再通过OpenStack的web界面上传镜像,创建实例,具体方式参考:https://blog.csdn.net/qq_42761527/article/details/104616615