Загрузка данных
ADM-PC:
Все последующие действия выполняются из-под доменного пользователя admin01
Перейдём в каталог ~/infra/terraform:
cd ~/infra/terraform
Создаём файл terraform.tf и указываем каких провайдеров будем использовать:
cat <<EOF > terraform.tf
terraform {
required_providers {
proxmox = {
source = "bpg/proxmox"
version = "0.89.1"
}
freeipa = {
source = "camptocamp/freeipa"
version = "1.0.0"
}
}
}
EOF
Создаём файл providers.tf и указываем необходимые для подключения параметры для каждого из провайдеров:
cat <<EOF > providers.tf
provider "proxmox" {
endpoint = var.pve_endpoint
api_token = var.pve_api_token
insecure = true
}
provider "freeipa" {
host = var.freeipa_host
username = var.freeipa_username
password = var.freeipa_username_password
insecure = true
}
EOF
Создаём файл variable.tf и указываем переменные которые будет использовать Terraform:
cat <<EOF > variable.tf
variable "pve_endpoint" {
type = string
description = "Access to the PVE web interface"
}
variable "pve_api_token" {
type = string
description = "PVE API Token"
sensitive = true
}
variable "freeipa_host" {
type = string
description = "Access to the FreeIPA host"
}
variable "freeipa_username" {
type = string
description = "Access to the FreeIPA host username"
}
variable "freeipa_username_password" {
type = string
description = "Access to the FreeIPA host username password"
sensitive = true
}
EOF
Создаём файл terraform.tfvars и указываем значения переменных которые были указаны в файле variable.tf:
cat <<EOF > terraform.tfvars
pve_endpoint = "https://192.168.0.254:8006"
pve_api_token = "root@pam!terraform=dafccb03-5a17-4098-8109-bc056130f9d2"
freeipa_host = "infra-srv1.au-team.cloud"
freeipa_username = "admin"
freeipa_username_password = "P@ssw0rd"
EOF
Значение для переменной pve_api_token получено посредством создания API Token в веб-интерфейсе гипервизора:
Инициализируем директорию для работы с Terraform и указанным провайдером:
terraform init
должно получится следующее:
Проверить можно следующим образом:
Создаём файл, например: vm.tf и указываем все минимально необходимые параметры для создания требуемых ВМ:
в соответствии с "Таблица характеристики ВМ" и "Итоговой топологией"
resource "proxmox_virtual_environment_vm" "vms" {
count = 5
name = "k8s-srv${count.index + 1}"
node_name = "cloud0"
clone {
vm_id = 101
full = true
}
cpu {
cores = 2
type = "x86-64-v2-AES"
}
memory {
dedicated = 2048
}
initialization {
datastore_id = "local-lvm"
ip_config {
ipv4 {
address = "192.168.0.20${count.index + 1}/24"
gateway = "192.168.0.254"
}
}
dns {
domain = "au-team.cloud"
servers = ["192.168.0.101"]
}
user_account {
username = "altlinux"
password = "P@ssw0rd"
keys = ["ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCU4RoVAWgyb9dtZ+GmrGqLEYSVZYPryVu3iUNlllqc9ZpPhMKZ3RrOEDYWO9ulnWP6/Nqvj2BrcNATjNOmdujYjayP1ouGirFSNk1QVtCoelYHGqnClRfF+obvvHiyX3EsAT19OXNba6K1JAOYbrJJ5m9lkwtKVtSYogsHzXh7J7kpyAyFDxYHD+J6tWA0YVLhV+iRGzcnxlGLEBi7mBbqkzv+hd7BFEBhsEh0DK5ccKN3XtkgMWRrnBuWga3hNKpgP3cqHFiITCoj2f7kq4xlFC/8UKKAsWiRI19ASzhtLk0HwnI3akD24eE5DyarIZD0guOR6NBDx7AWBSb4/T1fYLtyWSVlyDOz9mRMoySdD/qvaCDw/5RtgLUtV6sPH8Cpg+1HAIkaHH+MICVQA/XOuUqlH0PKb+S7B9zdhWCZ0W9vtbfoEiRxEiMmeoDDkOoY447LP6wL/LN8ram7RSZqH7pRiM4H9slYxeFRqZ6yC+bAL/cmzARSQtItebS/Hik= admin01@adm-pc.au-team.cloud"]
}
}
disk {
datastore_id = "local-lvm"
interface = "scsi0"
discard = "on"
size = 20
}
network_device {
bridge = "cloudnet"
firewall = false
}
}
Создаём файл, например: dns.tf и указываем все минимально необходимые параметры для создания требуемых записей DNS:
resource "freeipa_dns_record" "records-type-a" {
count = 5
dnszoneidnsname = "au-team.cloud."
idnsname = "k8s-srv${count.index + 1}"
records = ["192.168.0.20${count.index + 1}"]
type = "A"
}
resource "freeipa_dns_record" "records-type-ptr" {
count = 5
dnszoneidnsname = "0.168.192.in-addr.arpa."
idnsname = "20${count.index + 1}"
records = ["k8s-srv${count.index + 1}.au-team.cloud."]
type = "PTR"
}
Выполняем развёртывание конфигурации:
terraform apply -auto-approve
должно получится следующее:
Можно проверить доступ по SSH до каждой развёрнутой ВМ:
Таким образом, необходимые ВМ развёрнуты, а также записи типа A создались, проверим PTR: