Proxmox virtual machine *automation* in Terraform

Christian Lempa
12 Apr 202210:34

Summary

TLDRВ этом видео рассказывается о том, как автоматизировать создание виртуальных машин с помощью Terraform в Proxmox. Автор использует бесплатный инструмент Packer для создания шаблонов виртуальных машин с Ubuntu и настройкой Docker через скрипты. В видео объясняется, как настроить API-токен для Terraform, создать файлы конфигурации и использовать провайдера Proxmox. Также рассматривается использование Cloud-init для настройки сетевых параметров и добавления пользователей. В результате, виртуальная машина создается полностью автоматически с заданными параметрами.

Takeaways

  • 😀 В видео показано, как автоматизировать создание шаблонов виртуальных машин с помощью прокси-сервера и бесплатного инструмента Packer.
  • 🛠️ Terraform используется для автоматизации виртуальных машин, что позволяет избежать ручного клонирования шаблонов и настройки учетных данных, IP-конфигураций и ресурсов в веб-интерфейсе Proxmox.
  • 🔗 Необходимо иметь базовое понимание Terraform, так как видео не будет полностью объяснять все основы этого инструмента.
  • 🔗 Для использования Terraform с Proxmox необходимо установить и настроить провайдер Terraform для Proxmox, который доступен на GitHub.
  • 🔑 Создание API-токена в Proxmox для аутентификации Terraform на серверах и создания необходимых ресурсов.
  • 💾 Используются файлы `provider.tf` и `credentials.auto.tfvars` для хранения конфигурационных настроек и секретов соответственно.
  • 📝 В видео рассматривается создание файла с ресурсами виртуальной машины, где определяются параметры, такие как имя, описание, идентификатор виртуальной машины, целевой узел, количество ядер процессора, режим CPU, объем памяти и шаблон виртуальной машины для клонирования.
  • 🌐 Для подключения виртуальной машины к сети используется сетевой мост по умолчанию, и также определяется конфигурация диска, учитывая, что шаблон уже содержит виртуальный жесткий диск с установленной операционной системой.
  • 🔄 В процессе настройки виртуальной машины с помощью Terraform можно использовать Cloud-init для указания настроек, которые должны быть подготовлены при запуске виртуальной машины, таких как статический IP-адрес, DNS-сервер, имя пользователя и открытый SSH-ключ.
  • ⏲️ Пример в видео показывает, что создание новой виртуальной машины с использованием Terraform занимает около一分半 минуты, что демонстрирует эффективность автоматизации в инфраструктуре Proxmox.

Q & A

  • Что такое Packer и как оно используется в видео?

    -Packer - это бесплатный и открытый инструмент для автоматизации создания образов виртуальных машин. В видео он используется для автоматической установки и настройки образов Ubuntu с помощью пользовательских скриптов для установки Docker и настройки IP-адреса или конфигурации с использованием Cloud Init.

  • Какое основное отсутствующее в предыдущем видео было решено в этом видео?

    -В этом видео решена задача автоматизации создания виртуальных машин, так как в предыдущем видео они клонирулись вручную, и также требовались настройка учетных данных, IP-конфигурации и ресурсов в веб-интерфейсе Proxmox.

  • Что такое Terraform и как оно используется для автоматизации виртуальных машин?

    -Terraform - это бесплатный и открытый инструмент автоматизации инфраструктуры в коде, который позволяет определить все необходимые ресурсы в коде и автоматически настраивает их в вашей среде. В видео он используется для автоматизации создания виртуальных машин в Proxmox с использованием провайдера Proxmox.

  • Какие преимущества предлагает использование Terraform для управления инфраструктурой?

    -Terraform позволяет определять и настраивать инфраструктуру с помощью кода, что упрощает управление, обеспечивает повторяемость и позволяет интегрироваться с различными поставщиками облачных услуг.

  • Какой провайдер Terraform используется для интеграции с Proxmox в видео?

    -В видео используется неофициальный провайдер Terraform от Tellmate для Proxmox, который предоставляет возможность подключения и управления ресурсами Proxmox через Terraform.

  • Как создать токен API для аутентификации Terraform в Proxmox?

    -Для создания токена API в Proxmox необходимо выбрать дата-центр, перейти в раздел 'Разрешения', затем 'API токены' и добавить новый токен для конкретного пользователя. Необходимо выбрать настройку 'Privilege separation', чтобы токен имел те же привилегии, что и пользователь, и скопировать секрет токена.

  • Чем отличается использование Terraform для управления виртуальными машинами от ручного управления?

    -С использованием Terraform все настройки виртуальных машин определяются и применяются через код, что позволяет автоматизировать процессы создания, настройки и управления виртуальными машинами без ручного вмешательства.

  • Какие параметры нужно указать для создания виртуальной машины в Terraform?

    -Для создания виртуальной машины в Terraform необходимо указать имя, описание, идентификатор виртуальной машины, целевой узел, количество CPU ядер и сокетов, режим CPU, объем памяти, шаблон виртуальной машины, сетевые параметры и, возможно, дополнительные настройки дисков.

  • Что такое Cloud Init и как оно используется в контексте Terraform и Packer?

    -Cloud Init - это инструмент для настройки облачных виртуальных машин, который используется в Packer для указания настроек, которые должны быть применены при запуске виртуальной машины, таких как IP-адрес, DNS-сервер, имя пользователя и пароль. В Terraform это позволяет также настраивать виртуальные машины при создании.

  • Как проверить, какие ресурсы Terraform создаст или изменит перед применением?

    -Для проверки ресурсов, которые будут созданы или изменены Terraform, используется команда `terraform plan`. Эта команда показывает предпросмотр изменений перед их применением с помощью команды `terraform apply`.

Outlines

00:00

🔧 Автоматизация виртуальных машин с Terraform и Proxmox

В этом разделе рассматривается процесс автоматизации создания виртуальных машин в Proxmox с использованием Terraform. Автор упоминает предыдущий видеоролик о создании шаблонов виртуальных машин с помощью Packer и Cloud Init. Теперь он собирается автоматизировать процесс клонирования шаблона в новую виртуальную машину и настройки учетных данных, IP-конфигураций и ресурсов через веб-интерфейс Proxmox. В качестве инструмента для этой задачи выбран Terraform, который является популярным инструментом для управления инфраструктурой как кодом. Также упоминается спонсор видео - Teleport, который предоставляет доступ к удаленным ресурсам с использованием двухфакторной аутентификации и аудита. В заключение автор напоминает о доступности видеоуроков по Terraform и Packer, а также ссылки на проектные файлы на GitHub.

05:01

🔐 Настройка подключения Terraform к Proxmox

Второй параграф посвящен подробной настройке подключения Terraform к серверу Proxmox. Автор объясняет, как создать токен API в Proxmox для аутентификации Terraform, указывая на важность сохранения секрета токена. Далее описывается создание файла конфигурации провайдера Terraform (provider.tf), включая необходимую версию Terraform и настройки провайдера Proxmox с использованием таймейта провайдера. Также рассматривается создание файла с учетными данными (credentials.auto.tfvars), который не должен храниться в репозитории из-за чувствительности данных. В заключение автор упоминает о возможных проблемах с самоподписанными сертификатами и соответствующих настройках в Terraform.

10:02

🚀 Создание и настройка виртуальной машины с Terraform

В заключительном разделе видео скрипта рассматривается создание файла ресурсов виртуальной машины (srv-demo1.tf) в Terraform. Автор детально описывает процесс определения параметров виртуальной машины, включая имя, описание, идентификатор VM, целевой узел, агента и другие настройки, такие как количество ядер процессора, режим CPU, объем памяти и шаблон VM для клонирования. Также упоминается настройка сети и дискового пространства. Автор подробно объясняет использование Cloud Init для настройки IP-адреса, DNS-сервера и добавления пользователей с SSH-ключами. В заключение проводится планирование ресурсов с помощью команды 'terraform plan' и применение изменений с помощью 'terraform apply', что приводит к созданию виртуальной машины на Proxmox. Автор радуется скорости и простоты процесса, а также делится своими мыслями о полном автоматизации управления инфраструктурой на Proxmox.

Mindmap

Keywords

💡Packer

Packer - это инструмент с открытым исходным кодом, используемый для создания шаблонов виртуальных машин. В видео Packer используется для автоматической установки образов Ubuntu и пакетов с использованием пользовательских скриптов оболочки для установки Docker и настройки конфигурации IP-адреса с помощью Cloud Init. Packer играет ключевую роль в автоматизации процесса создания шаблонов виртуальных машин, что облегчает последующее развертывание и настройку новых виртуальных машин.

💡Proxmox

Proxmox - это гипервизор с открытым исходным кодом, используемый для управления виртуальными машинами и контейнерами LXC. В контексте видео, Proxmox используется как платформа для развертывания виртуальных машин, автоматизированной с помощью Terraform. Проксмокс предоставляет веб-интерфейс для ручной настройки виртуальных машин, но автор видео стремится к полной автоматизации этого процесса.

💡Terraform

Terraform - это инструмент с открытым исходным кодом для автоматизации инфраструктуры в виде кода. В видео он используется для автоматизации создания и настройки виртуальных машин на Proxmox. Terraform позволяет определять все необходимые ресурсы в коде, что обеспечивает повторяемость и контроль версий для инфраструктуры. В видео демонстрируется, как Terraform используется для автоматического клонирования шаблона виртуальной машины и настройки параметров, таких как IP-адреса и учетные данные.

💡Cloud Init

Cloud Init - это инструмент для настройки виртуальных машин, работающих в облаке, который также используется в сценарии с Proxmox. В видео Cloud Init используется для автоматической настройки виртуальной машины при запуске, включая настройку IP-адреса, DNS-сервера и добавление пользователей. Это позволяет упростить процесс настройки новой виртуальной машины после ее создания.

💡API Token

API Token - это уникальный идентификатор, используемый для аутентификации и авторизации в API. В видео API Token создается в Proxmox для предоставления Terraform разрешений на доступ к серверам и создание ресурсов. Этот токен включает в себя имя пользователя и секретный ключ, которые должны быть сохранены в защищенном месте и использованы для подключения Terraform к Proxmox.

💡Infrastructure as Code

Infrastructure as Code (IaC) - это практика определения и управления инфраструктурой с помощью кода в виде текстовых файлов, аналогично программному обеспечению. В видео это концепция важна, так как Terraform используется для определения виртуальных машин и их параметров в коде, что позволяет автоматизировать их развертывание и настройку.

💡Provider

Provider в контексте Terraform - это плагин, который позволяет Terraform взаимодействовать с различными сервисами и платформами, такими как Proxmox. В видео рассматривается провайдер Proxmox, разработанный сообществом, который позволяет Terraform управлять виртуальными машинами в Proxmox.

💡VM Template

VM Template - это предварительно настроенный образ виртуальной машины, который можно использовать для быстрого создания новых виртуальных машин с одинаковой конфигурацией. В видео автор использует шаблоны VM, созданные с помощью Packer, для автоматического развертывания виртуальных машин в Proxmox с помощью Terraform.

💡SSH Key

SSH Key - это пара ключей, используемых для аутентификации в системе без использования пароля. В видео автор добавляет публичный SSH-ключ в настройках Cloud Init для автоматической настройки доступа к виртуальной машине после ее создания, что обеспечивает безопасный и удобный способ доступа к серверу.

💡Terraform Plan and Apply

Terraform Plan и Apply - это две ключевые команды Terraform, используемые для проверки и применения изменений в инфраструктуре. В видео автор использует команду 'terraform plan' для предварительного просмотра изменений, а затем 'terraform apply' для применения этих изменений и создания виртуальной машины в Proxmox.

Highlights

介绍了如何使用Packer自动化创建自定义虚拟机模板。

展示了如何使用Terraform自动化虚拟机本身的创建过程。

即使没有使用Packer准备的自定义镜像,也可以使用Terraform与Proxmox集成。

Terraform是一个开源的基础设施即代码自动化工具。

Terraform允许通过代码定义所有资源,而不是通过Web界面或手动过程。

介绍了如何使用Terraform部署云基础设施,如Kubernetes和Docker。

介绍了Proxmox的Terraform提供者,这是一个非官方的自定义扩展。

创建API令牌是Terraform连接到Proxmox服务器的必要步骤。

创建了名为provider.tf的文件,用于存放Terraform的一般配置设置。

创建了一个单独的credentials.auto.tfvars文件来存放敏感信息。

如果使用自签名证书,需要在Terraform提供者设置中添加insecure参数。

创建了srv-demo1.tf文件来定义要在Proxmox中创建的虚拟机资源。

在Terraform文件中定义了虚拟机的一般设置,如名称、描述、VM ID和目标节点。

设置了虚拟机的CPU核心数、内存大小和从哪个VM模板克隆。

介绍了如何在Terraform中使用cloud-init来配置虚拟机启动时的设置。

展示了如何运行terraform plan命令来查看将要创建的资源。

展示了如何运行terraform apply命令在Proxmox上应用更改。

展示了如何通过Terraform自动创建并配置新的虚拟机。

讨论了如何使用Terraform管理Proxmox服务器上的资源,而无需手动操作。

Transcripts

play00:00

hey everybody in one of my last videos

play00:02

i've shown you how you can automate

play00:04

custom virtual machine templates in

play00:05

proxbox we use the free and open source

play00:08

tool packer to automatically install our

play00:10

images with ubuntu and we package it

play00:12

with custom shell scripts to install

play00:14

docker and set up an ip address or use

play00:16

configuration with cloud init but there

play00:18

was one big thing missing in this video

play00:20

and this is automating the virtual

play00:22

machines itself because we still cloned

play00:24

this template manually to a new virtual

play00:26

machine and we also needed to set up

play00:28

credentials ip configurations and

play00:30

resources in the web ui of proxbox and

play00:33

that is exactly what i want to automate

play00:35

in this video with one of my favorite

play00:37

tools terraform so let's do this

play00:42

by the way if you haven't watched the

play00:44

previous video with packers don't worry

play00:46

you can still follow this video along

play00:48

because the terraform proxmox

play00:49

integration doesn't need a custom image

play00:52

prepared with packer you can use the

play00:54

same automation scripts with any other

play00:55

custom vm template you have created and

play00:57

prepared with cloud init regardless of

play01:00

how you've done it i also think it helps

play01:02

to have some basic knowledge about

play01:04

terraform because i probably won't cover

play01:06

all the basics here so if you'd like to

play01:08

learn more about terraform and packer

play01:10

i've linked you both of my video

play01:12

tutorials in the description of this one

play01:14

and then you can check it out later and

play01:16

of course you will also find the project

play01:17

files for this tutorial on my personal

play01:20

github page in the boilerplates

play01:21

repository so just navigate to terraform

play01:24

proxmox and then you will find the

play01:26

templates that i'm explaining here in

play01:28

this video

play01:29

but before we start with the template

play01:31

first i want to say a few words about

play01:33

today's sponsor teleport

play01:35

so we keep talking about amazing free

play01:37

and open source tools teleport is an

play01:39

access proxy to protect your remote

play01:41

resources like ssh linux servers

play01:43

kubernetes databases or web applications

play01:46

with two-factor authentication and an

play01:48

audit logging i always use it when i

play01:50

need to log in from outside my home

play01:52

network or securely access my cloud

play01:54

resources is a great application so just

play01:56

donate and try it out of course you will

play01:58

find a link to their website in the

play01:59

description down below okay so let's

play02:01

first recap what you might or might not

play02:04

know about terraform this is a free open

play02:06

source infrastructure as code automation

play02:09

tool so the goal of infrastructure is

play02:11

code is that you don't need to set up

play02:13

install and configure your it

play02:14

infrastructure through web interfaces or

play02:17

manual processes anymore instead you

play02:19

define all the resources you need in

play02:21

code very similar to a programming

play02:23

language where you describe an object in

play02:25

some states you want these resources to

play02:27

have whatever you define in the code

play02:29

therefore makes sure that this is

play02:31

happening in your environment i've

play02:33

previously used it to deploy cloud

play02:34

infrastructure like kubernetes and

play02:36

docker and it's a very common devops

play02:38

tool that integrates well with other

play02:40

cloud providers but i also recently

play02:42

found a custom teraframe provider for

play02:44

proxmox

play02:46

i'm using proxmoxnow for quite some time

play02:48

in my home lab and it's absolutely my

play02:50

favorite hypervisor to run virtual

play02:51

machines and i've also done some videos

play02:54

about it and i guess many of you guys

play02:55

will already use it

play02:57

so let's take a look at the proxbox

play02:59

provider in the terraform rager street

play03:01

which is made by tellmate and you should

play03:03

know that this is not an official

play03:05

provider because hashicorp the vendor of

play03:07

terraform opened terraform up for any

play03:10

custom implementations and makes it very

play03:12

easy for developers to write their own

play03:14

extensions and the proxmox provider is

play03:17

such a custom extension however i've

play03:19

seen that it's around for quite some

play03:21

time and supported by many people so

play03:23

it's worth taking a look at the gita

play03:25

project it's pretty cool and in the

play03:27

official documentation you can also see

play03:29

how you can use it in terraform to

play03:31

connect it to your local proxmox server

play03:33

but don't worry of course i will walk

play03:34

you through this stuff as well

play03:37

so first we need to create an api token

play03:39

in proxmox because terraform needs to

play03:42

somehow authenticate to our servers and

play03:44

create the required resources if you

play03:46

don't know how to do that in proxmox you

play03:49

need to select your data center and go

play03:50

to permissions api tokens add a new api

play03:54

token for a specific user in my case

play03:56

i've just used the root user here

play03:58

because this user already has all the

play04:00

privileges we need in terraform just

play04:02

enter a name for the token id and now

play04:05

it's really important to select the

play04:06

privilege separation setting because we

play04:09

want our api token to have the same

play04:11

privileges as the root user

play04:13

note that the api token secret will only

play04:16

show up once so when you close the

play04:17

window and forgot the secret you need to

play04:19

create another one and then you just

play04:21

need to copy this token and put these

play04:23

settings in a credentials file in

play04:25

terraform so take care the api token is

play04:28

username and the token id separated with

play04:30

an exclamation mark now that we have the

play04:33

api token let's create the base files

play04:35

for this project and i always start

play04:37

creating a file which i call provider.tf

play04:40

where i put all the general

play04:41

configuration settings for terraform so

play04:44

first i defined the required version for

play04:46

it and the required provider section and

play04:49

here we just need to define proxmox and

play04:51

put the tailmate proxmox provider as our

play04:53

source

play04:54

if you want to specify a version you can

play04:56

also do it as well here and then we need

play04:59

to define three variables for the

play05:01

proxmox credentials remember that you

play05:03

should never store the actual secrets

play05:05

here in the terraform project so just

play05:07

declare the variables for the api url

play05:10

the token id and the token secret as

play05:12

string objects the last two ones is

play05:14

sensitive

play05:15

and i've then created a separate file

play05:18

which i've called credentials.out.tfrs

play05:21

here you can put the secrets in note

play05:24

this file should not be included in any

play05:26

repository so keep it secret because

play05:28

here you can add the three variables to

play05:30

connect to your proxmox server these

play05:32

auto dot tfr files by the way are

play05:34

special in terraform because they are

play05:36

automatically loaded when you locate

play05:38

them in the same project directory so

play05:40

you don't need to specify them in the

play05:42

command later very nice now let's come

play05:44

back to the provider's file and here we

play05:46

just need to set the three parameters

play05:48

that are necessary for the connection to

play05:50

the values of our variables and that

play05:53

should be all no one more thing if

play05:55

you're using a self-signed certificate

play05:56

and your client doesn't trust the

play05:58

connection to the proxmox ui you also

play06:00

need to add a pmt ls insecure attribute

play06:03

in the provider settings and set it to

play06:05

true

play06:06

but then that should be all so i've now

play06:08

initiated the terraform project by

play06:11

executing terraform in it until now that

play06:13

all was pretty straightforward if you're

play06:15

already familiar with terraform it

play06:17

should be easy and now we can create the

play06:18

file for our virtual machine resources

play06:20

we want to create in proxmox so i've

play06:22

just created a new file in the project

play06:24

folder which i've called srv demo one

play06:27

that will be a simple ubuntu server that

play06:28

i want to create from a proxmox vm

play06:30

template that i've already prepared in

play06:33

packer so on my proxmox server you can

play06:35

see these templates i want to use the

play06:37

template with the id 902 which is just a

play06:40

pre-installed ubuntu server in the 20.04

play06:42

lts version now in the terraform file

play06:45

i've created a resource from the type

play06:48

proxbox vmq mo with the name srv demo1

play06:51

and first you need to define the general

play06:53

settings of the vm like the name the

play06:55

description the vm id and what is the

play06:57

target node so where do you want this vm

play06:59

to be created on now the next parameter

play07:02

is the agent and this is pretty

play07:03

important it took me quite some time to

play07:05

find it out because in the past i had

play07:08

some problems with the speed of

play07:09

terraform in combination with the

play07:11

tailmate proxmox provider and after

play07:14

researching i found out this has

play07:16

something to do when the qmo guest agent

play07:18

is installed on this virtual machine but

play07:21

you haven't set this agent parameter

play07:22

into the terraform resource so keep that

play07:25

in mind when you're using the guest

play07:26

agent in your vm template don't forget

play07:29

to set this agent parameter to one and

play07:31

now we can specify the other parameters

play07:34

for this virtual machine like how many

play07:36

cpu cores and sockets you want to give

play07:38

it what should be the cpu mode and how

play07:40

much memory the virtual machine should

play07:41

have and of course from which vm

play07:44

template you want to clone it from now

play07:46

in this parameter you just need to set

play07:48

the name of the vm template not the id

play07:50

and it's also important to connect this

play07:52

virtual machine to a network so i've

play07:54

added my default vm bridge and now comes

play07:56

something that also might be a bit

play07:58

confusing because you can specify the

play08:00

disk layout for this virtual machine but

play08:03

be careful when you're using a vm

play08:04

template because this vm template

play08:06

already has a virtual hard drive because

play08:09

it already has an operating system

play08:10

installed on it and when you now specify

play08:13

a disk in terraform they need to have

play08:15

the exact same statements so take care

play08:18

of that you're specifying the same

play08:20

storage location the same type and size

play08:22

for the disk otherwise if these settings

play08:24

are different chevron will most likely

play08:26

create a second hard disk on this vm if

play08:28

the parameter don't match with the

play08:30

template and now comes something that

play08:32

i've already explained in my packer

play08:34

tutorial and this is really amazing it

play08:36

is cloud init remember in my packer

play08:38

tutorial we've used cloud init to

play08:40

specify settings that should be

play08:42

provisioned when the virtual machine is

play08:43

starting like an ip address add a dns

play08:46

server or add username and password

play08:49

and the terraform proxybox provider can

play08:51

also do this for you so in this section

play08:53

i have now specified the os type to

play08:56

cloud init and gave this machine some

play08:58

network configuration i added a static

play09:00

ip and gave it a dns server and i also

play09:03

added an additional user and a public

play09:05

ssh key know that we've done all of this

play09:08

stuff you can see it's not much that we

play09:10

need to specify here so let's go into

play09:12

terraform and run the terraform plan

play09:14

command so this will tell us which

play09:16

resources terraform will create when we

play09:18

apply the changes and if everything is

play09:20

okay you can run the terraform apply

play09:22

command to make these changes happening

play09:25

on proxmox you can see that it now

play09:27

already starts connecting to the server

play09:29

and it already creates the virtual

play09:31

machine

play09:32

now that might take some time to copy

play09:34

because it uses a full clone and not a

play09:36

linked clone image but after this is

play09:38

done it starts up the virtual machine

play09:40

and we should be able to just access it

play09:42

with a static ip address we have defined

play09:44

in the terraform file

play09:46

and yeah we are just now connected to

play09:48

our server and it just took like one and

play09:51

a half minutes to create this new

play09:52

virtual machine fully automatic in code

play09:55

if you ask me that's really amazing so

play09:57

currently i'm not managing any resources

play09:59

on my proxbox server manually i've

play10:01

created a few repositories for all my

play10:03

production and testing vms

play10:06

and i'm all managing entire from now and

play10:08

you can by the way also create and

play10:10

provision lxc containers as well i

play10:12

personally haven't done this because i'm

play10:14

not using alex c but i guess the process

play10:16

will be very similar to the template

play10:18

that i've just used in this video and i

play10:20

hope this will help you in your project

play10:22

as well so please tell me in the

play10:23

comments what are you using to manage

play10:25

your home lab infrastructure and as

play10:27

always thanks everybody for watching

play10:28

enjoy the rest of your day take care of

play10:30

yourself and i see you soon bye

Rate This

5.0 / 5 (0 votes)

相关标签
TerraformProxmoxАвтоматизацияВиртуальные машиныDevOpsКloud-initDockerSSHHomelab
您是否需要英文摘要?