zhangguanzhang's Blog

proxmox里使用cloud-init和一些笔记

字数统计: 1.1k阅读时长: 5 min
2019/01/22 Share

cloud-init的镜像模板制作

模板制作

记录下proxmox制作带有cloud-init的虚机模板过程
    因为刚开始制作虚机模板的硬盘是固定大小,后面通过克隆后调整硬盘大小就会自动growpart,需要安装cloud-utils-growpart。好像只能往大的扩,我个人也倾向于最小20G,所以这里我开的是20G硬盘的虚机
    另外查了下和实际试了下cloud-utils-growpart好像只支持ext3ext4不支持lvm自动扩,其他的文件系统可以考虑试试lvm自己写个脚本去开机启动自动扩。这里我分区不带swap,标准分区+ext4
1
安装完后进系统里自行配制好网卡(onboot=yes,清掉uuid)和dns,因为需要安装一些东西
我个人喜欢拿到手就关闭selinux和firewalld以及NetworkManager

1
2
3
systemctl disable --now firewalld NetworkManager
setenforce 0
sed -ri '/^[^#]*SELINUX=/s#=.+$#=disabled#' /etc/selinux/config

为了让虚拟化层能重启和关闭虚拟机,必须在虚拟机内安装并运行 acpid 服务,为了使根分区正确调整大小安装cloud-utils-growpart,cloud-init支持下发前设置信息写入instance

1
2
yum install -y acpid cloud-init cloud-utils-growpart
systemctl enable acpid

禁用默认zeroconf路线(当系统无法连接DHCP server的时候,就会尝试通过ZEROCONF来获取IP,并添加一条169.254.0.0/16的路由条目)

1
echo "NOZEROCONF=yes" >> /etc/sysconfig/network

修改sshd不使用dns防止ssh连接慢

1
2
sed -ri '/UseDNS/{s@#@@;s@\s+.+@ no@}' /etc/ssh/sshd_config
systemctl restart sshd

      默认的cloud-init的配置文件我们目前需要关心下面这三行:ssh_pwauth 为 0 是禁止使用password登陆。disable_root:1 是禁止root登陆但是我试了下和在网上看到不改0也能登陆不知道为啥。 package-update-upgrade-install这个模块会在instance初次开机后会yum update -y

1
2
3
disable_root: 1
ssh_pwauth: 0
- package-update-upgrade-install

可以通过下面命令修改

1
2
3
sed -ri '/disable_root/{s#\S$#0#}' /etc/cloud/cloud.cfg
sed -ri '/ssh_pwauth/{s#\S$#1#}' /etc/cloud/cloud.cfg
sed -ri '/package-update/s@^@#@' /etc/cloud/cloud.cfg

默认cloud-init会创建一个系统类型的用户,不想创建就把这些注释了

1
2
3
4
5
6
7
#  default_user:
# name: centos
# lock_passwd: true
# gecos: Cloud User
# groups: [wheel, adm, systemd-journal]
# sudo: ["ALL=(ALL) NOPASSWD:ALL"]
# shell: /bin/bash

其他的也可以自己安装点东西例如ntp啥的,弄完后关机即可

1
poweroff

转换模板

记住vmid,在虚机所在的pve后台ssh上执行下面命令,我这是本地的lvm去存储cloudinit的metadata

1
2
3
4
5
6
7
8
9
10
11
12
root@pve:~# qm list
VMID NAME STATUS MEM(MB) BOOTDISK(GB) PID
100 cyn1 running 2048 20.00 42543
101 cyn2 running 2048 20.00 42916
102 cyn running 2048 20.00 32136
103 Copy-of-cyn running 2048 20.00 44227
104 cloud-test stopped 2048 20.00 0
root@pve:~# qm set 104 --ide2 local-lvm:cloudinit
update VM 104: -ide2 local-lvm:cloudinit
Using default stripesize 64.00 KiB.
Rounding up size to full physical extent 8.00 MiB
Logical volume "vm-104-cloudinit" created.

然后在web上可以看到cloud-init这部分不再是灰色了
2
    web页面上把它转换成模板即可,部署的话完整克隆下,开机之前双击需要设置的信息即可,否则例如密码不设置默认是模板的密码
    pve后台ssh上也可以通过命令设置初始化使用的信息,例如:

1
qm set <vmid> --ipconfig0 ip=10.0.10.123/24,gw=10.0.10.1

备份虚机的话可以使用vzdump命令,查看命令帮助使用vzdump help,备份出来的是一个vma的后缀文件,vma文件可以命令导入qmrestore vzdump-qemu-xx.vma <vmid>

参考资料:

http://blog.sina.com.cn/s/blog_79fd72df0101uo3z.html

https://www.cnblogs.com/linkenpark/p/9527518.html

https://pve.proxmox.com/wiki/Cloud-Init_Support

proxmox的一些openstack角度笔记

pve宿主机可以安装libguestfs-tools和来不开机虚机来查看和编辑一些信息,可以使用vma extract解开vma发现是一个硬件信息的conf和一个raw的硬盘文件,转成qcow2文件后查看,例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
root@pve:~# vma extract vzdump-qemu-100-2019_01_31-13_11_02.vma temp/
DEVINFO temp//tmp-disk-drive-scsi0.raw 21474836480
root@pve:~# ll temp/
total 1271184
-rw-r--r-- 1 root root 21474836480 Feb 22 13:33 disk-drive-scsi0.raw
-rw-r--r-- 1 root root 391 Feb 22 13:33 qemu-server.conf
root@pve:~# qemu-img convert -f raw temp/disk-drive-scsi0.raw -O qcow2 myvm-disk1.qcow2
root@pve:~# ll
total 2571096
-rw-r--r-- 1 root root 1328283648 Feb 22 13:34 myvm-disk1.qcow2
drwxr-xr-x 2 root root 4096 Feb 22 13:33 temp
-rw-r--r-- 1 root root 1304569344 Feb 21 11:36 vzdump-qemu-100-2019_01_31-13_11_02.vma
root@pve:~# virt-ls myvm-disk1.qcow2 /
bin
boot
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

详细命令可以看看下面的
https://blog.csdn.net/wenwenxiong/article/details/52223731
https://blog.51cto.com/xiaoli110/1568307?utm_source=tuicool

CATALOG
  1. 1. cloud-init的镜像模板制作
    1. 1.1. 模板制作
    2. 1.2. 转换模板
  2. 2. proxmox的一些openstack角度笔记