OpenStack镜像制作要考虑的地方

准备一台VMware Workstation上的centos系统虚拟机, 开启VT和CPU性能计数器

CentOS-7-x86_64-Minimal-2003.iso 镜像为最小版的centos

Minimal是官方最小的centos镜像文件,也可以使用其他镜像正常大小的iso文件

1. 安装kvm,并启动libvirtd并设置开机启动

确定计算节点是否支持虚拟机硬件加速(不为0)

egrep -c '(vmx|svm)' /proc/cpuinfo

安装kvm,并启动libvirtd并设置开机启动

yum install libvirt virt-install qemu-kvm -y 
systemctl start libvirtd && systemctl enable libvirtd

#使用ifconfig命令,可以看到多出一个virbr0的网卡

创建一个目录,用于存放镜像,并上传CentOS7的镜像到该目录下

mkdir -p /opt/image

#上传镜像,上传完成后开始创建虚拟机;使用centos最小版镜像
wget -c http://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-2003.iso -P /opt/image

创建一个5G的虚拟机硬盘

根据镜像大小决定,如果后续有转换raw格式的需求,可能会导致镜像占用空间为虚拟硬盘大小
raw镜像虽说性能很好,但是不具备伸缩和快照功能,虚机的创建和迁移都要花费大量时间,不适用于线上实际云环境的使用。建议采用qcow2。

qemu-img create -f qcow2 /tmp/centos7.qcow2 5G

#这里的大小不是占用你当前磁盘的大小而是将要制作的云镜像的系统盘大小

2. 创建虚拟机

virt-install --virt-type kvm \
--os-type=linux \
--os-variant centos7.0 \
--name centos7 \
--ram 1024 \
--disk /tmp/centos7.qcow2,format=qcow2 \
--cdrom /opt/image/CentOS-7-x86_64-Minimal-2003.iso \
--network network=default \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole 

#参数含义请百度

用VNC连接
VNC Viewer远程桌面下载链接

[root@kvm image]# netstat -lntup|grep 5900
tcp    0    0 0.0.0.0:5900        0.0.0.0:*        LISTEN     25986/qemu-kvm

3. 系统安装步骤简单提示

修改网卡名称为eth

选择第一个 Install CentOS 7
敲Tab键出现字时 , 接着输入 net.ifnames=0 biosdevname=0 ,然后回车

选择上海时间

分区,将所有容量都给根分区,且只分一个根分区

完成配置,设置root密码

安装完成后点击reboot,系统会关机,并不会重启,这时候在宿主机上可以通过命令查看刚才已经建立的虚拟机

[root@kvm image]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     centos7                        shut off

#启动虚拟机
[root@kvm image]# virsh start centos7
Domain centos7 started

4. 连接虚拟机进行配置

启动后再次通过VNC工具连接上去,进行IP配置,系统优化,安装常用软件,配置yum源,做云镜像的初始化功能等工作

新建的虚拟机上操作:

通过宿主机进行连接

安装常用软件;配置yum源

yum install -y wget 
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

yum install -y mlocate lrzsz tree vim nc nmap bash-completion bash-completion-extras cowsay sl htop iotop iftop lsof net-tools sysstat unzip bc psmisc ntpdate wc telnet-server bind-utils

关闭防火墙,关闭selinux

setenforce 0
sed -i 's#enforcing#disabled#' /etc/sysconfig/selinux
systemctl stop firewalld && systemctl disable firewalld

sshd优化修改sshd.config文件

[root@centos7 ~]# vim /etc/ssh/sshd_config
GSSAPIAuthentication yes
UseDNS no

编辑网络后重启网卡
定制的镜像中 网卡配置文件要配置dhcp,保证openstack创建实例时分配的ip可以获取到。
此图中配置有多余的,将第三行配置DEFROUTE=yes删除掉。不然会导致使用此镜像创建 实例后获取不到IP

TYPE=Ethernet
BOOTPROTO=dhcp
NAME=eth0
DEVICE=eth0
ONBOOT=yes

此图为修改过后的镜像网卡配置文件


如果有需求安装图形化界面请看下面链接
https://www.jianshu.com/p/bdd29c1e1dd9

5. cloud-init初始化的使用与配置※

上篇文章:云服务器cloud-init初始化工具的使用与配置
cloud-init官方文档
在云平台中,创建云主机的时候希望能够对主机进行一些初始化操作,如配置ip,主机名,密码,ssh登录等。openstack上可以使用cloud-init进行初始化。

建议阅读cloud-init官方文档,读几遍,确保知道在配置些什么,以及这些配置项是如何生效的,模块频率是怎样。

要实现在云主机中的初始化配置,首先就要让云主机获取到用户输入的配置数据,在cloud-init中以cdrom方式读取,即openstack将用户数据打包成iso挂载给云主机,云主机启动后内部的cloud-init默认从cdrom里面读取数据,然后进行初始化操作。

Users and Groups模块的模块频率是每个实例执行一次,也就是说制作的镜像起了云主机之后,再修改这个模块配置重启机器是不再生效了。
与Users and Groups模块的模块频率相似的还有Write_files、Set Passwords模块。
Bootcmd模块的模块频率是每个实例可以执行多次,也就是说,起了云主机之后,再修改这个模块配置重启机器之后也会生效。
与Bootcmd模块的模块频率相似的还有Runcmd。

设置完成后关闭虚拟机,准备下一阶段

history -c
shutdown -h now

6. 上传centos镜像到openstack

如果对接ceph存储。可以把qcow2格式转换为raw格式的镜像再上传
Ceph缺点是不支持从qcow2格式的镜像引导,所以需要转换raw格式的镜像

[root@kvm image]# ll -h /tmp/centos7.qcow2 
-rw-r--r--. 1 root root 1.6G May 20 17:27 /tmp/centos7.qcow2

#将镜像从qcow2格式转换为raw格式;并下载到本地 【可选】
[root@kvm image]# qemu-img convert -f qcow2 -O raw /tmp/centos7.qcow2 CentOS-7-x86_64-Minimal-2003.raw

将镜像上传到openstack的glance节点上(在controller节点上)

openstack image create --container-format bare --disk-format raw --file /server/tools/CentOS-7-x86_64-Minimal-2003.raw --unprotected --public CentOS-7-x86_64-Minimal-2003

#从QEMU中检索块设备映像信息
[root@controller tools]# qemu-img info CentOS-7-x86_64-Minimal-2003.raw
image: CentOS-7-x86_64-Minimal-2003.raw
file format: raw
virtual size: 5.0G (5368709120 bytes)
disk size: 5.0G

在ceph上查看镜像和glance池的数据

rbd ls images
e7439786-1143-43fe-a509-f84d666c3fbf

rbd info images/e7439786-1143-43fe-a509-f84d666c3fbf

注意: 登录后修改主机名及IP,避免生产中重复,另外可以直接在创建镜像的时候,写一个脚本,也可以在镜像中配置好cloud-init初始化服务;在新建云主机完成后,直接更改主机名和IP地址
配置租户自用网络,添加了一个浮动IP

[root@controller ~]# openstack server list
+--------------------------------------+------------+--------+----------------------------------------+-------+--------+
| ID                                   | Name       | Status | Networks                               | Image | Flavor |
+--------------------------------------+------------+--------+----------------------------------------+-------+--------+
| e5891fc5-63ca-43a8-bb92-bb512c1ec7e3 | K8s-master | ACTIVE | selfservice=172.18.1.33, 192.168.0.205 |       | CentOS |
+--------------------------------------+------------+--------+----------------------------------------+-------+--------+

#镜像中的cloud-init已经配置了controller节点的ssh免秘钥登陆
[root@controller ~]# ssh root@192.168.0.205
Last login: Fri May 21 17:17:24 2020 from 192.168.0.10
[root@k8s-master ~]#

创建自己需要的实例环境

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐