Virtual Machine

Maszyny wirtualne

Wirtualna maszyna (VM, Virtual Machine) to programowe odwzorowanie fizycznego komputera, które działa w ramach istniejącego systemu lub bezpośrednio na hyperwizorze. Posiada własny system operacyjny, przydzielone zasoby (CPU, pamięć RAM, dysk, sieć) i jest odizolowana od innych maszyn działających na tym samym hoście. Dzięki wirtualizacji możliwe jest uruchamianie wielu niezależnych środowisk na jednej fizycznej infrastrukturze, co zwiększa efektywność wykorzystania zasobów, ułatwia zarządzanie oraz podnosi bezpieczeństwo i elastyczność środowisk IT.


1. Struktura katalogów dla kontenerów

Definicje vm znajdują się w katalogu:

./machines/

Każdy vm posiada osobny plik:

vmXXXXX.tf

Przykład:

vm01011.tf

✅ Zapewnia to:

  • czytelność,
  • pełną niezależność kontenerów,
  • łatwą kontrolę zmian w Git.

2. Tworzenie VM

module "vm01017" {
  source = "git@gitlab.rachuna-net.pl:pl.rachuna-net/infrastructure/opentofu/modules/proxmox-vm.git?ref=v1.0.0"

  hostname      = "vm01017.rachuna-net.pl"
  description   = "Kubernetes master w4"
  node_name     = "pve-s1"
  vm_id         = 1017
  pool_id       = "kubernetes"
  protection    = true
  tags          = ["kubernetes", "master", "ubuntu"]
  is_dmz        = false
  mac_address   = "BC:24:11:50:5F:83"
  datastore_id  = "storage.rachuna-net.pl"

  template = {
    node_name = "pve-s1"
    vm_id     = 901
    full      = true
  }

  cpu = {
    cores   = 4
    sockets = 2
  }

  memory = {
    dedicated = 8192
  }

  user_account = {
    username       = data.vault_kv_secret_v2.auth_techuser.data["username"]
    password       = data.vault_kv_secret_v2.auth_techuser.data["password"]
    public_ssh_key = data.vault_kv_secret_v2.auth_techuser.data["public_ssh_key"]
  }

  vault = {
    mount = "kv-gitlab"
    path  = "pl.rachuna-net/infrastructure/opentofu/iac-proxmox/machine/vm01017"
  }
}
  • source = "git@gitlab.rachuna-net.pl:pl.rachuna-net/infrastructure/opentofu/modules/proxmox-vm.git?ref=v1.0.0" - Źródło modułu.
  • hostname – pełna nazwa FQDN VM.
  • description – krótki opis roli serwera (widzoczny w Proxmox).
  • node_name – węzeł Proxmox, na którym VM ma być tworzona (pve-s1, pve-s2, pve-s3, …).
  • vm_id – unikalny ID VM w klastrze (sprawdź, czy numer nie jest zajęty).
  • pool_id – pula Proxmox (np. kubernetes), ustaw zgodnie z przeznaczeniem.
  • protection – zwykle true dla ochrony przed przypadkowym usunięciem.
  • tags – lista tagów (rola, system, np. ["kubernetes", "master", "ubuntu"]).
  • is_dmztrue/false zależnie od strefy sieci.
  • mac_address – statyczny MAC (zapewnij unikalność w sieci).
  • datastore_id – magazyn na dyski (obecnie storage.rachuna-net.pl jak w istniejących VM).

2.1. Sekcje template, cpu, memory

  • template – wskaż template VM (aktualnie wykorzystywany jest vm_id = 901 na pve-s1 z kopią pełną: full = true).
  • cpu – ustaw liczbę rdzeni (cores) i gniazd (sockets).
  • memorydedicated w MB (np. 8192).

2.2. Dostępy i sekrety

  • user_account pobiera dane użytkownika technicznego z Vault: data.vault_kv_secret_v2.auth_techuser.data[...] – upewnij się, że wpis istnieje (definicja w machines/_data.tf).
  • vault – ustaw ścieżkę na sekrety specyficzne dla VM, zgodnie z konwencją pl.rachuna-net/infrastructure/opentofu/iac-proxmox/machine/vmNNNNN (zaktualizuj numer).

3. Integracja z Vault

Jeżeli dane dostępowe pochodzą z Vault, zamiast jawnych wartości:

user_account = {
  username       = data.vault_kv_secret_v2.ct.data["username"]
  password       = data.vault_kv_secret_v2.ct.data["password"]
  public_ssh_key = data.vault_kv_secret_v2.ct.data["ssh_key"]
}

✅ Pozwala to:

  • usunąć hasła z repozytorium,
  • rotować dane dostępowe,
  • centralnie kontrolować dostęp.
Last modified December 19, 2025: docs: Update (72bba37)