AKS průvodce: Hermes Agent v Dockeru a vlastní .NET 10 aplikace v Dockeru
Praktický interní návod navazující na průzkum Docker v Azure pro PensionPlanner.
Cíl: - Scénář 1: provozovat Hermes Agenta v Dockeru na AKS - Scénář 2: provozovat vlastní .NET 10 aplikaci v Dockeru na AKS - mít klikací postup v Azure Portalu krok za krokem
1. Kdy dává AKS smysl
AKS je vhodné, když chceš:
- provozovat víc kontejnerových služeb
- mít oddělené prostředí dev / test / prod
- řešit škálování, rolling update, health checky a ingress standardně přes Kubernetes
- do budoucna přidat další workloady, cron joby, worker kontejnery nebo interní služby
AKS nedává smysl, pokud chceš jen jednu jednoduchou webovou appku a nechceš spravovat Kubernetes provoz. V takovém případě bývá jednodušší Azure Container Apps nebo App Service for Containers.
2. Co budeš v Azure potřebovat
Minimum pro oba scénáře: - Resource Group - Azure Container Registry (ACR) - Azure Kubernetes Service (AKS) - Log Analytics Workspace - veřejný vstup do clusteru přes Ingress - DNS záznam a volitelně TLS certifikát
Velmi doporučené: - Key Vault na secrets - Managed Identity místo ukládání hesel do YAMLů - Azure Monitor / Container Insights - separate namespaces pro jednotlivé aplikace
Podle potřeby navíc: - Azure SQL / PostgreSQL / MySQL - Storage Account / Azure Files / Blob Storage - Application Gateway / Front Door / WAF
3. Referenční architektura
4. Naming convention
Příklad pro produkci:
- Resource Group: rg-aks-prod
- ACR: acrhermesprod
- AKS: aks-hermes-prod
- Log Analytics: log-aks-prod
- Key Vault: kv-hermes-prod
- Namespace pro Hermes: hermes
- Namespace pro .NET app: dotnet-app
Pokud chceš oddělit prostředí:
- rg-aks-dev
- rg-aks-test
- rg-aks-prod
5. Co si připravit před klikáním v Azure
Ještě před Azure Portálem si připrav:
Pro oba scénáře
- hotový Dockerfile
- jméno image
- port, na kterém kontejner naslouchá
- seznam environment variables
- seznam secrets
- informaci, zda aplikace potřebuje persistentní data
- doménu nebo subdoménu
Specificky pro Hermes Agent
Ujasni si: - poběží jako web/API služba, nebo jako worker / automation container? - potřebuje příchozí HTTP provoz, nebo jen odchozí přístup ven? - jak budeš řešit credentials, API klíče, OAuth tokeny a config - jestli chceš 1 repliku, nebo víc instancí - zda Hermes používá trvalý disk / mount / config soubory
Specificky pro .NET 10 app
Ujasni si:
- zda jde o ASP.NET Core web app / API
- jaký je port, typicky 8080
- jaké connection stringy potřebuje
- zda potřebuje migrace databáze při startu nebo mimo start
- jaké readiness/liveness endpointy budou použité, typicky:
- /health
- /healthz
- /ready
6. Rozhodnutí architektury pro scénář 1 a 2
Scénář 1: Hermes Agent na AKS
Doporučený model:
- 1 namespace hermes
- 1 deployment hermes-agent
- 1 service
- ingress jen pokud Hermes vystavuje HTTP endpoint
- secrets z Key Vaultu nebo Kubernetes Secret
- persistent volume jen pokud je opravdu potřeba
Scénář 2: .NET 10 app na AKS
Doporučený model:
- 1 namespace dotnet-app
- 1 deployment pro web/API
- 1 service typu ClusterIP
- 1 ingress pro veřejný přístup
- health probes
- HPA podle CPU/memory až později
- DB mimo cluster
ČÁST A — CO VŠECHNO VYKLKAT V AZURE
7. Krok 1: založení Resource Group
Co vyklikat
- Otevři Azure Portal
- Do hledání napiš Resource groups
- Klikni Create
- Vyber:
- Subscription
- Resource group name: např.
rg-aks-prod - Region: např.
West Europe - Klikni Review + create
- Klikni Create
Poznámka
Všechny související resources drž ve stejné Resource Group, pokud nemáš důvod je dělit.
8. Krok 2: založení Log Analytics Workspace
Co vyklikat
- Do hledání napiš Log Analytics workspaces
- Klikni Create
- Vyplň:
- Subscription
- Resource group:
rg-aks-prod - Name: např.
log-aks-prod - Region: stejný jako Resource Group
- Klikni Review + create
- Klikni Create
Proč
Budeš to používat pro: - logy z AKS - Container Insights - troubleshooting
9. Krok 3: založení Azure Container Registry (ACR)
Co vyklikat
- Do hledání napiš Container registries
- Klikni Create
- Vyplň:
- Subscription
- Resource group:
rg-aks-prod - Registry name: např.
acrhermesprod- musí být globálně unikátní
- bez mezer
- Location: stejná oblast
- SKU: pro start obvykle
BasicneboStandard - Klikni Review + create
- Klikni Create
Co si zapiš
- login server, např.
acrhermesprod.azurecr.io
10. Krok 4: založení AKS clusteru
Co vyklikat
- Do hledání napiš Kubernetes services
- Klikni Create → Create a Kubernetes cluster
Záložka Basics
Vyplň:
- Subscription
- Resource group: rg-aks-prod
- Kubernetes cluster name: aks-hermes-prod
- Region: stejná oblast
- Availability zones: klidně zapnout, pokud chceš vyšší odolnost
- AKS pricing tier: pro začátek obvykle Free nebo dle požadavků Standard
- Kubernetes version: nech doporučenou stabilní verzi
- Automatic upgrade: doporučeno zapnout podle firemní politiky
Primary node pool
Vyplň:
- Node size: pro malé prostředí například něco úsporného; podle reálné zátěže
- Scale method: doporučeno Manual pro začátek nebo Autoscale
- Node count: typicky 1 až 3
Pro levný lab/test: - 1 node
Pro produkci raději: - alespoň 2 nody
Záložka Node pools
Pro začátek můžeš nechat default. Později můžeš přidat separátní pool např. pro: - Hermes workery - backend služby - joby
Záložka Access
Doporučené volby: - Authentication and Authorization: standardní Azure RBAC podle tvého modelu - Managed identity: nechat zapnuté - Local accounts: vypnout jen pokud víš proč; jinak podle security politiky
Záložka Networking
Doporučení pro první cluster:
- Network configuration: Azure CNI Overlay nebo doporučené defaultní nastavení
- Network policy: podle bezpečnostní politiky, klidně none pro start
- DNS name prefix: vyplnit
- Private cluster: vypnuté, pokud nechceš čistě privátní cluster
- Load balancer: standard
Záložka Integrations
Zapni:
- Container insights
- připoj Log Analytics Workspace log-aks-prod
Záložka Monitoring
Nech zapnuté relevantní monitorovací funkce, pokud jsou k dispozici.
Dokončení
- Klikni Review + create
- Po validaci klikni Create
- Počkej na dokončení deploymentu
11. Krok 5: napojení AKS na ACR
Po vytvoření clusteru je potřeba zajistit, aby si AKS uměl stáhnout image z ACR.
Varianta v Portálu
V portálu to bývá částečně viditelné přes IAM / role / integrations, ale prakticky se to často dělá CLI.
Co si v Azure zkontrolovat
- Otevři AKS cluster
- Otevři Settings / Identity
- Otevři ACR nebo Access control (IAM) na registry
- Zkontroluj, že identita AKS má právo AcrPull na registru
Praktická poznámka
Pokud toto neuděláš, deployment v AKS spadne na chybu typu image pull failure.
12. Krok 6: založení Key Vaultu
Co vyklikat
- Do hledání napiš Key vaults
- Klikni Create
- Vyplň:
- Resource group:
rg-aks-prod - Name:
kv-hermes-prod - Region: stejná oblast
- Pricing tier: Standard obvykle stačí
- Klikni Review + create
- Klikni Create
Co do něj typicky uložit
- API klíče
- connection stringy
- OAuth secrets
- app secrets
- tokeny pro Hermes / externí integrace
13. Krok 7: DNS a veřejný vstup
AKS sám o sobě není uživatelsky hotová webová URL platforma. Potřebuješ ingress.
Nejčastější jednoduchá varianta:
- v clusteru nasadit Ingress Controller
- ten vytvoří Load Balancer IP
- do DNS přidáš A záznam na tuto IP
Co budeš řešit v Azure
- veřejnou IP nebo load balancer IP
- DNS záznam mimo nebo uvnitř Azure DNS
- TLS certifikát
Pokud chceš enterprise vstup, můžeš místo jednoduchého ingressu použít: - Application Gateway Ingress Controller - případně Front Door
Pro první scénář je jednodušší běžný ingress controller.
ČÁST B — SCÉNÁŘ 1: HERMES AGENT V DOCKERU NA AKS
14. Doporučený deployment model pro Hermes Agent
Nejdřív si rozhodni, jak bude Hermes běžet:
Varianta A: Hermes jako HTTP služba
Použij, pokud: - přijímá webové requesty - má webhook endpointy - má UI/API
Potřebuješ: - deployment - service - ingress
Varianta B: Hermes jako interní worker
Použij, pokud: - běží dávkově - zpracovává joby - nepotřebuje veřejný HTTP vstup
Potřebuješ: - deployment nebo job/cronjob - service možná vůbec ne - ingress nepotřebuješ
Pro většinu agentních integračních scénářů je časté rozdělení na: - 1 veřejný API/webhook container - 1 nebo více worker containerů
15. Co budeš muset připravit pro Hermes image
Checklist: - Docker image v ACR - start command - port (pokud je HTTP) - env vars - secrets - volume mounty, pokud existují - health endpoint, pokud je to webová služba
Typické proměnné:
- PORT
- ENVIRONMENT
- HERMES_HOME
- přístupové tokeny
- secrets pro integrace
Důležité: - nic citlivého nedávej napevno do image - secrets drž mimo image
16. Azure Portal klikací postup pro Hermes scénář
16.1 Vytvoř namespace pro Hermes
Tohle se typicky dělá po připojení ke clusteru přes Kubernetes nástroje, ne čistě v Azure GUI. Ale v portálu pak namespace uvidíš.
Doporučený namespace:
- hermes
16.2 Připrav secrets
V Azure Portalu: 1. Otevři Key Vault 2. Jdi do Secrets 3. Klikni Generate/Import 4. Založ všechny potřebné secrets
16.3 Rozhodni repliku a sizing
Pro první nasazení: - replicas: 1
Pokud je Hermes stateless a zvládá horizontální škálování: - můžeš přidat další repliky později
16.4 Rozhodni storage
Pokud Hermes ukládá lokální stav, logy nebo cache na disk, musíš rozhodnout: - opravdu to potřebuje persistentně? - nebo to má jít do externí storage?
Preferované je: - stav do DB / storage služby - lokální disk jen na dočasná data
16.5 Pokud Hermes potřebuje veřejný endpoint
Budeš navíc řešit: - Service - Ingress - DNS - TLS
16.6 Pokud Hermes endpoint nepotřebuje
Stačí interní workload v clusteru bez ingressu.
17. Co je potřeba vyklikat a rozhodnout pro Hermes provozně
V Azure musíš u Hermes scénáře rozhodnout hlavně toto:
Povinné volby
- region
- velikost clusteru
- počet nodů
- ACR
- Log Analytics
- Key Vault
- namespace
- image tag
- secrets
Rozhodnutí navíc
- veřejný vs interní endpoint
- 1 replika vs více replik
- persistentní storage ano/ne
- rolling update strategie
- restart policy
- monitoring a alerty
Doporučený minimální první rollout
- 1 AKS cluster
- 1 namespace
hermes - 1 replika
- secrets v Key Vaultu
- logy do Log Analytics
- ingress jen pokud je potřeba HTTP vstup
ČÁST C — SCÉNÁŘ 2: VLASTNÍ .NET 10 APLIKACE V DOCKERU NA AKS
18. Doporučený Docker model pro .NET 10
Pro .NET 10 web/API appku je typický model:
- multi-stage Docker build
- finální image s ASP.NET runtime
- port vystavený typicky na 8080
- health endpointy
- konfigurace přes env vars
Doporučené vlastnosti aplikace: - readiness endpoint - liveness endpoint - structured logs na stdout/stderr - connection stringy z environment variables - žádné lokální persistentní soubory jako primární storage
19. Azure Portal klikací postup pro .NET 10 scénář
19.1 Připrav databázi, pokud ji app potřebuje
Pokud app potřebuje DB: 1. V Azure Portalu založ odpovídající DB službu 2. Vezmi connection string 3. Ulož ho do Key Vaultu
Typicky: - Azure SQL Database - nebo Azure Database for PostgreSQL
19.2 Připrav namespace pro aplikaci
Doporučený namespace:
- dotnet-app
19.3 Připrav ingress endpoint
Rozhodni: - jaká bude URL - jaký DNS záznam použiješ - jestli chceš jen jednu app, nebo více app pod jedním ingress controllerem
19.4 Nastav health checks
U .NET aplikace je to velmi důležité.
Doporučené endpointy:
- /health
- /ready
19.5 Nastav škálování
První nasazení: - 1 nebo 2 repliky
Produkce: - spíš 2+ repliky, pokud chceš vyšší dostupnost
19.6 Nastav storage jen pokud je reálně potřeba
Pokud app generuje exporty nebo pracuje se soubory, raději použij: - Blob Storage - Azure Files
Nepoužívej container filesystem jako hlavní úložiště.
20. Co všechno budeš muset u .NET app rozhodnout
Povinné
- image name a tag
- port
- env vars
- DB connection
- ingress URL
- TLS
- health probes
Silně doporučené
- minimálně 2 repliky pro produkci
- rolling update
- monitoring
- alerts
- oddělené namespace od Hermes workloadu
ČÁST D — DOPORUČENÝ REÁLNÝ POSTUP OD NULY
21. Doporučené pořadí krok za krokem
Fáze 1 — Azure základ
- založit Resource Group
- založit Log Analytics Workspace
- založit Azure Container Registry
- založit AKS cluster
- propojit AKS ↔ ACR
- založit Key Vault
Fáze 2 — síť a vstup
- rozhodnout ingress variantu
- zprovoznit veřejnou IP / load balancer
- nastavit DNS
- nastavit TLS
Fáze 3 — aplikace
- připravit Docker image
- pushnout image do ACR
- založit namespace
hermes - nasadit Hermes workload
- založit namespace
dotnet-app - nasadit .NET 10 workload
Fáze 4 — provoz
- nastavit logy
- zkontrolovat health checky
- otestovat rollout / restart / update image
- nastavit alerting
22. Co přesně budeš klikat v Azure Portalu v kostce
Jednou pro platformu
- Resource groups → Create
- Log Analytics workspaces → Create
- Container registries → Create
- Kubernetes services → Create
- Key vaults → Create
Potom pro provoz
- AKS cluster → Monitoring / Insights zkontrolovat
- AKS cluster → Networking zkontrolovat
- ACR → Access control (IAM) zkontrolovat
AcrPull - Key Vault → Secrets → nahrát secrets
- DNS Zone nebo externí DNS → vytvořit
A/CNAMEzáznam
23. Doporučené rozdělení odpovědností
Azure řeší
- cluster
- registry
- monitoring
- identity
- síť
- ingress/public IP
Ty řešíš
- Dockerfile
- image build
- aplikaci
- konfiguraci
- secrets model
- doménu
- provozní pravidla
24. Nejčastější chyby
Chyba 1: AKS bez ACR oprávnění
Výsledek: - image nepůjde stáhnout
Chyba 2: žádný health endpoint
Výsledek: - rollout bude nespolehlivý - Kubernetes bude appku restartovat nebo označovat chybně
Chyba 3: secrets zapečené v image
Výsledek: - bezpečnostní problém
Chyba 4: ukládání důležitých dat do kontejneru
Výsledek: - ztráta dat po restartu / redeployi
Chyba 5: příliš velký cluster hned na začátku
Výsledek: - zbytečné náklady
Chyba 6: AKS pro jednu mini app bez důvodu
Výsledek: - zbytečně složitý provoz
25. Praktické doporučení pro tvoje dva scénáře
Scénář 1 — Hermes Agent v Dockeru na AKS
Zvol AKS tehdy, pokud: - Hermes bude součást větší platformy - chceš více agentních workloadů - chceš oddělit API, worker a pomocné služby - potřebuješ provozní standard Kubernetes
Minimální rozumná varianta:
- 1 cluster
- 1 namespace hermes
- 1 replika na start
- Key Vault na secrets
- logy do Log Analytics
- ingress jen pokud Hermes přijímá HTTP
Scénář 2 — vlastní .NET 10 aplikace v Dockeru na AKS
Zvol AKS tehdy, pokud: - .NET app je součást větší platformy - plánuješ více služeb - chceš standardní Kubernetes deployment model
Minimální rozumná varianta:
- 1 namespace dotnet-app
- 1 deployment
- 1 service
- 1 ingress
- health probes
- externí DB
- 1–2 repliky podle prostředí
26. Kdy bych doporučil změnit směr
Pokud chceš pouze: - jednu veřejnou .NET appku - bez složitých workerů - bez více služeb - bez Kubernetes know-how
pak bych prakticky zvážil místo AKS: - Azure Container Apps, nebo - App Service for Containers
Pokud ale chceš společnou platformu pro Hermes i .NET aplikace, AKS smysl dává.
27. Krátký závěr
Pro oba cíle je AKS použitelný, ale je to platformní volba, ne „nejjednodušší deployment“.
Nejjednodušší reálný blueprint
- 1 Resource Group
- 1 ACR
- 1 AKS cluster
- 1 Log Analytics Workspace
- 1 Key Vault
- namespace
hermes - namespace
dotnet-app - ingress pro veřejné appky
- DB a storage mimo cluster
Pokud chceš jít do realizace
Další praktický krok je připravit navazující artefakty: 1. Dockerfile pro Hermes scénář 2. Dockerfile pro .NET 10 scénář 3. Kubernetes YAML / Helm chart 4. checklist nasazení do AKS 5. CI/CD pipeline do ACR a AKS
28. Rychlý checklist „co budu muset v Azure vyklikat“
Platforma
- [ ] Resource Group
- [ ] Log Analytics Workspace
- [ ] Azure Container Registry
- [ ] AKS cluster
- [ ] napojení AKS na ACR
- [ ] Key Vault
Síť
- [ ] ingress varianta
- [ ] veřejná IP / load balancer
- [ ] DNS
- [ ] TLS
Scénář 1 — Hermes
- [ ] rozhodnout HTTP vs worker model
- [ ] uložit Hermes secrets
- [ ] připravit image
- [ ] nasadit do namespace
hermes - [ ] zkontrolovat logy a restart policy
Scénář 2 — .NET 10
- [ ] připravit DB
- [ ] uložit connection stringy
- [ ] připravit image
- [ ] nasadit do namespace
dotnet-app - [ ] nastavit health probes
- [ ] nastavit ingress
29. Doporučený další výstup
Pokud budeš chtít pokračovat, navazující smysluplný krok je vytvořit už konkrétní: - AKS deployment architekturu pro Hermes - AKS deployment architekturu pro tvoji .NET 10 app - konkrétní YAML manifesty - konkrétní seznam env vars a secrets - CI/CD postup build → ACR → AKS