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
- Cieľ / Problém na vyriešenie:
Cieľom bolo vytvoriť a nasadiť aplikáciu
rfid.oit.skakodeploymentv 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ť. - Použité technológie a nástroje:
- Kubernetes (K3s)
- Docker
- Gitea (ako privátny Docker registry)
- Nginx a PHP-FPM (v kontajneroch)
kubectldockerCLIgit
- 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
ImagePullSecretpre autentifikáciu k privátnemu Gitea registry a jeho pridanie dodeployment.yaml. - Ručné spravovanie perzistentného volumu pre kód aplikácie a inštalácia závislostí pomocou
composer.
- 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
- 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
composera práva adresárovtemp/alog/boli upravené na777, 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ťImagePullSecretpomocoukubectl create secret docker-registry ...alebo skriptom, a tento secret pridať dospec.template.spec.imagePullSecretsvdeployment.yaml. - Finálny výsledok / Záver:
Aplikácia
rfid.oit.skje ú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é.