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.