This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Kontener LXC

Kontener LXC

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).

1. Rola kontenerów LXC w iac-proxmox

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.

2. Struktura katalogów dla kontenerów

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.

3. Tworzenie kontenera LXC

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

  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..."
  }
}

4. Omówienie kluczowych parametrów

4.1. Identyfikacja i lokalizacja

Parametr Opis
hostname Pełna nazwa DNS kontenera
description Opis techniczny usługi
node_name Węzeł Proxmoxa
ct_id Unikalne ID kontenera
pool_id Pool logiczny
start_on_boot Autostart po restarcie
tags Tagi administracyjne

4.2. Zasoby sprzętowe

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.

4.3. System operacyjny

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.

4.4. Konto użytkownika

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.

5. 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.