前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PVE 虚拟化下 CentOS 7 虚拟机模板制作及自动开通完全指南

PVE 虚拟化下 CentOS 7 虚拟机模板制作及自动开通完全指南

原创
作者头像
运维有术
发布2023-11-28 16:42:06
1.8K0
发布2023-11-28 16:42:06
举报
文章被收录于专栏:运维有术运维有术

云原生运维实战第二季|PVE 虚拟化下 CentOS 7 虚拟机模板制作及自动开通完全指南

大家好,欢迎来到运维有术

欢迎来到云原生运维实战训练营系列课程第二季

前言

导图

pve-template-mindmap
pve-template-mindmap

知识量

  • 阅读时长:10 分
  • 行:340
  • 单词:3000+
  • 字符:8400+
  • 图片:18 张

知识点

  • 定级:入门级
  • PVE 控制台下虚拟机创建
  • CentOS 7 虚拟机模板的制作
  • Cloud-init 的安装配置
  • PVE 虚拟机转换成模板
  • PVE 命令行管理虚拟机和存储资源

实战服务器配置 (个人组装的 X99-D3 测试服务器,性价比较高,千元内学习测试首选)

  • 主板:科脑 X99(DDR3 款)
  • CPU: Intel(R) Xeon(R) CPU E5-2698B v3 @ 2.00GHz (单 CPU)
  • 内存:128G(DDR3 32G * 4)
  • 硬盘:1T nvme.m2(有条件建议配置 2 块,1 块 512G SSD 安装系统存放模板,1 块 >1T nvme 存放虚拟机)
pve-server-status
pve-server-status

实战环境涉及软件版本信息

  • PVE:8.0.4
  • 操作系统:CentOS 7.9 x64

1. 本文简介

在云原生运维实战课程中,我们将经常进行各种操作系统的安装和各种服务软件的安装配置。涉及的操作系统包括 CentOS、Ubuntu 和 OpenEuler,而服务软件则涵盖了小到 Nginx、MySQL 等,大到一套完整的 Kubernetes、KubeSphere、分布式存储 集群。

为了完成这些复杂的实战内容,首先需要有一台用于学习测试的裸服务器。在这台裸服务器上,我们需要安装虚拟化软件来部署虚拟机。在虚拟化软件的选择上,既可以选择商业化的 VMware vSphere,也可以选择开源的 Proxmox Virtual Environment。基于以上的原因,我在海鲜市场淘了一套二手洋垃圾服务器,然后安装了 Proxmox Virtual Environment,以下简称 PVE。这样,我就可以轻松地在 PVE 上创建和管理多个虚拟机,用于云原生运维的实战训练。

很多人觉得没必要搞一台自己的裸服务器,有需求时直接购买云服务商的云主机即可。事实确实如此?如果你只是偶尔做个小实验,资源使用需求不大,那完全没问题。但是,如果你是一个重度的技术爱好者、实验者,每天的学习实验时间超过 4 小时以上,实验虚拟机的资源需求大于 3 台,甚至更多,每台资源大于 4C 16G 。再加一个假设,持续 1-3 年甚至更久,拿出计算器计算一下云上成本,我觉得还是自己攒一台洋垃圾比较划算。

选择 PVE 作为裸服务器的虚拟化软件的主要原因如下:

  • vSphere 不识别非服务器主板上螃蟹网卡,还需要自己找驱动制作安装 ISO,麻烦没必要(也可以买个 PCIE 的服务器网卡插主板上)。
  • 在自动化开通和配置方面,PVE 相对更简单省事点,vSphere 需要更多的技术手段
  • 以前没玩过 PVE,想玩点新鲜的不一样的,技术的提升在于折腾(vSphere 太稳定了)

在裸服务器上安装 PVE 虚拟化软件后,由于我们在测试过程中需要经常开通新的虚拟机并在测试完成后立即销毁,为了提高效率,我们利用提前装好的虚拟机模板采用 PVE 命令行的方式实现虚拟机和存储资源的快速创建、配置、销毁。

本文将介绍如何安装制作启用 Cloud-init(主要用于自动化配置 IP、用户和密码) 的 CentOS 7.9 模板,并阐述实战如何利用 PVE 命令行实现虚拟机的创建、配置、销毁等操作。

2. 制作 CentOS 7 虚拟机模板

为了后续在 PVE 主机上实现自动化开通配置虚拟机,本虚拟机模板安装 Cloud-init。

2.1 通过页面创建虚拟机

通过 PVE 管理控制台,创建虚拟机。

  • 虚拟机-常规
pve-vm-create-1
pve-vm-create-1
  • 虚拟机-操作系统(选择 CentOS7 的安装 ISO)
pve-vm-create-2
pve-vm-create-2
  • 虚拟机-系统(建议勾选 Qemu 代理
pve-vm-create-3
pve-vm-create-3
  • 虚拟机-磁盘(大小 40 GB,格式选择默认的 QEMU 映像格式)
pve-vm-create-4
pve-vm-create-4
  • 虚拟机-CPU(类别建议选择 host )
pve-vm-create-5
pve-vm-create-5
  • 虚拟机-内存配置(作为模板,默认值即可)
pve-vm-create-6
pve-vm-create-6
  • 虚拟机-网络(选择默认的 VirtIO 模型)
pve-vm-create-7
pve-vm-create-7
  • 虚拟机-确认
pve-vm-create-8
pve-vm-create-8

2.2 修改虚拟机硬件配置

  • 虚拟机硬件配置中添加,cloud-init 配置。
pve-vm-cloudinit-1
pve-vm-cloudinit-1
  • 添加->CloudInit 设备
pve-vm-cloudinit-2
pve-vm-cloudinit-2
  • 选择存储和格式
pve-vm-cloudinit-3
pve-vm-cloudinit-3
  • 最终效果
pve-vm-cloudinit-4
pve-vm-cloudinit-4

2.3 安装操作系统并配置 Cloud-init

  • 安装操作系统

启动虚拟机并安装操作系统,安装过程略,根据需求正常安装配置即可。安装过程中需要正确配置网络,确保虚拟机能正常连接互联网,否则后面安装 Cloud-init 的任务无法完成。

  • 安装 Cloud-init
代码语言:shell
复制
# 安装必须的包
yum install qemu-guest-agent cloud-init
install-cloud-init
install-cloud-init
  • 修改 Cloud-init 配置

修改默认的 cloud-init 配置,开启 PasswordAuthentication 认证,vi /etc/cloud/cloud.cfg

修改 ssh_pwauth 的值为 1,(默认为 0,Cloud-init 会自动修改 sshd 配置文件的 PasswordAuthentication 配置为 no,导致无法使用密码的方式登陆系统)

edit-cloud-cfg
edit-cloud-cfg

2.4 虚拟机转换成模板

参考下面的操作将虚拟机转换成模板。

  • 修改虚拟机网卡配置文件 ,vi /etc/sysconfig/network-scripts/ifcfg-eth0,仅保留以下字段。
代码语言:text
复制
TYPE=Ethernet
BOOTPROTO=dhcp
NAME=eth0
DEVICE=eth0
ONBOOT=yes
  • 清除历史命令并关机
代码语言:shell
复制
# 注意 histroy 跟命令提示符 # 之间加一个空格
#  history -c && init 0
  • 虚拟机硬件中删除 CD/DVD 驱动器
remove-cdrom
remove-cdrom
  • 虚拟机转换成模板

在 PVE 管理控制台中,在虚拟机名称上点击「右键」,选择「转换成模板」。

image-20231128141114231
image-20231128141114231

3. PVE 自动创建虚拟机示例

注意: 利用命令创建和配置虚拟机需要 SSH 远程登录到 PVE 主机。

3.1 自动创建并配置虚拟机

  • 克隆虚拟机
代码语言:shell
复制
# 格式:qm clone `模板id` `新虚拟机id` --name `新虚拟机的名称`
qm clone 103 203 --name ksp-master-1
  • 设置 CPU
代码语言:shell
复制
# 设置cpu的通道数socket和核心数core
# 下方命令设置2通道2核心,占用物理cpu 4个线程。模拟物理环境中的2核每核心有2个线程。
# 虚拟CPU中的核心=物理CPU的线程,虚拟CPU的通道=物理CPU的核心,虚拟CPU的个数=物理cpu的路数(几颗cpu)
# 物理CPU占用量=虚拟个数*虚拟通道数*虚拟核心数,
qm set 203 --sockets 2 --cores 2
  • 设置内存
代码语言:shell
复制
# 设置内存
# PVE要求内存单位是MB,内存数为整数且是16的倍数,默认512
qm set 203 --memory 16384
  • 添加数据盘
代码语言:shell
复制
# 虚拟机名称 203,槽位 scsi1,存储名称:容量大小(local:100)
qm set 203 --scsi1 iothread=1,local:100
  • 添加网卡
代码语言:shell
复制
# 虚拟机名称 203,网络设备名称 net1,桥接的网桥名称 vmbr1
qm set 203 --net1 model=virtio,bridge=vmbr1
  • 设置 Cloud-Init
代码语言:shell
复制
# 虚拟机名称 203,dns, 网卡2的IP和网关(注意第一块网卡是 ipconfig0),系统用户名 root,系统用户密码 password
qm set 203 --nameserver 114.114.114.114 \
           --ipconfig1 ip=192.168.9.91/24,gw=192.168.9.254 \
           --ciuser root \
           --cipassword password
  • 启动虚拟机
代码语言:shell
复制
qm start 203

3.2 批量自动化创建脚本

批量创建需求如下:

  • 利用虚拟机模板 103,批量创建 3 个虚拟机
  • 新建的虚拟机 ID 为 20x,虚拟机名称为 demo-vmx
  • 指定存储名称为 local
  • 每个虚拟机 2 插槽 2 核心即 4 线程,内存 16G
  • 每个虚拟机添加一块 100G 的数据盘
  • 每个虚拟机添加一个内网网卡,即网络设备 (net1),网卡 IP 为 192.168.9.9x,网关为 192.168.9.254
  • 设置系统 root 用户的密码为 password

使用下面的 Shell 脚本批量创建虚拟机:

  • 创建虚拟机
代码语言:shell
复制
for id in $(seq 1 1 3)
do
qm clone 103 20${id} --name demo-vm${id} -full true -storage local
qm set 20${id} --sockets 2 --cores 2 --memory 16384
qm set 20${id} --net1 model=virtio,bridge=vmbr1
qm set 20${id} --scsi1 iothread=1,local:100
qm set 20${id} --nameserver 114.114.114.114 --ipconfig1 ip=192.168.9.9${id}/24,gw=192.168.9.254 --ciuser root --cipassword password
qm start 20${id}
done

说明: 命令执行结果如下图所示

pve-create-vm
pve-create-vm
  • 销毁虚拟机
代码语言:shell
复制
# 停止虚拟机
for id in $(seq 1 1 3);do qm stop 20${id};done

# 销毁虚拟机及未使用的磁盘
for id in $(seq 1 1 3);do qm destroy 20${id} -purge -destroy-unreferenced-disks;done

4. 总结

本文主要实战演示了在 PVE 虚拟化上创建 CentOS 7.9 虚拟机模板的详细过程。同时,介绍了如何利用 PVE 命令行管理虚拟机和存储资源。

概括总结全文主要涉及以下内容:

  • PVE 虚拟机创建
  • CentOS 7.9 虚拟机模板制作
  • Cloud-init 安装配置
  • PVE 虚拟机转换成模板
  • PVE 命令行创建和配置虚拟机

本文制作的虚拟机模板虽然是基于 CentOS 7.9 ,但是对于 Ubuntu、openEuler 等操作系统同样具有借鉴意义,只是网卡配置和 cloud-init 等安装包的名称和安装命令不一样。

本文的核心价值在于基于 PVE 自动化创建和配置虚拟机,可以极大的提高运维人员的学习和工作效率。

本文介绍的内容可直接用于个人测试的 PVE 环境,同样适用于使用 PVE 作为研发测试环境的团队。

结束语

如果你喜欢本文,请持续关注我,并将本文分享给你的小伙伴!

云原生运维实战系列文档,是 知识星球 运维有术 推出的云原生运维实战训练营系列课程的实战文档。

该系列文档从纯实战角度出发,无废话、纯实战快速带你玩转云原生运维。

本系列文档内容涵盖 (但不限于) 以下技术领域:

  • OpenStack、Proxmox Virtual Environment
  • KubeSphere、Kubernetes
  • Ansible、自动化运维、DevOps
  • 大数据、AIGC
  • 云原生、CNCF 技术栈

获取更多的云原生运维实战技能,请持续关注我,也可以直接加入我们。

Get 技术支持

  • 知识星球: 运维有术(知识付费

Get 文档 / 代码

  • 微信公众号: 运维有术(创作不易,感谢关注与支持)

Get 视频

版权声明

  • 所有内容均属于原创,整理不易,感谢收藏、阅读,未经授权不得转载

About Me

  • 昵称:OpsMan
  • 职业:自由职业者
  • 服务的领域:云计算 、 云原生技术运维,自动化运维,大数据运维
  • 技能标签:OpenStack、Kubernetes、KubeSphere、Ansible、Python、Go、DevOps、CNCF、大数据、云原生、AIGC

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 云原生运维实战第二季|PVE 虚拟化下 CentOS 7 虚拟机模板制作及自动开通完全指南
    • 前言
      • 1. 本文简介
        • 2. 制作 CentOS 7 虚拟机模板
          • 2.1 通过页面创建虚拟机
          • 2.2 修改虚拟机硬件配置
          • 2.3 安装操作系统并配置 Cloud-init
          • 2.4 虚拟机转换成模板
        • 3. PVE 自动创建虚拟机示例
          • 3.1 自动创建并配置虚拟机
          • 3.2 批量自动化创建脚本
        • 4. 总结
          • 结束语
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档