mirror of
https://github.com/batonogov/learn-devops.git
synced 2025-11-29 16:53:01 +00:00
* Update readme * Update gitignore * Upgrade vm_id * Upgrade bpg/proxmox --------- Co-authored-by: Fedor Batonogov <f.batonogov@yandex.ru>
126 lines
7.0 KiB
Markdown
126 lines
7.0 KiB
Markdown
# **Infrastructure as Code** и системы управления конфигурацией
|
||
|
||
Для развёртывания инфраструктуры согласно подходу **Infrastructure as Code**, используя **OpenTofu/Terraform** и создания необходимых ресурсов необходимо выполнить следующие шаги.
|
||
|
||
---
|
||
|
||
## Что такое OpenTofu/Terraform
|
||
|
||
**Terraform** — это инструмент для создания и управления инфраструктурой.
|
||
С его помощью можно создавать, обновлять и удалять любые интересующие вас ресурсы в различных облачных и не только облачных сервисах.
|
||
|
||
**Terraform** позволяет описывать инфраструктуру в виде кода, что делает процесс её создания более эффективным и управляемым.
|
||
Код на языке **HCL** (HashiCorp Configuration Language) описывает требуемую инфраструктуру, а **Terraform** автоматически создаёт или обновляет её.
|
||
|
||
Информация об **OpenTofu** взята с [habr.com](https://habr.com/ru/companies/flant/news/762356/).
|
||
|
||
20 сентября, на сайте **Linux Foundation** появилась новость о том, что фонд принял **OpenTofu** в число своих проектов.
|
||
Теперь свободный форк **Terraform** будет развиваться под управлением **Linux Foundation**, что дает ряд преимуществ:
|
||
|
||
- Он будет всегда **Open Source** — то есть соответствовать **Open Source Definition**, а не размытому определению «открытые исходники».
|
||
- Он будет управляться открытым сообществом, а значит, прозрачно реализовывать и отражать видение разных разработчиков, а не единственного вендора.
|
||
- Он будет беспристрастным — то есть не зависящим от прихотей одной компании.
|
||
|
||
Кроме того, сами создатели открытого форка **Terraform** отмечают еще две особенности, которые повлечет за собой принятие проекта в **Linux Foundation**:
|
||
обратная совместимость и хорошо проработанная модульная архитектура.
|
||
|
||
Официальный сайт проекта [OpenTofu](https://opentofu.org/).
|
||
Репозиторий провайдера [bpg/terraform-provider-proxmox](https://github.com/bpg/terraform-provider-proxmox).
|
||
|
||
---
|
||
|
||
## Подготовка Proxmox
|
||
|
||
### Создание шаблона Ubuntu 22.04
|
||
|
||
На узле Proxmox создаем шаблон **Cloud Init** **Ubuntu 22.04**
|
||
|
||
```sh
|
||
export PROXMOX_STORAGE=proxmox-data-01
|
||
apt update && apt install libguestfs-tools -y && \
|
||
wget --backups=1 https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img && \
|
||
virt-customize -a jammy-server-cloudimg-amd64.img --install qemu-guest-agent && \
|
||
qm create 2204 --name "ubuntu-22.04-cloudinit-template" --cores 2 --memory 2048 --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci && \
|
||
qm set 2204 --virtio0 ${PROXMOX_STORAGE}:0,import-from=/root/jammy-server-cloudimg-amd64.img && \
|
||
qm set 2204 --ide2 ${PROXMOX_STORAGE}:cloudinit && \
|
||
qm set 2204 --boot order=virtio0 && \
|
||
qm set 2204 --serial0 socket --vga serial0 && \
|
||
qm template 2204
|
||
```
|
||
|
||
---
|
||
|
||
## Последовательность действий при работе с OpenTofu
|
||
|
||
### Инициализируем рабочий каталог, содержащий файлы конфигурации OpenTofu/Terraform
|
||
|
||
Команда **tofu init** инициализирует рабочий каталог, содержащий файлы конфигурации **OpenTofu**. Это первая команда, которую следует выполнить после записи новой конфигурации **OpenTofu** или клонирования существующей из системы управления версиями. Эту команду безопасно запускать несколько раз.
|
||
|
||
```bash
|
||
tofu init
|
||
```
|
||
|
||
### Проверяем файлы конфигурации в каталоге
|
||
|
||
Команда **tofu validate** проверяет файлы конфигурации в каталоге, ссылаясь только на конфигурацию и не обращаясь к каким-либо удаленным службам, таким как удаленное состояние, API-интерфейсы провайдеров и т.д.
|
||
|
||
```bash
|
||
tofu validate
|
||
```
|
||
|
||
### Создаем план
|
||
|
||
Команда **tofu plan** позволяет предварительно просмотреть действия, которые **OpenTofu** предпримет для изменения вашей инфраструктуры, или сохранить предполагаемый план, который вы сможете применить позже.
|
||
|
||
```bash
|
||
tofu plan
|
||
```
|
||
|
||
### Выполняем изменения, определенные конфигурацией **OpenTofu**
|
||
|
||
Команда **tofu apply** является более распространенным рабочим процессом вне автоматизации. Если вы не передадите сохраненный план команде применения, она выполнит все функции плана и предложит вам утвердить его перед внесением изменений.
|
||
|
||
```bash
|
||
tofu apply
|
||
```
|
||
|
||
### Удаляем ресурсы
|
||
|
||
Команда **tofu destroy** создает план выполнения для удаления всех ресурсов, управляемых в этом проекте.
|
||
|
||
```bash
|
||
tofu destroy
|
||
```
|
||
|
||
---
|
||
|
||
## Как задавать переменные
|
||
|
||
Значения переменных можно задать несколькими способами:
|
||
|
||
1. Через файл с расширением **.tfvars** (пачками)
|
||
|
||
```bash
|
||
instance_zone=ru-central-b
|
||
```
|
||
|
||
По умолчанию загружаем значения из **terraform.tfvars**, но можно явно обозначить файл для загрузки:
|
||
|
||
```bash
|
||
tofu apply -var-file="testing.tfvars"
|
||
```
|
||
|
||
2. Через переменные окружения. Переменная должна начинаться с **TF*VAR***, а дальше уже имя переменной
|
||
|
||
### Для простого типа
|
||
|
||
```bash
|
||
export TF_VAR_instance_zone=ru-central-d
|
||
```
|
||
|
||
### Для составного типа
|
||
|
||
```bash
|
||
export TF_VAR_instance_zone='["ru-central-a","ru-central-b"]'
|
||
```
|