Cloud-Init 和 VM

如果你想使用 cloud-init 来配置 cloud-images,只需向下滚动到第 3 点。

1.它有什么作用?

有没有想过每次在“云”中启动新 VM 时,VPS 提供商如何配置您的 VM、添加您的 SSH 密钥、创建用户和安装软件包?嗯,大多数供应商的答案是cloud-init。大多数操作系统和发行版都附带安装在映像中的各自操作系统的虚拟磁盘映像。安装非常简单,可以作为操作系统根文件系统的模板。操作系统维护人员也很友好地为从原始磁盘映像到 qcow2 甚至 vmdk、vdi 和 vhd 的所有各种格式提供虚拟磁盘映像。

该映像还预装了一个额外的软件包,即 cloud-init。cloud-init 的工作是初始化VM(通常在 DigitalOcean、AWS 或 Azure 等云托管服务中)与托管提供商的数据源对话并获取配置信息,然后使用这些信息来配置 VM。

配置信息可以包括用户数据,如 SSH 密钥、实例的主机名、用户和密码以及用户想要运行的任何其他任意命令。

2. Cloud-Init 的问题

如果您是云用户,则 Cloud-init 是一个很棒的工具,如果您正在启动虚拟机或容器,并且您的云提供商很友好地要求您提供云配置,那就太好了!使用 cloud-config 文件,即您的用户数据,您可以在创建 VM 时添加用户、运行任意命令、安装软件包。该过程可以一遍又一遍地重复,而无需一遍又一遍地键入乏味的命令。很快您就会拥有一组虚拟机,所有这些都具有相同的配置。

但是,如果您深入挖掘并了解香肠是如何制作的,您将开始质疑 cloud-init 的某些方面。例如,默认情况下,数据源就像一个 REST 端点,它们本质上是硬编码到 cloud-init 包本身中的。当然,您可以自己设置一个数据源,但这个过程很麻烦且耗时。执行此操作的文档几乎不存在。

官方文件是什么,但对于最终用户依靠已有的云服务的用户手册。它不会告诉您如何设置自己的 cloud-init 数据源,以防您是即将到来的供应商。

更糟糕的是,拥有家庭虚拟化实验室和小型 VPS 初创公司的用户发现很难从这些轻量级云镜像中受益。如果没有 cloud-init 数据源或一些难以自动化和扩展的黑客,您就无法真正从这些模板启动 VM。换句话说,除非您想制作自己的模板,否则您甚至不能选择忽略 cloud-init。

以经典的 systemd 方式,它摆脱了其预定义的角色,并开始与网络和操作系统的其他部分混为一谈,从而使用户望而却步。它捆绑在 Ubuntu 18.04 服务器 ISO 中,这完全没有意义(至少对我来说不是)。

3. 家庭实验室的解决方法

抛开所有的咆哮,我仍然需要在日常使用中处理 cloud-init。我在 x86_64 硬件上安装了一个非常小的 Debian 9,我将其用作KVM 管理程序。我真的很想使用UbuntuCentOS附带的 qcow2 磁盘映像。这些磁盘映像中预装了操作系统,要使用它们,您只需:

  1. 将它们复制为 VM 的虚拟硬盘映像。
  2. 将根文件系统的虚拟大小调整为您想要的大小(建议至少 10GB)。这不会增加 VM 的物理大小,但随着 VM 向其添加更多数据,磁盘映像会随着时间的推移而增长。
  3. 使用 cloud-init 配置 VM。最低要求是设置 root 用户的密码或 SSH 密钥,但您可以执行 cloud-init 所能做的一切。

遵循以下步骤:

  1. 下载您喜欢的操作系统的云镜像并将其保存在 /var/lib/libvirt/boot 目录中:
$ cd /var/lib/libvirt/boot
$ curl -O https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-
amd64-disk1.img
$ cd /var/lib/libvirt/images

  1. 创建一个所需大小的空虚拟硬盘,并将下载的 qcow2 映像展开到其中。我喜欢把虚拟机硬盘存放在 /var/lib/libvirt/images/ 目录下,你可以选择不同的目录。无论您选择什么,请在同一目录中运行以下命令:
$ qemu-img create -f qcow2 myVM.qcow2 8G ## Create a harddisk with
virtual disk size of 8GB
$ virt-resize --expand /dev/sda1 /var/lib/libvirt/boot/xenial-server-
cloudimg-amd64-disk1.img
 ./myVM.qcow2

  1. 创建 cloud-init 文件。这些是用户数据和元数据文件:
$ vim meta-data
instance-id: myVM
local-hostname: myVM
 
$ vim user-data
#cloud-config
users:
- name: root
chpasswd:
list: |
root:myPassword
expire: False

我在这里唯一的用户是 root 用户。如果您不提及任何用户,则会创建名为ubuntu的默认用户。默认用户名因操作系统而异,这就是我建议指定用户的原因,即使它只是root。用户数据文件的下一部分告诉 cloud-init 为要分配密码的所有用户配置密码。同样,我只是为 root 用户设置密码,它是myPassword。确保冒号和密码字符串之间没有空格。

更好的是,您可以使用 SSH 密钥而不是放置硬编码的密码。

$ vim user-data
#cloud-config
users:
- name: root
ssh_pwauth: True
ssh_authorized_keys:
- ssh-rsa <Your public ssh keys here>

  1. 将用户数据和元数据文件嵌入到一个 iso 中。
$ genisoimage -output cidata-myVM.iso -volid cidata -joliet -rock user-data meta-data

确保文件 cidata-myVM.iso 位于 /var/lib/libvirt/images/

 

  1. 转到 /var/lib/libvirt/images 目录并使用 virt-install 命令初始化 VM:
    $ virt-install --import --name myVM --memory 2048 --vcpus 2 --cpu host
     --disk myVM.qcow2,format=qcow2,bus=virtio --disk myVM-cidata.iso,device=cdrom
     --network bridge=virbr0,model=virtio --os-type=linux
     --os-variant=ubuntu16.04 --noautoconsole

    您现在可以尝试使用命令 virsh console myVM 并使用 root 用户名及其相应密码登录来登录 VM。要退出控制台,只需键入 Ctrl+]

结论

大多数供应商提供的云图像在资源利用方面非常高效,而且它们也感觉非常快速和响应。我们需要以处理笨拙的 cloud-init 配置作为起点的事实只会阻碍社区对 KVM 和相关技术的采用。

社区可以从 Docker 构建和发布其镜像的方式中学到很多东西。它们作为运行容器和易于分发和使用的模板都非常易于管理。

原文地址:https://blog.csdn.net/allway2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340