4 个版本 (2 个破坏性更改)
0.4.1 | 2021年4月1日 |
---|---|
0.3.0 | 2021年3月23日 |
0.2.1 | 2021年3月14日 |
0.2.0 | 2021年3月13日 |
#1772 in 密码学
80KB
1.5K SLoC
vmadm README
vmadm 是一个工具,用于在本地 libvirt 下创建和销毁虚拟机。虚拟机通过使用 YAML 编写的规范文件进行描述。
foo:
cpus: 4
memory_mib: 4096
image_size_gib: 100
bar:
cpus: 1
memory_mib: 512
image_size_gib: 1
规范文件中的所有机器将一次性创建或销毁。
用法
给定一个规范文件 machines.yaml
,要创建虚拟机运行
$ vmadm new machines.yaml
要删除它们
$ vmadm delete machines.yaml
创建 VM 将创建一个基于基础镜像(也是 qcow2 格式)的磁盘镜像。删除 VM 也会删除镜像文件。除非规范文件明确指定镜像文件名,否则镜像文件将按照 VM 命名并放入配置的镜像目录中。
要获取内置的命令行帮助
$ vmadm help
$ vmadm --help
基础镜像是一个已安装了一些操作系统的镜像。它应在第一次引导时使用 [cloud-init][] 配置主机名和 SSH 密钥,或者至少不介意 VM 上附加了一个包含 cloud-init 配置的额外 ISO 磁盘。它应在引导时打开 SSH 端口。除了这些之外,vmadm 不关心它是什么。对于 Debian,位于 https://cloud.debian.org/ 的预制的 OpenStack 云镜像工作得很好。您需要自行下载基础镜像,vmadm 不会为您执行此操作。
配置
默认配置文件位于 XDG 配置目录下的 vmadm/config.yaml
;默认情况下,这是 ~/.config/vmadm/config.yaml
。配置文件可以指定以下字段
default_base_image
– 默认基础镜像的路径default_image_gib
– VM 新镜像的默认大小,以 GiB 为单位default_memory_mib
– VM 的默认内存量,以 MiB 为单位default_cpus
– VM 的默认 CPU 数量default_generate_host_certificate
– 是否默认生成SSH主机证书?image_directory
– 虚拟机镜像文件存放的目录authorized_keys
– 要放入虚拟机默认用户的authorized_keys
文件中的SSH公钥的文件名列表ca_key
– 默认CA 私钥 的路径名
指定字段
指定文件是YAML格式,可以指定以下字段,所有这些字段都覆盖了配置中的某些默认值。
ssh_key_files
– 覆盖authorized_keys
image_size_gib
– 覆盖default_image_giv
memory_mib
– 覆盖default_memory_mib
cpus
– 覆盖default_cpus
base
– 覆盖default_base_image
image
– 覆盖默认镜像文件名;必须包含image
– 覆盖默认镜像文件名;必须包含路径名,默认不会放入镜像目录generate_host_certificate
– 覆盖主机认证设置ca_key
– 覆盖默认CA密钥rsa_host_key
– 在主机上安装的RSA主机密钥rsa_host_cert
– 在主机上安装的RSA主机证书dsa_host_key
– 在主机上安装的DSA主机密钥dsa_host_cert
– 在主机上安装的DSA主机证书ecdsa_host_key
– 在主机上安装的ECDSA主机密钥ecdsa_host_cert
– 在主机上安装的ECDSA主机证书ed25519_host_key
– 在主机上安装的Ed25519主机密钥ed25519_host_cert
– 在主机上安装的Ed25519主机证书
不同的host_key
和host_cert
字段指定了要在新虚拟机中安装的私钥和证书。公钥是从私钥计算出来的,因此不需要显式指定。这些字段应包含密钥或证书的文本,而不是其文件名。
如果指定了任何主机密钥,则不会生成主机证书:忽略generate_host_certificate
设置。如果没有指定主机密钥,则会生成一个Ed25519密钥,并使用指定的CA证书进行签名。生成的密钥和证书将安装在新虚拟机中。
换句话说,如果您指定了任何主机密钥,您就可以手动完成所有操作。如果您想保持事情简单,请不要指定任何主机密钥,让vmadm为虚拟机生成主机密钥和主机证书。
日志记录
要启用日志记录,设置环境变量VMADM_LOG
$ VMADM_LOG=vmadm::libvirt vmadm list
DEBUG vmadm::libvirt > connecting to libvirtd qemu:///system
DEBUG vmadm::libvirt > listing all domains
$
vmadm使用Rust库env_logger
进行日志记录,该库的文档在https://docs.rs/env_logger。环境变量可以通过日志级别、代码模块或两者同时启用。将其设置为trace
将提供最详细的日志记录。
使用主机证书
主机证书允许您在不接受其主机密钥的情况下访问新创建的虚拟机。这对于虚拟机被重新创建且主机密钥发生变化的情况非常有用。您需要配置SSH客户端以信任使用给定SSH CA密钥制作的证书,但这是一次性操作。
您需要创建一个用作主机认证CA密钥的SSH密钥。运行以下命令
$ mkdir -m 0700 ~/.ssh/ca
$ ssh-keygen -f ~/.ssh/ca/vmadm_ca -t ed25519 -N ''
这创建了一个没有密码的密钥,因为vmadm目前不支持带密码的CA密钥。
请确保CA密钥的安全。不要将其用于其他任何用途。
将以下内容添加到您的SSH客户端使用的known_hosts
文件中,全部在一个行上
@cert-authority * XXXX
其中 XXX
是CA密钥的公钥部分,如上面示例中存储在 ~/.ssh/ca/vmadm_ca.pub
中。这告诉您的客户端应该接受该行上的CA密钥用于所有主机(*
)。如果您愿意,也可以仅限于一些主机。
主机设置
vmadm运行的主机需要运行libvirt,并且您必须可以访问qemu:///system
连接。Debian wiki有一些有用的文档
我使用Ansible角色设置了自己的libvirt主机:[http://git.liw.fi/ansibleness/tree/ansible/roles/vmhost](http://git.liw.fi/ansibleness/tree/ansible/roles/vmhost)。它在Debian上工作。简短版本
- 安装
libvirt
(Debian软件包libvirt-daemon-system
,libvirt-daemon
,libvirt-daemon
)virt-install
(Debian软件包virtinst
)qemu-img
(Debian软件包qemu-uttils
)- VM的NSS查找(Debian软件包
libnss-libvirt
) - SSH客户端(Debian软件包
openssh-client
)
- 确保您在
libvirt
组中 - 编辑
/etc/nsswitch.conf
,在hosts
行中添加libvirt libvirt_guest
依赖项
~8–20MB
~284K SLoC