背景
Red Hat Enterprise Linux 在众多Linux版本中历史悠久,因为其安全和稳定,获得不少企业的青睐,特别在外企中获得广泛的使用。腾讯云是业界主流的云平台之一,虽然支持多种Linux操作系统,包括腾讯自研的TencentOS,但是当前并没有Redhat Linux镜像,这就需要客户自行定制。本文将该操作过程进行记录和总结,从而方便后继客户使用。
基本原理
镜像迁移上云的基本原理是:首先在本地创建镜像;安装云上支持环境,包括virtio驱动以及cloud-init;将本地镜像上传到云上并导入到CVM(Cloud Virtual Machine)中;最后到CVM上进行配置,其基本流程如下图所示:
操作说明
创建虚拟机
目前腾讯云服务迁移支持的镜像格式有:qcow2、vhd、vmdk和raw。所以理论上只要是能够支持这其中任何一种文件格式的虚拟机软件都可以使用。本文实验采用了VirtualBox 最新的7.0版本。Red Hat Enterprise Linux 9.x操作系统采用了官网下载的rhel-baseos-9.1-x86_64-dvd.iso文件。具体操作如下:
- 选择操作系统
在Oracle VM VirtualBox管理器主界面上点击“新建”按钮,会出现一个参数设置界面。默认会首先显示“Name and Operating System”页,其中:
ISO Image项,我们选择redhat9的iso镜像文件;
类型:选择Linux
版本:选择Red Hat 9.x (64-bit)
填写后的界面如下所示:
- 选择文件格式
下一个重要的选项是设置文件格式。
选中最后一个“Hard Disk”页。默认的文件格式是“VDI”,这里将其修改为“vmdk”格式。修改后的界面如下图所示:
- 其它选项设置
此时我们看到右下角的“Finish”按钮还是灰的,目前还无法开始安装。
我们注意到 “Unattended Install”页面还是标注红的,需要打开该页进行设置。特别需要修改其中的“Hostname”项;其它的用户名,口令等,根据情况设置。
通常我还会去“Hardware”页调整一下内存大小和处理器个数。系统给的默认值是:内存2048 MB;处理器数为1。可以根据机器性能,适当调大。
经过上述参数设置后,点击“Finish”后,虚拟机将自动重启,随后开始安装新操作系统。
- 操作系统选项设置
操作安装的过程中跟着向导提示,一步步选择即可。
经过语言选择后,会来到“INSTALLATION SUMMARY”,其中有两项是标红的,需要进去设置一下。
“Installation Destination”选项点击进入,选择一下安装的磁盘就可以了。
“Root Password” 选项进入设置一下管理员口令。通常我还会勾选一下“Allow root SSH login with password”。
设置后的界面如下所示:
设置过上述两项后,就可以开始安装了。但是“Software Selection”项这时默认是“Server with GUI”。我们希望能节省一些计算资源,所以点击进入并将其修改成“Server”。然后点击右下角的“Begin Installation”,启动安装进程。安装完成后,点击“Reboot System”重启虚拟机,重启后就进入了登陆界面。
安装云支持环境
- 安装virtio驱动
RHEL 9.1默认不包含virtio驱动,需要按照如下方式添加:
新建“/etc/dracut.conf.d/virtio.conf”配置文件,并添加如下内容:
add_drivers ="virtio_scsi virtio_blk virtio_net virtio_console"
执行如下命令:
# dracut -f
执行后就添加了virtio驱动。执行过程中会有一些警告信息,可以忽略。
- 安装cloud-init
建议从官方渠道安装cloud-init。为此,要先注册一下当前虚拟机,命令如下:
subscription-manager register --username <username> --password <password> --auto-attach
其中<username>和<password>用你在Redhat注册的用户名,密码替代。
注册后,运行yum install -y cloud-init安装最新的cloud-init。
然后分别运行如下命令,激活cloud-init服务。
#systemctl enable cloud-init-local.service
#systemctl enable cloud-init.service
#systemctl enable cloud-config.service
#systemctl enable cloud-final.service
完成上述配置后可以运行 “shutdown now”先关机。
导入到CVM
导入分为2步:首先是将格式为vmdk的虚拟机文件上传到COS;其次是从cos导入虚拟机到CVM。具体操作如下:
- 上传虚拟机文件到COS
登陆腾讯云控制台后,打开云对象存储COS(https://console.cloud.tencent.com/cos)
点击“创建存储桶”,并选择离你最近的区域。这里为了测试方便,访问权限选择了“公有读写”,实际使用时要根据业务需要设置。填写界面参考如下:
后继选项按照提示填写即可。
存储桶创建后,会出现该存储桶的管理界面。我们找到前面创建的虚拟机文件,并点击“上传文件”。用户界面参考如下:
上传需要一定的时间,请耐心等待。
- 将虚拟机导入到CVM
到腾讯云控制台,选择云服务新建一个CVM,安装时可以随便选择一个操作系统镜像,因为等一下要被覆盖的。
这里采用“离线迁移”的方式将虚拟机导入到CVM。
在腾讯云-〉云服务器-〉运维与监控-〉离线迁移
(https://console.cloud.tencent.com/cvm/csm/offline)
点击“新建实例迁移”,会出现一个提示页面提醒做哪些准备。点击“下一步”,这里所在地域要选择与之前COS文件所在的同一个地域,另外要将之前上传的文件链接地址填写到这里。点击“完成”后即开始导入到CVM。
导入过程中可以通过刷新页面可以看到最新的进度。
导入完成后就可以到控制台点击“开机”,启动CVM。
配置CVM
- VNC登陆
CVM控制台点击“登陆”按钮后,会出现一个对话框选择登陆方式。
由于SSH尚未配置完成,所以我们选择VNC登陆。此处用到的用户名口令,是我们安装虚拟机时设置的。此时如果访问网络,会发现其实已经通了。
- 启用SSH登陆
为方便管理CVM,我们还希望开通SSH登陆。
为此,需要修改 “/etc/ssh/sshd_config”文件,将“PasswordAuthentication”改为“yes”,并通过如下命令重启sshd服务:
#systemctl restart sshd
修改sshd_config文件如下所示:
后面就可以通过ssh登陆CVM进行管理了。
问题讨论
- 为何不采用镜像导入的方式?
参考文档[1]中演示了如何通过镜像导入的方式上云。在实际测试中尝试了多种方式都没有成功,最后采用“离线迁移”的方式完成。
- 虚拟机中网络如何配置?
同样,在参考文档[1]的“7)更改网络端口到eth0”一节中说明了如何配置网络。而RHEL 9.1 中网络配置脚本已经移到别处,仅在原位置留下一个说明文档。考虑到cloud-init应该会自动配置网络,所以这里并没有执行修改。实际CVM从云上启动后,我们发现网络自动正确配置了,完全符合预期。下图可以看到,新的ifcfg-eth0文件已经自动生成了:
- cloud-init 开源版本是否可以使用?
虽然腾讯云官方网站上文档说明了如何安装cloud-init 开源版本,但是不建议在RHEL中使用。若不想付费,可以在Redhat网站注册一个开发者账号。
- 跨区镜像上传的问题?
虚拟机文件上传到COS上时,要选择离自己最近的区域,否则容易失败。
- 虚拟机初始安装参数对最终CVM是否有影响?
虚拟机初始安装时的CPU数和内存数等参数,对最终的CVM无影响文件。CVM在启动的时候会获得最新的硬件环境信息,从而自动做出调整。
- “离线迁移”的方式对于RHEL其它版本是否适用?
测试过RHEL 8.7版本是适用的。理论上其它版本也应该适用。
参考资料
[1]一步一步导入RHEL镜像到腾讯云
https://cloud.tencent.com/developer/article/1820786
[2] 腾讯云:Linux系统安装 cloud-init
https://cloud.tencent.com/document/product/213/12587
[3] 腾讯云:Linux系统检查 Virtio 驱动
https://cloud.tencent.com/document/product/213/9929
[4] 腾讯云:离线迁移
https://cloud.tencent.com/document/product/213/19233
[5] ssh permission-denied修改参考
https://phoenixnap.com/kb/ssh-permission-denied-publickey