Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ebben a cikkben egy magas rendelkezésre állású PostgreSQL-adatbázist helyez üzembe az AKS-en.
- Ha továbbra is létre kell hoznia a szükséges infrastruktúrát ehhez az üzembe helyezéshez, kövesse a Magas rendelkezésre állású PostgreSQL-adatbázis AKS-en való üzembe helyezéséhez szükséges infrastruktúra létrehozása című szakasz lépéseit, majd térjen vissza ehhez a cikkhez.
Important
A nyílt forráskódú szoftverek az AKS dokumentációjában és mintáiban szerepelnek. Az Ön által üzembe helyezett szoftver nem tartozik az AKS szolgáltatási szintű szerződésekbe, a korlátozott jótállásba és az Azure-támogatásba. Mivel nyílt forráskódú technológiát használ az AKS mellett, tekintse meg a megfelelő közösségek és projektfenntartók által rendelkezésre álló támogatási lehetőségeket a terv kidolgozásához.
A Microsoft felelősséget vállal az AKS-en üzembe helyezhető nyílt forráskódú csomagok elkészítéséért. Ez a felelősség magában foglalja a buildelési, vizsgálati, aláírási, érvényesítési és gyorsjavítási folyamat teljes tulajdonjogát, valamint a tárolólemezképek bináris fájljainak vezérlését. További információért lásd az AKS biztonságirés-kezelését és az AKS támogatási lefedettségét.
Titkos kód létrehozása a bootstrap-alkalmazás felhasználójának
- Hozzon létre egy titkos kulcsot a PostgreSQL üzembe helyezésének ellenőrzéséhez interaktív bejelentkezéssel egy bootstrap-alkalmazás felhasználója számára a
kubectl create secretparancs használatával.
Important
A Microsoft azt javasolja, hogy a legbiztonságosabb hitelesítési folyamatot használja. Az ebben az eljárásban ismertetett hitelesítési folyamat nagy fokú bizalmat igényel az alkalmazásban, és olyan kockázatokat hordoz, amelyek más folyamatokban nem jelennek meg. Ezt a folyamatot csak akkor érdemes használni, ha más biztonságosabb folyamatok, például a felügyelt identitások nem életképesek.
PG_DATABASE_APPUSER_SECRET=$(echo -n | openssl rand -base64 16)
kubectl create secret generic db-user-pass \
--from-literal=username=app \
--from-literal=password="${PG_DATABASE_APPUSER_SECRET}" \
--namespace $PG_NAMESPACE \
--context $AKS_PRIMARY_CLUSTER_NAME
Ellenőrizze, hogy a titkos kód sikeresen létrejött-e a
kubectl getparanccsal.kubectl get secret db-user-pass --namespace $PG_NAMESPACE --context $AKS_PRIMARY_CLUSTER_NAME
Környezeti változók beállítása a PostgreSQL-fürthöz
Helyezzen üzembe egy konfigurációtérképet a CNPG-operátor konfigurálásához az alábbi
kubectl applyparanccsal. Ezek az értékek helyettesítik a korábbiENABLE_AZURE_PVC_UPDATESkapcsolót, amely már nem szükséges, és segítenek az ütemezett frissítések lebonyolításában, valamint felgyorsítják a replikák újracsatlakozását. Mielőtt üzembe helyeznénk ezt a konfigurációt éles környezetben, ellenőrizze, hogy a meglévőDRAIN_TAINTSbeállítások, amelyekre támaszkodik, kompatibilisek maradnak-e az Azure-környezettel.cat <<EOF | kubectl apply --context $AKS_PRIMARY_CLUSTER_NAME -n $PG_NAMESPACE -f - apiVersion: v1 kind: ConfigMap metadata: name: cnpg-controller-manager-config data: CLUSTERS_ROLLOUT_DELAY: '120' STANDBY_TCP_USER_TIMEOUT: '10' EOF
A Prometheus PodMonitors telepítése
A Prometheus a CNPG-t a CNPG GitHub-minták adattárában tárolt rögzítési szabályokkal kaparja le. Mivel a kezelő által felügyelt PodMonitor megszűnik, hozza létre és kezelje a PodMonitor-erőforrást saját maga, hogy a monitorozási veremhez igazíthassa.
Adja hozzá a Prometheus Community Helm-adattárat a
helm repo addparanccsal.helm repo add prometheus-community \ https://prometheus-community.github.io/helm-chartsFrissítse a Prometheus Community Helm adattárát, és telepítse az elsődleges csoportra a
helm upgradeparanccsal a--installkapcsoló használatával.helm upgrade --install \ --namespace $PG_NAMESPACE \ -f https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/main/docs/src/samples/monitoring/kube-stack-config.yaml \ prometheus-community \ prometheus-community/kube-prometheus-stack \ --kube-context=$AKS_PRIMARY_CLUSTER_NAMEHozzon létre egy PodMonitort a klaszterhez. A CNPG csapata elavultatja az operátor által felügyelt PodMonitort, így most közvetlenül kezelheti:
cat <<EOF | kubectl apply --context $AKS_PRIMARY_CLUSTER_NAME --namespace $PG_NAMESPACE -f - apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: $PG_PRIMARY_CLUSTER_NAME namespace: ${PG_NAMESPACE} labels: cnpg.io/cluster: ${PG_PRIMARY_CLUSTER_NAME} spec: selector: matchLabels: cnpg.io/cluster: ${PG_PRIMARY_CLUSTER_NAME} podMetricsEndpoints: - port: metrics EOF
Összevont hitelesítő adatok létrehozása
Ebben a szakaszban létrehoz egy összevont identitás hitelesítő adatot a PostgreSQL biztonsági mentéséhez, amely lehetővé teszi a CNPG számára, hogy az AKS munkaterhelés identitását használja a hitelesítéshez a tárfiók célhelyén történő biztonsági mentésekhez. A CNPG-operátor létrehoz egy Kubernetes-szolgáltatásfiókot ugyanazzal a névvel, mint a CNPG-fürt üzembehelyezési jegyzékében használt fürt.
Kérje le a klaszter OIDC-kiállítójának URL-címét a
az aks showparanccsal.export AKS_PRIMARY_CLUSTER_OIDC_ISSUER="$(az aks show \ --name $AKS_PRIMARY_CLUSTER_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query "oidcIssuerProfile.issuerUrl" \ --output tsv)"Hozzon létre egy összevont identitáshitelesítő adatot a
az identity federated-credential createparanccsal.az identity federated-credential create \ --name $AKS_PRIMARY_CLUSTER_FED_CREDENTIAL_NAME \ --identity-name $AKS_UAMI_CLUSTER_IDENTITY_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --issuer "${AKS_PRIMARY_CLUSTER_OIDC_ISSUER}" \ --subject system:serviceaccount:"${PG_NAMESPACE}":"${PG_PRIMARY_CLUSTER_NAME}" \ --audience api://AzureADTokenExchange
Magas rendelkezésre állású PostgreSQL-fürt üzembe helyezése
Ebben a szakaszban egy magas rendelkezésre állású PostgreSQL-fürtöt helyez üzembe a CNPG-fürt egyéni erőforrásdefiníciója (CRD) használatával.
Fürt CRD-paraméterei
Az alábbi táblázat a YAML telepítési jegyzékben beállított főbb tulajdonságokat ismerteti a Cluster CRD-hez:
| Property | Definition |
|---|---|
imageName |
A CloudNativePG operandus konténerképére mutat. Használja a ghcr.io/cloudnative-pg/postgresql:18-system-trixie a jelen útmutatóban bemutatott beépített biztonsági mentési integrációval, vagy váltson 18-standard-trixie-ra, amikor a Barman Cloud beépülő modult bevezeti. |
inheritedMetadata |
A CNPG-operátorra jellemző. A CNPG-operátor a klaszterhez kapcsolódó összes objektumra alkalmazza a metaadatokat. |
annotations |
Tartalmazza a fürtvégpontok felfedésekor szükséges DNS-címkét, és lehetővé teszi alpha.cnpg.io/failoverQuorum a kvórumalapú feladatátvételt. |
labels: azure.workload.identity/use: "true" |
Azt jelzi, hogy az AKS-nek be kell fecskendeznie a számítási feladatok identitásfüggőségeit a PostgreSQL-fürtpéldányokat üzemeltető podokba. |
topologySpreadConstraints |
Különböző zónák és különböző, címkével "workload=postgres"ellátott csomópontok megkövetelése. |
resources |
Konfigurálja a Garantált szolgáltatásminőség (QoS) osztályt. Éles környezetben ezek az értékek kulcsfontosságúak a mögöttes csomópont virtuális gép használatának maximalizálásához, és a használt Azure-beli virtuálisgép-termékváltozattól függően változnak. |
probes |
Lecseréli az örökölt konfigurációt startDelay . A streamelési indítási és készültségi mintavételek segítenek meggyőződni arról, hogy a replikák kifogástalan állapotban vannak a forgalom kiszolgálása előtt. |
smartShutdownTimeout |
Lehetővé teszi, hogy a hosszan futó tranzakciók zökkenőmentesen befejeződjenek a frissítések során, ahelyett, hogy agresszív leállítási késleltetéseket használnának. |
bootstrap |
A CNPG-operátorra jellemző. Inicializálás üres alkalmazásadatbázissal. |
storage |
Meghatározza az adatbázis PersistentVolume-beállításait. Az Azure-beli felügyelt lemezek esetében az egyszerűsített szintaxis ugyanazon a 64 GiB-köteten tárolja az adatokat és a WAL-t, amely jobb átviteli sebességet biztosít a felügyelt lemezeken. Módosítsa, ha külön WAL-kötetre van szüksége. |
postgresql.synchronous |
Lecseréli minSyncReplicas/maxSyncReplicas és lehetővé teszi a szinkron replikáció viselkedésének megadását az újabb sémával. |
postgresql.parameters |
A CNPG-operátorra jellemző. A postgresql.conf, pg_hba.conf és pg_ident.conf beállításai. A minta hangsúlyozza a megfigyelhetőséget és a WAL-adatmegőrzés alapértelmezett értékét, amelyek megfelelnek az AKS számítási feladat identitási forgatókönyvének, de számítási feladatonként kell hangolni. |
serviceAccountTemplate |
Tartalmazza a szolgáltatásfiókok létrehozásához szükséges sablont, és leképezi az AKS összevont identitás hitelesítő adatait a UAMI-ra, hogy engedélyezze az AKS számítási feladat identitásának hitelesítését a PostgreSQL-példányokat futtató podokról külső Azure-erőforrásokra. |
barmanObjectStore |
A CNPG-operátorra jellemző. Konfigurálja a barman-cloud eszközcsomagot az AKS számítási feladat identitásával az Azure Blob Storage objektumtárolóba való hitelesítéshez. |
A PostgreSQL-számítási feladatok további elkülönítéséhez hozzáadhat egy foltot (például node-role.kubernetes.io/postgres=:NoSchedule) az adatsík csomópontjaihoz, és lecserélheti a mintát nodeSelector/tolerations a CloudNativePG által ajánlott értékekre. Ha ezt a megközelítést alkalmazza, címkézze fel a csomópontokat ennek megfelelően, és győződjön meg arról, hogy az AKS automatikus skálázási szabályzatai összhangban vannak a topológiával.
PostgreSQL-teljesítményparaméterek
A PostgreSQL teljesítménye nagymértékben függ a klaszter mögöttes erőforrásaitól és a munka terhelésétől. Az alábbi táblázat alapszintű útmutatást nyújt egy standard D4s v3-csomópontokon (16 GiB-memória) futó háromcsomópontos fürthöz. Kezelje ezeket az értékeket kiindulási pontként, és módosítsa őket a számítási feladatprofil megismerése után:
| Property | Javasolt érték | Definition |
|---|---|---|
wal_compression |
lz4 | Wal-fájlban írt teljes oldalas írások tömörítése megadott módszerrel |
max_wal_size |
6 GB | Az ellenőrzőpontot aktiváló WAL-méret beállítása |
checkpoint_timeout |
15 perc | Az automatikus WAL-ellenőrzőpontok közötti maximális idő beállítása |
checkpoint_completion_target |
0,9 | Az ellenőrzőpont feladatainak elosztása az ellenőrzőpont időszaka alatt |
checkpoint_flush_after |
2 MB | Azoknak a lapoknak a száma, amelyek után a korábban végrehajtott írások ki vannak ürítve a lemezre |
wal_writer_flush_after |
2 MB | A WAL-író által kiírt WAL mennyiség, amely ürítést vált ki |
min_wal_size |
2 GB | Beállítja a minimális méretet a WAL zsugorításához |
max_slot_wal_keep_size |
10 GB | A WAL replikációs foglalatokra vonatkozó felső határa |
shared_buffers |
4 GB | Beállítja a kiszolgáló által használt megosztott memóriapufferek számát (ebben a példában 25% csomópontmemória) |
effective_cache_size |
12 GB | A tervező feltételezésének beállítása az adatgyorsítótárak teljes méretéről |
work_mem |
A csomópont memóriájának 1/256-a | A lekérdezési munkaterületekhez használandó maximális memória beállítása |
maintenance_work_mem |
6.25% a csomópont memóriájának | Beállítja a karbantartási műveletekhez használandó memória maximális méretét |
autovacuum_vacuum_cost_limit |
2400 | A szumázás előtt rendelkezésre álló vákuumköltség összege az autovacuumhoz |
random_page_cost |
1.1 | Beállítja a planner becslését a nem ismétlődően lekért lemezoldal költségeire vonatkozóan |
effective_io_concurrency |
64 | Beállítja, hogy a lemezalrendszer hány egyidejű kérést képes hatékonyan kezelni |
maintenance_io_concurrency |
64 | A karbantartási munkákhoz használt "effective_io_concurrency" változata |
A PostgreSQL üzembe helyezése
Helyezze üzembe a PostgreSQL-fürtöt a Cluster CRD-vel a
kubectl applyparanccsal.cat <<EOF | kubectl apply --context $AKS_PRIMARY_CLUSTER_NAME -n $PG_NAMESPACE -v 9 -f - apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: name: $PG_PRIMARY_CLUSTER_NAME annotations: alpha.cnpg.io/failoverQuorum: "true" spec: imageName: ghcr.io/cloudnative-pg/postgresql:18-system-trixie inheritedMetadata: annotations: service.beta.kubernetes.io/azure-dns-label-name: $AKS_PRIMARY_CLUSTER_PG_DNSPREFIX labels: azure.workload.identity/use: "true" instances: 3 smartShutdownTimeout: 30 probes: startup: type: streaming maximumLag: 32Mi periodSeconds: 5 timeoutSeconds: 3 failureThreshold: 120 readiness: type: streaming maximumLag: 0 periodSeconds: 10 failureThreshold: 6 topologySpreadConstraints: - maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: cnpg.io/cluster: $PG_PRIMARY_CLUSTER_NAME affinity: nodeSelector: workload: postgres resources: requests: memory: '8Gi' cpu: 2 limits: memory: '8Gi' cpu: 2 bootstrap: initdb: database: appdb owner: app secret: name: db-user-pass dataChecksums: true storage: storageClass: $POSTGRES_STORAGE_CLASS size: 64Gi postgresql: synchronous: method: any number: 1 parameters: wal_compression: lz4 max_wal_size: 6GB max_slot_wal_keep_size: 10GB checkpoint_timeout: 15min checkpoint_completion_target: '0.9' checkpoint_flush_after: 2MB wal_writer_flush_after: 2MB min_wal_size: 2GB shared_buffers: 4GB effective_cache_size: 12GB work_mem: 62MB maintenance_work_mem: 1GB autovacuum_vacuum_cost_limit: "2400" random_page_cost: "1.1" effective_io_concurrency: "64" maintenance_io_concurrency: "64" log_checkpoints: 'on' log_lock_waits: 'on' log_min_duration_statement: '1000' log_statement: 'ddl' log_temp_files: '1024' log_autovacuum_min_duration: '1s' pg_stat_statements.max: '10000' pg_stat_statements.track: 'all' hot_standby_feedback: 'on' pg_hba: - host all all all scram-sha-256 serviceAccountTemplate: metadata: annotations: azure.workload.identity/client-id: "$AKS_UAMI_WORKLOAD_CLIENTID" labels: azure.workload.identity/use: "true" backup: barmanObjectStore: destinationPath: "https://${PG_PRIMARY_STORAGE_ACCOUNT_NAME}.blob.core.windows.net/backups" azureCredentials: inheritFromAzureAD: true retentionPolicy: '7d' EOF
Megjegyzés:
A mintajegyzék azért használja a ghcr.io/cloudnative-pg/postgresql:18-system-trixie rendszerképet, mert együttműködik a Barman Cloud belső integrációjával, amelyet később részletezünk. Ha készen áll a Barman Cloud beépülő modulra való váltásra, frissítse spec.imageName a ghcr.io/cloudnative-pg/postgresql:18-standard-trixie fájlt, és kövesse a beépülő modul konfigurációs útmutatóját a fürt ismételt üzembe helyezése előtt.
Important
A példabejegyzés pg_hba nem TLS-hozzáférést tesz lehetővé. Ha megtartja ezt a konfigurációt, dokumentálja a csapat biztonsági következményeit, és lehetőleg a titkosított kapcsolatokat részesíti előnyben.
Ellenőrizze, hogy sikeresen létrejött-e az elsődleges PostgreSQL-fürt a
kubectl getparanccsal. A CNPG-fürt CRD-je három példányt adott meg, amelyek ellenőrizhetők a futó podok megtekintésével, miután minden példányt elindítottak és összekapcsoltak a replikációhoz. Legyen türelmes, mert időbe telhet, míg mindhárom példány online állapotba kerül és csatlakozik a fürthöz.kubectl get pods --context $AKS_PRIMARY_CLUSTER_NAME --namespace $PG_NAMESPACE -l cnpg.io/cluster=$PG_PRIMARY_CLUSTER_NAMEPélda kimenet
NAME READY STATUS RESTARTS AGE pg-primary-cnpg-r8c7unrw-1 1/1 Running 0 4m25s pg-primary-cnpg-r8c7unrw-2 1/1 Running 0 3m33s pg-primary-cnpg-r8c7unrw-3 1/1 Running 0 2m49s
Important
Ha helyi NVMe-t használ az Azure Container Storage-ban, és egy pod init állapotban marad több csatolási hibával, a pod továbbra is keresi a kötetet egy elveszett csomóponton. Miután a pod elkezd futni, egy állapotba kerül CrashLoopBackOff , mert a CNPG új replikát hoz létre egy új csomóponton adatok nélkül, és nem találja a pgdata könyvtárat. A probléma megoldásához pusztítsa el az érintett példányt, és hozzon létre egy újat. Futtassa a következő parancsot:
kubectl cnpg destroy [cnpg-cluster-name] [instance-number]
Ellenőrizze, hogy a Prometheus PodMonitor fut-e
A manuálisan létrehozott PodMonitor a kube-prometheus-stack adatlekérési konfigurációját a korábban üzembe helyezett CNPG podokhoz kapcsolja.
Ellenőrizze, hogy a PodMonitor fut-e a kubectl get paranccsal.
kubectl --namespace $PG_NAMESPACE \
--context $AKS_PRIMARY_CLUSTER_NAME \
get podmonitors.monitoring.coreos.com \
$PG_PRIMARY_CLUSTER_NAME \
--output yaml
Példa kimenet
kind: PodMonitor
metadata:
labels:
cnpg.io/cluster: pg-primary-cnpg-r8c7unrw
name: pg-primary-cnpg-r8c7unrw
namespace: cnpg-database
spec:
podMetricsEndpoints:
- port: metrics
selector:
matchLabels:
cnpg.io/cluster: pg-primary-cnpg-r8c7unrw
Ha az Azure Monitort használja felügyelt Prometheushoz, hozzá kell adnia egy másik podmonitort az egyéni csoportnév használatával. A felügyelt Prometheus nem veszi fel az egyéni erőforrás-definíciókat (CRD-ket) a Prometheus-közösségből. A csoportnéven kívül a CRD-k megegyeznek. Ez a kialakítás lehetővé teszi, hogy a felügyelt Prometheus podmonitorai a közösségi CRD-t használó podmonitorokkal együtt fussanak. Ha nem felügyelt Prometheust használ, kihagyhatja ezt a szakaszt. Hozzon létre egy új pod-figyelőt:
cat <<EOF | kubectl apply --context $AKS_PRIMARY_CLUSTER_NAME --namespace $PG_NAMESPACE -f -
apiVersion: azmonitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: cnpg-cluster-metrics-managed-prometheus
namespace: ${PG_NAMESPACE}
labels:
azure.workload.identity/use: "true"
cnpg.io/cluster: ${PG_PRIMARY_CLUSTER_NAME}
spec:
selector:
matchLabels:
azure.workload.identity/use: "true"
cnpg.io/cluster: ${PG_PRIMARY_CLUSTER_NAME}
podMetricsEndpoints:
- port: metrics
EOF
Ellenőrizze, hogy létrejött-e a pod monitor (figyelje meg a csoportnév különbségét).
kubectl --namespace $PG_NAMESPACE \
--context $AKS_PRIMARY_CLUSTER_NAME \
get podmonitors.azmonitoring.coreos.com \
-l cnpg.io/cluster=$PG_PRIMARY_CLUSTER_NAME \
-o yaml
A lehetőség – Azure Monitor-munkaterület
A Postgres-fürt és a podmonitor üzembe helyezése után megtekintheti a metrikákat az Azure Portal használatával egy Azure Monitor-munkaterületen.
Lehetőség B – Felügyelt Grafana
Másik lehetőségként a Postgres-fürt és podmonitorok üzembe helyezése után létrehozhat egy metrikák irányítópultot az üzembe helyezési szkript által létrehozott felügyelt Grafana-példányon az Azure Monitor-munkaterületre exportált metrikák megjelenítéséhez. A felügyelt Grafana az Azure Portalon érhető el. Lépjen az üzembe helyezési szkript által létrehozott Felügyelt Grafana-példányra, és válassza ki az itt látható végponthivatkozást:
A Végpont hivatkozás kiválasztásával megnyílik egy új böngészőablak, ahol irányítópultokat hozhat létre a Felügyelt Grafana-példányon. Az Azure Monitor-adatforrás konfigurálására vonatkozó utasításokat követve vizualizációkat adhat hozzá a Postgres-fürtből származó metrikák irányítópultjának létrehozásához. Az adatforrás-kapcsolat beállítása után a főmenüben válassza az Adatforrások lehetőséget. Az adatforrás-kapcsolat adatforrás-opcióit kell látnia, ahogy itt látható:
A Felügyelt Prometheus beállításban válassza ki azt a lehetőséget, amelyből irányítópultot hozhat létre az irányítópult-szerkesztő megnyitásához. A szerkesztőablak megnyitása után válassza a Vizualizáció hozzáadása lehetőséget, majd a Kezelt Prometheus lehetőséget a Postgres-fürt metrikáinak tallózásához. Miután kiválasztotta a vizualizálni kívánt metrikát, válassza a Lekérdezések futtatása gombot a vizualizáció adatainak lekéréséhez az itt látható módon:
A Mentés ikonra kattintva hozzáadhatja a panelt az irányítópulthoz. Más panelek hozzáadásához válassza az irányítópult-szerkesztő Hozzáadás gombját, és ismételje meg ezt a folyamatot más metrikák megjelenítéséhez. A metrikák vizualizációit hozzáadva valahogy így kell kinéznie:
Az irányítópult mentéséhez válassza a Mentés ikont.
Következő lépések
Contributors
A Microsoft fenntartja ezt a cikket. Eredetileg a következő közreműködők írták:
- Ken Kilty | Vezető TPM
- Russell de Pina | Vezető TPM
- Adrian Joian | Vezető ügyfélmérnök
- Jenny Hayes | Vezető tartalomfejlesztő
- Carol Smith | Vezető tartalomfejlesztő
- Erin Schaffer | Tartalomfejlesztő 2
- Adam Sharif | 2. ügyfélmérnök
Elismerés
Ezt a dokumentációt az EnterpriseDB-vel, a CloudNativePG-operátor fenntartóival közösen fejlesztettük ki. Köszönjük Gabriele Bartolininak , hogy áttekinti a dokumentum korábbi tervezeteit, és technikai fejlesztéseket kínál.