Skip to content

Kontener LXC

Definicja

LXC (Linux Containers) to technologia lekkiej wirtualizacji na poziomie systemu operacyjnego, umożliwiająca uruchamianie wielu odseparowanych środowisk Linux na jednym jądrze systemowym.

W przeciwieństwie do klasycznych maszyn wirtualnych:

  • nie emuluje pełnego sprzętu,
  • nie wymaga osobnego jądra systemu,
  • zużywa znacznie mniej zasobów,
  • uruchamia się niemal natychmiastowo.

W środowisku Proxmox VE kontenery LXC są wykorzystywane do:

  • uruchamiania mikroserwisów,
  • hostowania aplikacji backendowych,
  • serwerów proxy, API, workerów CI,
  • środowisk testowych i stagingowych.

✅ LXC to rozwiązanie:

  • szybsze niż VM,
  • tańsze zasobowo,
  • idealne do infrastruktury jako kod (IaC).

W projekcie iac-proxmox kontenery LXC są:

  • w pełni zarządzane przez OpenTofu,
  • tworzone automatycznie z gotowych template,
  • konfigurowane przez moduł:
modules/proxmox-container

Każdy kontener posiada:

  • jednoznaczny CT ID,
  • przypisany node, storage, pool,
  • zdefiniowane zasoby CPU, RAM i dysk,
  • użytkownika technicznego,
  • klucz SSH.

Definicje kontenerów znajdują się w katalogu:

./machines/

Każdy kontener posiada osobny plik:

ctXXXXX.tf

Przykład:

ct01011.tf

✅ Zapewnia to:

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

module "ct01011" {
  source = ""git@gitlab.com:pl.rachuna-net/artifacts/opentofu/proxmox-container.git?ref=v1.0.2""

  hostname      = "ct01011.rachuna-net.pl"
  description   = "example-service"
  node_name     = "pve-s1"
  ct_id         = 1011
  pool_id       = "web-proxy"
  start_on_boot = true
  tags          = ["example", "ubuntu"]

  cpu_cores = 2
  memory = { dedicated = 2048, swap = 1024 }
  disk   = { storage_name = "local-lvm", disk_size = 32 }

  operating_system = {
    template_file = "local:vztmpl/ubuntu-24.04.tar.zst"
    type          = "ubuntu"
  }

  user_account = {
    username       = "techuser"
    password       = "change-me"
    public_ssh_key = "ssh-ed25519 AAAA..."
  }
}

ParametrOpis
hostnamePełna nazwa DNS kontenera
descriptionOpis techniczny usługi
node_nameWęzeł Proxmoxa
ct_idUnikalne ID kontenera
pool_idPool logiczny
start_on_bootAutostart po restarcie
tagsTagi administracyjne

cpu_cores = 2

memory = {
  dedicated = 2048
  swap      = 1024
}

disk = {
  storage_name = "local-lvm"
  disk_size    = 32
}

✅ Pozwala to precyzyjnie sterować:

  • obciążeniem hosta,
  • wydajnością usług,
  • dynamicznym skalowaniem.

operating_system = {
  template_file = "local:vztmpl/ubuntu-24.04.tar.zst"
  type          = "ubuntu"
}

✅ Template musi być:

  • wcześniej pobrany przez containers_templates,
  • dostępny na storage Proxmoxa.

user_account = {
  username       = "techuser"
  password       = "change-me"
  public_ssh_key = "ssh-ed25519 AAAA..."
}

✅ Tworzone automatycznie:

  • konto techniczne,
  • dostęp SSH,
  • możliwość wyłączenia logowania root.

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.