快速搭建实验环境:使用 Terraform 部署 Proxmox 虚拟机

d141b588785d2f82b6db70c05543762b.gif

作者 | Addo Zhang

来源 | 云原生指北

自从用上 m1 的电脑,本地开发环境偶尔会遇到兼容性的问题。比如之前尝试用 Colima 在虚拟机中运行容器运行时和 Kubernetes,其实际使用的还是 aarch64 虚拟机,实际使用还是会有些差异。

手上有台之前用的黑苹果小主机,吃灰几个月了,实属浪费。

CPU: Intel 8700 6C12T
MEM: 64G DDR4
DISK: 1T SSD

折腾的目的:

  • 将平台虚拟化

  • 提供多套实验环境

  • 快速创建销毁实验环境

  • 体验基础设施即代码 IaaS

主要用到的工具:

  • 虚拟化工具 Proxmox VE

  • Terraform:开源的基础设施即代码工具

  • terraform-provider-proxmox:Terraform Proxmox Provider,通过 Proxmox VE 的 REST API 在创建虚拟机。

安装 Proxmox 虚拟化工具

从官网 下载 ISO 镜像,写入到 U 盘中。macOS上推荐使用 balenaEtcher 写盘。

电脑上插入 U 盘并从 U 盘启动,按照步骤一步步完成设置。

官方的 wiki 安装步骤很详细。

安装完成之后就可以创建虚拟机了,可以用命令行 qm create 或者 https://localhost:8006 Web UI来创建。

这样毕竟还是有点麻烦,每次都要执行很多操作。虽说可以编写脚本,但是通用型不够好。因此我们选择 Terraform,实现基础设施即代码。

创建 Ubuntu Cloud-Init Template

这里选用 Cloud-Init 的方式,从 cloud-init template 来克隆虚拟机。cloud-init 的虚拟机可以完成一些高级定制的初始化工作,有兴趣的参考 Cloud Init 文档。

登陆到 Proxmox VE 宿主机,使用 Ubuntu 20.04 cloud init image 来创建模板,从官网下载:

wget https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img

执行下面的命令创建一个虚拟机:

qm create 9000 --name "ubuntu-2004-cloudinit-template" --memory 1024 --cores 1 --net0 virtio,bridge=vmbr0
qm importdisk 9000 ubuntu-20.04-server-cloudimg-amd64.img local-lvm
qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-0
qm set 9000 --boot c --bootdisk scsi0
qm set 9000 --ide2 local-lvm:cloudinit
qm set 9000 --serial0 socket --vga serial0
qm set 9000 --agent enabled=1

将刚创建好的虚拟机转换成模板:

qm template 9000

模板与普通的虚拟机会有些许的不同,使用模板我们可以快速创建虚拟机。这里我们不会用 UI来创建。

创建 Proxmox 用户及 API Token

使用 Proxmox VE 的 REST API 需要权限校验,有用户名密码或者 API Token 两种方式。我们选用后者,登陆到 Proxmox 宿主机,执行如下命令创建角色、用户以及 API Token:

pveum role add TerraformProv -privs "VM.Allocate VM.Clone VM.Config.CDROM VM.Config.CPU VM.Config.Cloudinit VM.Config.Disk VM.Config.HWType VM.Config.Memory VM.Config.Network VM.Config.Options VM.Monitor VM.Audit VM.PowerMgmt Datastore.AllocateSpace Datastore.Audit"
pveum user add terraform-prov@pve
pveum aclmod / -user terraform-prov@pve -role TerraformProv
pveum user token add terraform-prov@pve terraform-token --privsep=0┌──────────────┬──────────────────────────────────────┐
│ key          │ value                                │
╞══════════════╪══════════════════════════════════════╡
│ full-tokenid │ terraform-prov@pve!terraform-token   │
├──────────────┼──────────────────────────────────────┤
│ info         │ {"privsep":"0"}                      │
├──────────────┼──────────────────────────────────────┤
│ value        │ 9748c040-a283-4c72-a48b-9ce784778eed │
└──────────────┴──────────────────────────────────────┘

这里我们会用到 token 的full-tokenid 和 value。

Terraform

有了 token 和 cloud-init 模板后,就是定义虚拟机了。

安装最新版本的 terraform。

brew install terraform

在空目录中创建 ubuntu.tf 文件,并按步骤进行配置:

配置要使用的 provider:

terraform {required_providers {proxmox = {source = "telmate/proxmox"}}
}

配置 provider

需要提供 pm_api_urlpm_api_token_id 和 pm_api_token_secret

provider "proxmox" {pm_tls_insecure     = truepm_api_url          = "https://192.168.1.4:8006/api2/json"pm_api_token_id     = "terraform-prov@pve!terraform-token"pm_api_token_secret = "9748c040-a283-4c72-a48b-9ce784778eed"
}

配置虚拟机资源

可以参考provider 的配置说明:

resource "proxmox_vm_qemu" "proxmox-ubuntu" {count = 1name  = "ubuntu-${count.index + 1}"desc  = "Ubuntu develop environment"# 节点名target_node = "pve"# cloud-init templateclone = "ubuntu-2004-cloudinit-template"# 关机 guest agentagent   = 0os_type = "ubuntu"onboot  = true# CPUcores    = 4sockets  = 1cpu      = "host"# 内存memory   = 16384scsihw   = "virtio-scsi-pci"bootdisk = "scsi0"# 硬盘设置,因计算的方式 101580M 代替 100Gdisk {slot     = 0size     = "101580M"type     = "scsi"storage  = "local-lvm"iothread = 1}# 网络network {model  = "virtio"bridge = "vmbr0"}lifecycle {ignore_changes = [network,]}# 记住这里要使用IP CIDR。因为只创建一个虚拟机,虚拟机的 IP 是 192.168.1.91。如果要创建多个虚拟机的话,IP 将会是 .91、.92、.93 。ipconfig0 = "ip=192.168.1.9${count.index + 1}/24,gw=192.168.1.2"# 用户名和 SSH keyciuser  = "addo"sshkeys = <<EOFSSH KEYS HEREEOF
}

创建虚拟机

第一次需要先执行 init 命令进行初始化:

terraform init

可以使用 terraform fmt 和 terraform validate 对配置文件进行格式化和校验。

然后执行 terraform apply 并输入 yes 开始创建虚拟机

proxmox_vm_qemu.proxmox-ubuntu[0]: Creating...
proxmox_vm_qemu.proxmox-ubuntu[0]: Still creating... [10s elapsed]
proxmox_vm_qemu.proxmox-ubuntu[0]: Still creating... [20s elapsed]
proxmox_vm_qemu.proxmox-ubuntu[0]: Still creating... [30s elapsed]
proxmox_vm_qemu.proxmox-ubuntu[0]: Still creating... [40s elapsed]
proxmox_vm_qemu.proxmox-ubuntu[0]: Creation complete after 42s [id=pve/qemu/100]

这样虚拟机就创建成功了,使用前面配置的私钥和 IP 地址就可以 ssh 到虚拟机中。

销毁虚拟机

虚拟机的销毁也很简单,执行 terraform destory 并输入 yes 即可。

总结

有了 Terraform 和 Proxmox VE 后,就可以愉快的使用干净的实验环境了。但是干净到一些开发中常用软件都没有,使用起来也不方便。

后续考虑通过 cloud-init 来对虚拟机进行高级定制,比如容器环境和 K3s 等等。

ec3e8e4bd80dd7c8dbafd1c29c54b242.gif

往期推荐

虚幻引擎5上的《黑客帝国》全新体验,爱了爱了

Medusa又一个开源的替代品

数字孪生+交通,到底有啥用?

5G专网,路在何方?

c7082e69a96b05c91f02e99ab1e6a185.gif

点分享

88d75a6be7f6b4ead6424dafe7d6e91e.gif

点收藏

61f5ae4f024de4d1ffbdc4eec7875268.gif

点点赞

91812fab8a50dbc1edd76223793840d8.gif

点在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512594.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux grub 下载,GRUB 2.04发布下载,附新功能介绍

GRUB 2.04版本发布了&#xff0c;它是在GRUB 2.02/2.00的基础上更新的&#xff0c;GRUB 2.02是目前使用得最多的多重启动管理器&#xff0c;全称为GRand Unified Bootloader&#xff0c;使用它可以引导几乎所有的操作系统&#xff0c;包括Unix、Linux、Windows&#xff0c;GRUB…

Go 调用 Java 方案和性能优化分享

简介&#xff1a; 一个基于 Golang 编写的日志收集和清洗的应用需要支持一些基于 JVM 的算子。 作者 | 响风 来源 | 阿里技术公众号 一 背景 一个基于 Golang 编写的日志收集和清洗的应用需要支持一些基于 JVM 的算子。 算子依赖了一些库: Groovy aviatorscript 该应用有如…

低代码发展专访系列之八:低代码平台能够打破企业「应用孤岛」现象吗?

话题&#xff1a;低代码发展系列专访 前言&#xff1a;2019年开始&#xff0c;低代码爆火。有人认为它是第四代编程语言&#xff0c;有人认为它是开发模式的颠覆&#xff0c;也有人认为是企业管理模式的变革……有很多声音&#xff0c;社区讨论很热烈。CSDN随后展开低代码平台产…

redis rdb aof区别_Redis(三):持久化RDB,fork.copyonwrite,AOF,RDBamp;AOF混合使用

Redis的数据全部在内存里&#xff0c;如果突然宕机&#xff0c;数据就会全部丢失&#xff0c;因此必须有一种机制来保证Redis的数据不会因为故障而丢失&#xff0c;这种机制就是Redis的持久化机制。Redis的持久化有两种&#xff0c;第一种是快照&#xff0c;第二种是AOF日志。快…

浅谈 Linux 高负载的系统化分析

简介&#xff1a; 浅谈 Linux 高负载的系统化分析&#xff0c;阿里云系统组工程师杨勇通过对线上各种问题的系统化分析。 讲解 Linux Load 高如何排查的话题属于老生常谈了&#xff0c;但多数文章只是聚焦了几个点&#xff0c;缺少整体排查思路的介绍。所谓 “授人以鱼不如授人…

AI、元宇宙技术方兴未艾,软件测试重装上阵

Larry Bernstain 曾说过“在系统测试阶段找出并修正错误&#xff0c;要比开发者自己完成这一工作多付出 2 倍的努力。而当系统已经交付使用之后找出并修正错误&#xff0c;要比系统测试阶段多付出 9 倍的努力。” 测试用例总结&#xff0c;图片来源&#xff1a;Applause以上我们…

如何快速搭建云原生企业级数据湖架构及实践分享

简介&#xff1a; 众所周知&#xff0c;数据湖技术在大数据领域炙手可热&#xff0c;随着在云上的广泛部署和应用&#xff0c;其业务价值逐渐获得业界共识。如何快搭建数据湖架构被越来越多的企业探讨。本文主要分享快速搭建云原生企业级数据湖架构及实践分享。 王震&#xff0…

5分钟搞定AlertManager接入短信、语音等10+种通知渠道

简介&#xff1a; Alert Manager是开源监控系统Prometheus中用于处理告警信息的服务&#xff0c;通过将日志服务开放告警配置为Alert Manager中的一个Receiver&#xff0c;可以将Alert Manager产生的告警消息发送到日志服务。 SLS告警管理 AlertManager作为Prometheus生态系统…

c语言编程输出数组元素之和,C语言 输出一个数组中,所有元素之和为0的子序列...

本程序用到了一个时间种子&#xff0c;来随机产生10个整数[-5~5]&#xff0c;函数是randData( )。还有一个计算子序列为0的函数ZeroSubarray( )。randData( )如下&#xff1a;int arr[10];void randData(int a[], int start, int end){srand(time(NULL));for (int i start; i …

小米百万美金大奖花落机器狗团队,5 年千亿重砸研发鼓励创新

1月4日&#xff0c;第三届小米百万美金技术大奖公布&#xff0c;CyberDog铁蛋四足仿生机器人在 68个参评项目中脱颖而出&#xff0c;一举获得最高奖。值得一提的是&#xff0c;该团队拥有两名 2020 年应届毕业生成员。 小米集团创始人、董事长兼CEO雷军在微博高兴地说道&#x…

日志审计携手DDoS防护助力云上安全

简介&#xff1a; 本文主要介绍日志审计结合DDoS防护保障云上业务安全的新实践。 日志审计携手DDoS防护助力云上安全 1 背景介绍 设想一下&#xff0c;此时你正在高速公路上开车去上班&#xff0c;路上还有其他汽车&#xff0c;总体而言&#xff0c;大家都按照清晰的合法速度…

MySQL 深潜 - 一文详解 MySQL Data Dictionary

简介&#xff1a; 在 MySQL 8.0 之前&#xff0c;Server 层和存储引擎&#xff08;比如 InnoDB&#xff09;会各自保留一份元数据&#xff08;schema name, table definition 等&#xff09;&#xff0c;不仅在信息存储上有着重复冗余&#xff0c;而且可能存在两者之间存储的元…

中国加速计算市场第二名,宁畅正领跑“智能算力定制”赛道

构建“元宇宙”最缺什么&#xff1f;对此&#xff0c;服务器新一线厂商宁畅给出的答案是“定制化算力”。 2022年1月6日&#xff0c;在“创立两周年媒体会”上宁畅透露&#xff0c;伴随IT头部企业进入“元宇宙”赛道&#xff0c;以及宁畅“智定”战略推进&#xff0c;2021年宁…

CPU Burst有副作用吗?让数学来回答!| 龙蜥技术

简介&#xff1a; 使用CPU Burst的副作用是什么&#xff1f;是否有不适用的场景呢&#xff1f;戳我给你答案~ 编者按&#xff1a;CPU Burst 特性已合入 Linux 5.14&#xff0c;Anolis OS 8.2、Alibaba Cloud Linux2、Alibaba Cloud Linux3也都支持CPU Burst特性。 在系列文章的…

用了 HTTPS,没想到还是被监控了!

作者 | 轩辕之风来源 | 编程技术宇宙大家好&#xff0c;我是轩辕。上周&#xff0c;微信里有个小伙伴儿给我发来了消息&#xff1a;随后&#xff0c;我让他截了一个完整的图&#xff0c;我一瞅&#xff0c;是HTTPS啊&#xff01;没用HTTP&#xff01;再一瞅&#xff0c;是www.b…

AI让边缘更智能 边缘让AI无处不在

简介&#xff1a; 城市管理和城市服务逐步走向智能化&#xff0c;智慧化。到2019底&#xff0c;全国100%的副省级城市&#xff0c;95%以上的地级市&#xff0c;以及50%以上的县级市均提出建设新型智慧城市&#xff0c;并已经有32个主要城市成立了专门的大数据管理机构&#xff…

开源自建/托管与商业化自研 Trace,如何选择?

简介&#xff1a; 随着微服务架构的兴起&#xff0c;服务端的调用依赖愈加复杂&#xff0c;为了快速定位异常组件与性能瓶颈&#xff0c;接入分布式链路追踪 Trace 已经成为 IT 运维领域的共识。但是&#xff0c;开源自建、开源托管或商业化自研 Trace 产品之间到底有哪些差异&…

python 覆盖list_【Python妙招】gt;gt;gt;看腻了能不能换成别的啊……当然可以啦:)...

原文作者&#xff1a;站在两个世界边缘 & 小象编辑&#xff1a;VL今天给大家介绍几个Python里(可能没那么广为人知的)小知识&#xff0c;希望能给大家带来帮助&#xff0c;让编程更有乐趣。1.如何修改解释器提示符正常情况下&#xff0c;我们在终端下执行Python 命令是这样…

阿里云IoT Studio升级版新增解决方案引擎 大幅提升方案交付效率

简介&#xff1a; 8月25日&#xff0c;阿里云发布IoT Studio升级版&#xff0c;新增了解决方案引擎&#xff0c;让设备方案商复用之前搭建的解决方案模板进行简单的定制化修改&#xff0c;即可交付。使整个物联网解决方案的交付过程由几个月&#xff0c;缩短到几小时&#xff0…

如何用 Nacos 构建服务网格生态

简介&#xff1a; Nacos 在阿里巴巴起源于 2008 年五彩石项目&#xff08;该项目完成微服务拆分和业务中台建设&#xff09;&#xff0c;成长于十年的阿里双十一峰值考验&#xff0c;这一阶段主要帮助业务解决微服务的扩展性和高可用问题&#xff0c;解决了百万实例扩展性问题&…