Nasadenie aplikácie z Docker na K3s s perzistentnými dátami

Vytvorené: 27. 8. 2025 12:30 Aktualizované: 27. 8. 2025 13:14
Vyriešené
Obsah článku

title: "Nasadenie aplikácie z Docker na K3s s perzistentnými dátami"
slug: "k3s-docker-rfid-app-deployment"
technologies: ["Kubernetes", "Docker", "Gitea", "Nginx", "PHP-FPM", "YAML", "Git"]
tags: ["k3s", "deployment", "docker", "gitea", "kontajnery", "rfid"]
date_solved: "2025-08-27"

Projekt/Téma: Nasadenie aplikácie z Docker na K3s s perzistentnými dátami

  1. Cieľ / Problém na vyriešenie: Cieľom bolo vytvoriť a nasadiť aplikáciu rfid.oit.sk ako deployment v K3s klastri. Aplikácia sa skladá z Nginx a PHP-FPM kontajnerov, a kód aplikácie je uložený na perzistentnom volumu, aby ho bolo možné ľahko aktualizovať a spravovať.
  2. Použité technológie a nástroje:
  • Kubernetes (K3s)
  • Docker
  • Gitea (ako privátny Docker registry)
  • Nginx a PHP-FPM (v kontajneroch)
  • kubectl
  • docker CLI
  • git
  1. Kľúčové postupy a konfiguračné kroky:
  • Naklonovanie zdrojového kódu aplikácie.
  • Vytvorenie Dockerfile pre aplikáciu.
  • Build Docker obrazu.
  • Tagovanie obrazu pre privátny Gitea registry.
  • Push obrazu do Gitea registry.
  • Vytvorenie a aplikovanie Kubernetes manifestov (deployment, service, ingressroute) pre aplikáciu.
  • Vytvorenie ImagePullSecret pre autentifikáciu k privátnemu Gitea registry a jeho pridanie do deployment.yaml.
  • Ručné spravovanie perzistentného volumu pre kód aplikácie a inštalácia závislostí pomocou composer.
  1. Výsledné kódy a skripty:
# Build Docker obrazu
docker build -t rfid-app-local .

# Tagovanie obrazu
docker tag rfid-app-local gitea.oit.sk/sido/rfid-app:1.2

# Push do privátneho registry
docker push gitea.oit.sk/sido/rfid-app:1.2

# Aplikovanie Kubernetes manifestov
kubectl apply -f rfid-deployment.yaml
# Inštalácia PHP závislostí a oprava práv na persistentnom volúme
# Táto časť bola vykonaná priamo na uzle, ktorý mountuje NFS share
cd /mnt/network/rpi5/nfs/rfid.oit.sk
composer install --no-dev --optimize-autoloader --ignore-platform-req=ext-dom --ignore-platform-req=ext-gd
sudo chmod -R 777 temp/ log/
# Príkaz na vytvorenie tajomstva pre prihlásenie do privátneho registry
bash gitea-secret.sh $gitea_token

# Reštartovanie deploymentu po aktualizácii kódu alebo tajomstva
kubectl rollout restart deployment rfid-deployment -n rfid-app
  1. Zistené problémy a riešenia (Gotchas): Problém: Pod s aplikáciou sa nedokázal spustiť kvôli chýbajúcim súborom alebo nesprávnym právam. Riešenie: Súbory aplikácie boli prenesené na hostiteľský uzol, kde bolo pripojené NFS. Závislosti boli nainštalované pomocou composer a práva adresárov temp/ a log/ boli upravené na 777, aby do nich mohol zapisovať užívateľ spusteného kontajnera. Problém: Pod sa nedokázal stiahnuť obraz z privátneho registry Gitea. Riešenie: Je potrebné vytvoriť ImagePullSecret pomocou kubectl create secret docker-registry ... alebo skriptom, a tento secret pridať do spec.template.spec.imagePullSecrets v deployment.yaml.
  2. Finálny výsledok / Záver: Aplikácia rfid.oit.sk je úspešne nasadená v K3s, s kódom a perzistentnými dátami uloženými mimo kontajnera, čo umožňuje jednoduché aktualizácie. Všetky sieťové a DNS problémy boli vyriešené.
Vyriešené: 27. 8. 2025