一键搞定个性化云镜像!Cloud-Init 神操作揭秘

云计算
loud-Init是一种用于初始化云实例的工具,结合PVE和Cloud-Init,我们可以快速创建和配置虚拟机镜像。本教程将详细介绍如何在PVE上利用Cloud-Init构造自己的镜像。

在虚拟化环境中,自动化配置虚拟机(VM)是提高效率的关键。Proxmox VE(PVE)是一款流行的开源虚拟化平台,而Cloud-Init是一种用于初始化云实例的工具。结合PVE和Cloud-Init,我们可以快速创建和配置虚拟机镜像。本教程将详细介绍如何在PVE上利用Cloud-Init构造自己的镜像。

什么是 Cloud-Init?

Cloud-Init 是一个用于初始化云实例的开源工具。它被广泛应用于各种云计算平台,如Amazon Web Services (AWS)、Microsoft Azure、Google Cloud Platform (GCP)、OpenStack等。Cloud-Init允许在实例首次启动时,自动化执行各种配置任务,如设置主机名、用户和组、安装软件包、配置网络等。

Cloud-Init 的工作原理

Cloud-Init在实例的首次启动时运行,并根据用户提供的元数据和用户数据执行配置。这些数据通常以YAML格式提供,可以包含以下几类信息:

  • Meta-data(元数据):描述实例的基本信息,如实例ID、主机名等。
  • User-data(用户数据):定义实例启动时要执行的具体配置和脚本。

前提条件

一台运行Proxmox VE的服务器:

PVE服务器

基本的Linux命令行操作知识:

官方镜像下载

# cloud images下载地址
# centos:
http://cloud.centos.org/centos/
# ubuntu:
http://cloud-images.ubuntu.com/releases/
# debian:
https://cloud.debian.org/images/cloud/OpenStack/
# fedora:
https://alt.fedoraproject.org/cloud/
# rehat7:
https://access.redhat.com/downloads/content/69/ver=/rhel---7/x86_64/product-downloads
# opensuse:
https://software.opensuse.org/distributions/leap#JeOS-ports

构造镜像模板

在本教程中,我们将使用Ubuntu镜像作为示例 :

(1) 先从官方下载ubuntu的云镜像。执行如下命令:

wget https://cloud-images.ubuntu.com/jammy/20240601/jammy-server-cloudimg-amd64-disk-kvm.img

(2) 使用下面的命令创建虚拟机:

VM_ID=999
qm create $VM_ID --cores 4 --memory 4096 --name ubuntu --net0 virtio,bridge=vmbr0

(3) 给虚拟机导入镜像

qm importdisk $VM_ID jammy-server-cloudimg-amd64-disk-kvm.img local-lvm

(4) 挂载创建好的硬盘到虚拟机

qm set $VM_ID --sata0 local-lvm:vm-$VM_ID-disk-0

(5) 创建cloudinit

qm set $VM_ID --sata1 local-lvm:cloudinit

(6) 设置默认启动项

qm set $VM_ID --boot c --bootdisk sata0

(7) 设置用户名和密码

qm set $VM_ID --ciuser root --cipassword 123123

(8) 配置网络

qm set $VM_ID  --ipconfig0 ip=10.0.10.123/24,gw=10.0.10.1,ip6=dhcp #静态配置
qm set $VM_ID --ipconfig0 ip=dhcp,ip6=dhcp #动态配置

(9) 启动虚拟机

qm start $VM_ID

(10) 修改Cloud-init的配置 开启PasswordAuthentication认证,编辑/etc/cloud/cloud.cfg这个文件,添加 ssh_pwauth:true,如下图:

添加这个配置后,会在对应命令添加如下配置文件。

root@ubuntu:~# cat /etc/ssh/sshd_config.d/50-cloud-init.conf
PasswordAuthentication yes

修改SSH配置文件,允许root用户登录

PermitRootLogin yes

(11) 添加国内的镜像源,本案中添加清华大学源为例。

在/etc/apt/sources.list.d创建一个名为tsinghua.sources的文件,添加如下内容:

Types: deb
URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
# Types: deb-src
# URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
# Suites: noble noble-updates noble-backports
# Components: main restricted universe multiverse
# Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

# 以下安全更新软件源包含了官方源与镜像站配置,如有需要可自行修改注释切换
Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

# Types: deb-src
# URIs: http://security.ubuntu.com/ubuntu/
# Suites: noble-security
# Components: main restricted universe multiverse
# Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

# 预发布软件源,不建议启用

# Types: deb
# URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
# Suites: noble-proposed
# Components: main restricted universe multiverse
# Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

# # Types: deb-src
# # URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
# # Suites: noble-proposed
# # Components: main restricted universe multiverse
# # Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

(11) 所有配置完成后,清除历史命令并关机

history -c && init 0

(12) 把该虚拟机转成模板

qm template $VM_ID

使用脚本批量创建虚拟机

批量创建需求如下:

  • 利用虚拟机模板 999,批量创建 3 个虚拟机
  • 新建的虚拟机 ID 为 20x,虚拟机名称为 demo-vmx
  • 指定存储名称为 local
  • 每个虚拟机 2 插槽 2 核心即 4 线程,内存 4G
  • 每个虚拟机添加一块 50G 的数据盘
  • 每个虚拟机添加一个内网网卡,即网络设备 (net0),网卡 IP 为 192.168.31.24x,网关为 192.168.31.254
  • 设置系统 root 用户的密码为 password
for id in $(seq 1 1 3)
do
qm clone 999 24${id} --name demo-vm${id} -full true -storage local
qm set 24${id} --sockets 2 --cores 2 --memory 4096
qm set 24${id} --scsi1 iothread=1,local:100
qm set 24${id} --nameserver 114.114.114.114 --ipconfig1 ip=192.168.31.24${id}/24,gw=192.168.31.254 --ciuser root --cipassword password
qm start 24${id}
done

总结

Cloud-Init 是一个强大且灵活的工具,可以显著简化云实例的初始化和配置过程。通过预先定义好的配置文件,用户可以自动化执行各种初始化任务,提高部署效率和一致性。无论是在公共云还是私有云环境中,Cloud-Init 都是一款不可或缺的配置管理工具。

责任编辑:赵宁宁 来源: 攻城狮成长日记
相关推荐

2020-06-28 07:00:00

推荐系统智能商务服务平台

2013-01-04 09:41:11

云计算个性化精准促销Me Marketin

2010-04-30 17:07:03

组策略部署

2022-11-01 07:19:45

推荐系统非个性化

2013-06-26 10:25:46

云计算大数据

2013-06-28 10:08:49

云计算大数据个性化

2011-01-20 10:19:21

PowerShell个性化

2023-12-19 15:45:07

Linux工具

2013-12-12 12:43:32

云数据存储移动医疗

2015-09-18 10:20:58

云计算Docker商业革命

2023-03-21 12:46:30

智慧城市人工智能大数据

2020-08-31 12:00:17

Linux终端颜色命令

2024-01-19 16:35:00

模型动画

2011-05-04 14:38:53

海尔江山帝景一体机

2013-11-07 16:42:34

Windows 8.1个性化

2020-06-11 21:46:05

个性化医疗保健物联网IOT

2009-07-13 15:33:24

桌面虚拟化虚拟化IT

2015-06-09 10:36:13

Cloud FoundAzurePaaS

2018-11-08 09:37:08

微博系统架构

2015-07-14 09:07:08

戴尔任意云
点赞
收藏

51CTO技术栈公众号