Sveiki, Habr!
Vasaras beigÄs vÄlÄjamies atgÄdinÄt, ka turpinÄm strÄdÄt pie tÄmas un esam nolÄmuÅ”i publicÄt rakstu no Stackoverflow, kas atspoguļo situÄciju Å”ajÄ projektÄ jÅ«nija sÄkumÄ.

Patīkamu lasīŔanu!
Raksta sagatavoÅ”anas brÄ«dÄ« Kubernetes vecums ir aptuveni , un pÄdÄjo divu gadu laikÄ tÄ popularitÄte ir pieaugusi lÄ«dz tÄdam lÄ«menim, ka tÄ stabilÄkÄ ir starp platformÄm. Å ajÄ gadÄ Kubernetes ieÅem treÅ”o vietu. AtgÄdinÄm: Kubernetes ir platforma, kas paredzÄta konteineru darba slodžu palaiÅ”anai un orÄ·estrÄcijai.
Konteineri radÄs kÄ Ä«paÅ”a konstrukcija procesu izolÄcijai Linux; konteineros kopÅ” 2007. gada ietilpst , bet kopÅ” 2002. gada ā nosaukumu telpas. Konteineri attÄ«stÄ«jÄs vÄl labÄk lÄ«dz 2008. gadam, kad kļuva pieejama , un Google izstrÄdÄja savu iekÅ”Äjo mehÄnismu, kas saucas , kur āvisa darbÄ«ba notiek konteinerosā. PÄriesim uz 2013. gadu, kad notika pirmais Docker izlaidums, un konteineri beidzot kļuva par populÄrÄm masveida risinÄjumiem. TajÄ brÄ«dÄ« galvenais instruments konteineru orÄ·estrÄcijai bija , kaut gan tam nebija liela popularitÄte. Pirmais Kubernetes izlaidums notika 2015. gadÄ, pÄc kura Å”is rÄ«ks faktiski kļuva par standartu konteineru orÄ·estrÄcijÄ.
Lai mÄÄ£inÄtu saprast, kÄpÄc Kubernetes ir tik populÄrs, mÄÄ£inÄsim atbildÄt uz dažiem jautÄjumiem. Kad pÄdÄjoreiz izstrÄdÄtÄjiem izdevÄs vienoties par to, kÄ izvietot lietotnes ražoÅ”anÄ? Cik jÅ«s pazÄ«stat izstrÄdÄtÄju, kuri izmanto rÄ«kus tÄdÄ veidÄ, kÄ tie tiek piegÄdÄti āno kÄrbasā? Cik Å”odien ir tÄdu mÄkoÅu administratoru, kuri nesaprot, kÄ darbojas lietotnes? Atbildes uz Å”iem jautÄjumiem mÄs apskatÄ«sim Å”ajÄ rakstÄ.
InfrastruktÅ«ra kÄ YAML
PasaulÄ, kas no Puppet un Chef pÄrgÄja uz Kubernetes, viena no lielÄkajÄm pÄrmaiÅÄm bija pÄreja no āinfrastruktÅ«ras kÄ kodsā uz āinfrastruktÅ«ras kÄ datiā ā konkrÄti, kÄ YAML. Visus resursus Kubernetes, kas ietver pods, konfigurÄcijas, izvietotie instanÄu, apjomi u.c., var viegli aprakstÄ«t YAML failÄ. PiemÄram:
apiVersion: v1
kind: Pod
metadata:
name: site
labels:
app: web
spec:
containers:
- name: front-end
image: nginx
ports:
- containerPort: 80Ar Å”Ädu pieeju DevOps vai SRE speciÄlistiem ir ÄrtÄk pilnÄ«bÄ izteikt savas darba slodzes, nepÄrkÄpjot programmÄÅ”anas valodu kÄ Python vai Javascript rakstīŔanu.
Citi datu infrastruktÅ«ras organizÄÅ”anas ieguvumi ir Å”Ädi:
- GitOps vai Git Operations Version versiju kontrole. Å Äda pieeja ļauj turÄt visus Kubernetes YAML failus git repozitorijÄs, tÄdÄjÄdi jÅ«s precÄ«zi varat izsekot, kad tika veiktas izmaiÅas, kurÅ” tÄs veica un kas tieÅ”i tika mainÄ«ts. Tas uzlabo organizÄcijas darÄ«jumu caurredzamÄ«bu, palielina efektivitÄti novÄrÅ”ot neskaidrÄ«bas, kur darbiniekiem jÄmeklÄ nepiecieÅ”amie resursi. TajÄ paÅ”Ä laikÄ kļūst vieglÄk automÄtiski veikt izmaiÅas Kubernetes resursos ā izmantojot parasto pieprasÄ«jumu apvienoÅ”anu.
- MÄrogojamÄ«ba. Kad resursi ir definÄti YAML formÄtÄ, klastera operatoriem kļūst ÄrkÄrtÄ«gi viegli mainÄ«t vienu vai divus skaitļus Kubernetes resursÄ, tÄdÄjÄdi mainot tÄ mÄrogoÅ”anas principus. Kubernetes ir paredzÄta mehÄnika horizontÄlai automÄtiskai mÄrogoÅ”anai, kas ļauj Ärti noteikt minimÄlo un maksimÄlo podu skaitu, kas nepiecieÅ”ams konkrÄtajai izvÄrsto konfigurÄcijai, lai tiktu galÄ ar zemu un augstu trafika lÄ«meni. PiemÄram, ja esat izveidojis konfigurÄciju, kurai nepiecieÅ”ama papildu jauda sakarÄ ar strauju trafika pieaugumu, jÅ«s varat mainÄ«t maxReplicas rÄdÄ«tÄju no 10 uz 20:
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: myapp
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp-deployment
minReplicas: 1
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50- DroŔība un pÄrvaldÄ«ba. YAML ir lieliski piemÄrots, lai novÄrtÄtu, kÄ tiek izvÄrsti dažÄdi elementi Kubernetes. PiemÄram, nopietna problÄma, kas saistÄ«ta ar droŔības nodroÅ”inÄÅ”anu, ir tÄ, vai jÅ«su darba slodzes tiek palaistas no lietotÄja bez administratora tiesÄ«bÄm. Å ajÄ gadÄ«jumÄ mums var noderÄt tÄdi rÄ«ki kÄ , YAML/JSON validÄtÄjs, plus , politikas validÄtÄjs, kas ļauj pÄrliecinÄties, ka konteksts jÅ«su darba noslodzi neļauj konteineram darboties ar administratora privilÄÄ£ijÄm. Ja tas nepiecieÅ”ams, lietotÄji var ieviest vienkÄrÅ”u politiku , tÄpat:
package main
deny[msg] {
input.kind = "Deployment"
not input.spec.template.spec.securityContext.runAsNonRoot = true
msg = "Konteinera nedrÄ«kst darboties kÄ root"
}- IespÄjas integrÄties ar mÄkoÅu pakalpojumu sniedzÄju. Viens no acÄ«mredzamÄkajiem mÅ«sdienu augsto tehnoloÄ£iju virzieniem ir strÄdÄt ar slodzÄm publisko mÄkoÅu pakalpojumu sniedzÄju jaudÄ. Ar komponenta palÄ«dzÄ«bu Kubernetes ļauj ikvienam klasterim integrÄties ar to mÄkoÅu pakalpojumu sniedzÄju, uz kura tas darbojas. PiemÄram, ja lietotÄjs ir palaidis lietojumprogrammu Kubernetes uz AWS un vÄlas atvÄrt piekļuvi Å”ai lietojumprogrammai, mÄkoÅu pakalpojumu sniedzÄjs palÄ«dz automÄtiski izveidot pakalpojumu
LoadBalancer, kas automÄtiski nodroÅ”inÄs slodzes balansÄtÄju , lai novirzÄ«tu trafiku uz lietojumprogrammu podiem.
PaplaÅ”inÄmÄ«ba
Kubernetes ļoti labi paplaÅ”inÄs, un tas patÄ«k izstrÄdÄtÄjiem. PastÄv komplekts esoÅ”o resursu, piemÄram, podi, izvietojumi, StatefulSets, slepenie, ConfigMaps, utt. PatiesÄ«bÄ lietotÄji un izstrÄdÄtÄji var pievienot arÄ« citus resursus veidÄ .
PiemÄram, ja mÄs vÄlamies definÄt resursu CronTab, mÄs varÄtu darÄ«t kaut ko lÄ«dzÄ«gu:
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: crontabs.my.org
spec:
group: my.org
versions:
- name: v1
served: true
storage: true
Schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
cronSpec:
type: string
pattern: '^(d+|*)(\/d+)?(s+(d+|*)(\/d+)?){4}$'
replicas:
type: integer
minimum: 1
maximum: 10
scope: Namespaced
names:
plural: crontabs
singular: crontab
kind: CronTab
shortNames:
- ct
VÄlÄk mÄs varam izveidot CronTab resursu aptuveni Å”ÄdÄ veidÄ:
apiVersion: "my.org/v1"
kind: CronTab
metadata:
name: my-cron-object
spec:
cronSpec: "* * * * */5"
image: my-cron-image
replicas: 5
VÄl viena paplaÅ”inÄmÄ«bas iespÄja Kubernetes ir izstrÄdÄtÄjs var rakstÄ«t savus operatorus. ā tas ir Ä«paÅ”s process Kubernetes klasterÄ«, kas darbojas pÄc āā parauga. Pateicoties operatoram, lietotÄjs var automatizÄt CRD (pielÄgoto resursu definÄ«ciju) pÄrvaldÄ«bu, apmainoties ar informÄciju ar Kubernetes API.
KopienÄ ir vairÄkas rÄ«ku, kas izstrÄdÄtÄjiem atvieglo savu operatoru izstrÄdi. Starp tiem ir un tÄ . Å is SDK nodroÅ”ina bÄzi, no kuras izstrÄdÄtÄjs var ļoti Ätri sÄkt veidot operatoru. PiemÄram, to var sÄkt ar komandai no tÄs
$ operator-sdk new my-operator --repo github.com/myuser/my-operatorTÄdÄ veidÄ tiek izveidots viss raksturlielumu kods jÅ«su operatoram, tostarp YAML faili un kods Golang:
.
|____cmd
| |____manager
| | |____main.go
|____go.mod
|____deploy
| |____role.yaml
| |____role_binding.yaml
| |____service_account.yaml
| |____operator.yaml
|____tools.go
|____go.sum
|____.gitignore
|____version
| |____version.go
|____build
| |____bin
| | |____user_setup
| | |____entrypoint
| |____Dockerfile
|____pkg
| |____apis
| | |____apis.go
| |____controller
| | |____controller.goPÄc tam var pievienot nepiecieÅ”amos API un kontrolieri, Å”Ädi:
$ operator-sdk add api --api-version=myapp.com/v1alpha1 --kind=MyAppService
$ operator-sdk add controller --api-version=myapp.com/v1alpha1 --kind=MyAppServicePÄc tam visfinally, salikt operatoru un augÅ”upielÄdÄt to savÄ konteinera reÄ£istrÄ:
$ operator-sdk build your.container.registry/youruser/myapp-operator Ja izstrÄdÄtÄjam nepiecieÅ”ama vÄl lielÄka kontrole, tad var mainÄ«t raksturlielumu kodu failos, kas uzrakstÄ«ti Go valodÄ. PiemÄram, lai izmainÄ«tu kontroliera specifiku, var veikt izmaiÅas failÄ controller.go.
VÄl viens projekts, , ļauj veidot operatorus, izmantojot tikai deklaratÄ«vus YAML failus. PiemÄram, operators Apache Kafka tiks definÄts apmÄram Å”Ädi . Ar to var Ä«stenot tikai dažu komandu palÄ«dzÄ«bu, lai uzstÄdÄ«tu Kafka klasteri virs Kubernetes:
$ kubectl kudo install zookeeper
$ kubectl kudo install kafkaUn pÄc tam to konfigurÄt ar vÄl vienu komandu:
$ kubectl kudo install kafka --instance=my-kafka-name
-p ZOOKEEPER_URI=zk-zookeeper-0.zk-hs:2181
-p ZOOKEEPER_PATH=/my-path -p BROKER_CPUS=3000m
-p BROKER_COUNT=5 -p BROKER_MEM=4096m
-p DISK_SIZE=40Gi -p MIN_INSYNC_REPLICAS=3
-p NUM_NETWORK_THREADS=10 -p NUM_IO_THREADS=20
Jaunumi
PÄdÄjo pÄris gadu laikÄ lieli Kubernetes laidieni notiek ik pÄc dažiem mÄneÅ”iem ā proti, trÄ«s vai Äetri lielie laidieni gadÄ. Jauno funkciju skaits, kas tiek iekļautas katrÄ no tiem, nemazinÄs. TurklÄt pat mÅ«sdienÄs nav pazÄ«mju par palÄninÄÅ”anos ā aplÅ«kojiet, kÄda ir paÅ”reizÄjÄ .
Jaunas iespÄjas ļauj elastÄ«gÄk klasterizÄt operÄcijas, ja ir dažÄdas darba slodzes. TurklÄt programmÄtÄjiem patÄ«k pilnÄ«gÄka kontrole, izvietojot lietojumprogrammas tieÅ”i ražoÅ”anÄ.
Kopiena
VÄl viens bÅ«tisks Kubernetes popularitÄtes aspekts ir tÄ kopienas spÄks. 2015. gadÄ, kad tika sasniegta versija 1.0, Kubernetes tika sponsorÄts .
TÄpat pastÄv dažÄdas kopienas (speciÄlÄs intereÅ”u grupas), kuru mÄrÄ·is ir izstrÄdÄt dažÄdas Kubernetes jomas, kamÄr projekts attÄ«stÄs. Å Ä«s grupas pastÄvÄ«gi pievieno jaunas iespÄjas, tÄdÄjÄdi padarot darbu ar Kubernetes ÄrtÄku.
Cloud Native Foundation arÄ« organizÄ CloudNativeCon/KubeCon, kas, rakstīŔanas brÄ«dÄ«, ir lielÄkÄ atvÄrtÄ koda konference pasaulÄ. Parasti tÄ notiek trÄ«s reizes gadÄ un pulcÄ tÅ«kstoÅ”iem profesionÄļu, kas vÄlas uzlabot Kubernetes un tÄ ekosistÄmu, kÄ arÄ« apgÅ«t jaunas iespÄjas, kas parÄdÄs ik pÄc trim mÄneÅ”iem.
TurklÄt Cloud Native Foundation ir , kas kopÄ ar SIG vÄrtÄ jaunus un esoÅ”us fondÄ, kas ir orientÄti uz mÄkoÅu ekosistÄmu. LielÄkÄ daļa no Å”iem projektiem palÄ«dz uzlabot Kubernetes stiprÄs puses.
Visbeidzot, es ticu, ka Kubernetes nebÅ«tu guvis tÄdu panÄkumu bez apzinÄtiem visas kopienas centieniem, kur cilvÄki atbalsta viens otru, bet vienlaikus ar prieku uzÅem jaunpienÄcÄjus.
NÄkotne
Viens no galvenajiem izaicinÄjumiem, ar kuriem nÄkotnÄ saskarsies izstrÄdÄtÄji, ir spÄja koncentrÄties uz koda detaļÄm, nevis uz infrastruktÅ«ru, kurÄ tas darbojas. Å Ä«m tendencÄm atbilst , kas Å”odien ir viena no vadoÅ”ajÄm. Jau pastÄv attÄ«stÄ«tas ietvarstruktÅ«ras, piemÄram, un , kas izmanto Kubernetes, lai abstrahÄtu infrastruktÅ«ru no izstrÄdÄtÄja.
Å ajÄ rakstÄ mÄs tikai vispÄrÄ«gi apskatÄ«jÄm paÅ”reizÄjo Kubernetes stÄvokli ā patiesÄ«bÄ tas ir tikai aisberga virsotne. LietotÄjiem Kubernetes ir pieejami arÄ« daudzi citi resursi, iespÄjas un konfigurÄcijas.
Avots: habr.com
