Kubernetes
Kubernetes Ħassejtha Eħfef Ladarba Fhimt Dawn il-Bażi
Għadni ma ddeplojajtx Kubernetes fi proġett reali, l-istess bħall-biċċa l-kbira ta' dak li naf dwar id-disinn tas-software: rajt, fhimt, għadni ma applikajtx. Il-bażi xorta waqfet tħossha bħal ħajt ta' YAML ladarba kelli mudell mentali għaliha.
Għadni ma ddeplojajtx Kubernetes fi kwalunkwe proġett reali, l-istess bħall-biċċa l-kbira ta' dak li naf dwar id-disinn tas-software ta' .NET: rajt, fhimt, għadni ma applikajtx. Iżda l-bażi waqfet tħossha bħal ħajt ta' YAML ladarba kelli mudell mentali għal x'kienet verament tagħmel kull biċċa.
Pods, Deployments, Services, fajls YAML, ConfigMaps, Secrets, probes, clusters, u tużżani ta' kmandi. Bħala junior .NET developer, bqajt naħseb: għaliex neħtieġ dan kollu biss biex inħaddem API ta' ASP.NET Core?
Sar eħfef ladarba fhimt ftit ideat bażiċi.
Kubernetes iħaddem containers
Kubernetes ma jibnix l-applikazzjoni C# tiegħi. L-ewwel trid tiġi ppubblikata u ippakkjata ġewwa image ta' Docker:
ASP.NET Core API
→ Docker image
→ Kubernetes
Jekk l-applikazzjoni ma taħdimx ġewwa Docker, Kubernetes mhux se jsewwiha.
Il-Pods iħaddmu l-applikazzjoni
Pod huwa fejn container jaħdem. Pod wieħed jista' jkun fih istanza waħda ta' API ta' ASP.NET Core.
Il-Pods huma temporanji. Jistgħu jitħassru, jerġgħu jibdew, jew jinbidlu, għalhekk xejn importanti m'għandu jgħix ġo wieħed. Id-database, is-sessjonijiet, u fajls importanti jappartjenu barra mill-Pod.
Id-Deployments jiġġestixxu l-Pods
Deployment jiddeskrivi kemm istanzi ta' applikazzjoni għandhom ikunu jaħdmu:
spec:
replicas: 2
Jekk Pod wieħed jikkraxxja, Kubernetes joħloq ieħor biex jieħu postu. Dik hija l-idea ewlenija: tiddeskrivi l-istat mixtieq, u Kubernetes jipprova jżommu.
Is-Services jesponu l-applikazzjoni
Il-Pods jistgħu jbiddlu indirizzi IP meta jinħolqu mill-ġdid. Service jagħti lill-applikazzjoni indirizz stabbli u jibgħat it-talbiet lil liema Pods ikunu disponibbli:
Client
→ Service
→ Pod
→ ASP.NET Core API
Mingħajr Service, il-klijenti kienu jkollhom bżonn jafu l-indirizz ta' kull Pod individwali.
Il-konfigurazzjoni għandha tkun esterna
Connection strings u settings tal-ambjent m'għandhomx ikunu hardcoded ġewwa l-image. ConfigMaps u Secrets jieħdu ħsieb dan minflok, u ASP.NET Core jaqrahom bħala environment variables:
var connectionString =
builder.Configuration.GetConnectionString("DefaultConnection");
Dak hu li jħalli l-istess image ta' container taħdem fl-iżvilupp, fit-testing, u fil-produzzjoni b'settings differenti.
Il-health checks jimportaw
Kubernetes jista' jiċċekkja jekk API hix b'saħħitha. Readiness probe tistaqsi jekk l-applikazzjoni tistax tirċievi traffiku. Liveness probe tistaqsi jekk għadhiex qed taħdem sew. ASP.NET Core jesponi dan permezz ta' health endpoint:
builder.Services.AddHealthChecks();
app.MapHealthChecks("/health");
Kubernetes juża dan biex jiddeċiedi jekk Pod għandux jirċievi traffiku jew jerġa' jibda.
Il-kmandi li jimportaw l-aktar
Il-ftit kmandi ta' kubectl li jispiċċaw jidhru kontinwament f'kull walkthrough:
kubectl get pods
kubectl get services
kubectl describe pod <pod-name>
kubectl logs <pod-name>
kubectl apply -f deployment.yaml
Il-fluss tad-debugging huwa kważi dejjem l-istess: get pods, imbagħad describe pod, imbagħad iċċekkja l-logs.
Fejn verament ninsab b'dan
Nifhem il-mudell mentali: Docker jippakkja l-applikazzjoni, il-Pods iħaddmuha, id-Deployments jiġġestixxu l-Pods, is-Services jesponuhom, ConfigMaps u Secrets jieħdu ħsieb il-konfigurazzjoni, il-probes jiċċekkjaw is-saħħa. Dak li għad m'għandix huwa proġett reali li verament jaħdem fuq Kubernetes. Huwa l-istess lakuna li għandi ma' ħafna kunċetti ta' disinn tas-software: mifhum biżżejjed biex nispjegah, mhux għadu xi ħaġa li kelli nagħmel taħdem taħt kundizzjonijiet reali. Dak li jmiss.