Përshëndetje, Habrozhitës! Kubernetes është një nga elementët kyç të ekosistemit të sotëm të cloud. Kjo teknologji siguron besueshmëri, shkallëzueshmëri dhe qëndrueshmëri për virtualizimin e kontejnerëve. John Arundel dhe Justin Domingus flasin rreth ekosistemit Kubernetes dhe prezantojnë zgjidhje të provuara për problemet e përditshme. Hapat pas hapi do të ndiheni të ndërroni aplikacionin tuaj cloud dhe të krijoni infrastrukturën për mbështetje, të konfiguroni mjedisin e zhvillimit dhe një pipeline për shpërndarje të vazhdueshme që do t'ju ndihmojë në punën mbi aplikacionet tuaja të ardhshme.
⹠Do të filloni të punoni me kontejnerë dhe Kubernetes nga fillimi: nuk kërkohet asnjë përvojë e veçantë për të mësuar këtë temë. ⹠Do të aktivizoni klasterë tuaj ose do të zgjidhni një shërbim të menaxhuar Kubernetes nga Amazon, Google etj. ⹠Do të aplikoni Kubernetes për menaxhimin e ciklit të jetës së kontejnerëve dhe përdorimin e burimeve. ⹠Do të optimizoni klasterët për kostot, performancën, qëndrueshmërinë, fuqinë dhe shkallëzueshmërinë. ⹠Do të mësoni mjetet më të mira për zhvillimin, testimin dhe shpërndarjen e aplikacioneve tuaja. ⹠Do të përdorni praktikat më të fundit të industrisë për sigurimin dhe kontrollin. ⹠Do të implementoni parimet DevOps në kompanitë tuaja për t'i bërë ekipet e zhvilluesve të veprojnë në mënyrë më elastike, të shpejtë dhe efikase.
Për kë është libri
Libri Ă«shtĂ« mĂ« sĂ« shumti i rĂ«ndĂ«sishĂ«m pĂ«r punonjĂ«sit e seksioneve tĂ« administratĂ«s, pĂ«rgjegjĂ«s pĂ«r serverĂ«t, aplikacionet dhe shĂ«rbimet, si dhe pĂ«r zhvilluesit qĂ« merren me ndĂ«rtimin e shĂ«rbimeve tĂ« reja cloud ose migrimin e aplikacioneve ekzistuese nĂ« Kubernetes dhe cloud. Mos u shqetĂ«soni, nuk kĂ«rkohet tĂ« dini tĂ« punoni me Kubernetes dhe kontejnerĂ« â ne do t'ju mĂ«sojmĂ« gjithçka.
Përdoruesit e avancuar të Kubernetes gjithashtu do të gjejnë shumë të dobishme: këtu shqyrtohen në thellësi tema si RBAC, shpërndarje të vazhdueshme, menaxhimi i të dhënave të besueshme dhe observabiliteti. Shpresojmë që në faqet e librit do të ketë diçka interesante për ju, pavarësisht nga aftësitë dhe përvoja juaj.
Për cilat pyetje përgjigjet libri
Gjatë planifikimit dhe shkruarjes së librit, ne kemi diskutuar mbi teknologjitë cloud dhe Kubernetes me qindra njerëz, duke biseduar si me liderë dhe ekspertë të kësaj industrie, ashtu edhe me novakët e plotë. Më poshtë janë disa pyetje të veçanta, përgjigjet e të cilave ata do të donin t'i shihnin në këtë botim.
- «Më intereson, pse duhet të harxhoj kohë mbi këtë teknologji. Cilat probleme do të më ndihmojë të zgjidh, mua dhe ekipit tim?»
- «Kubernetes duket interesante, por ka një prag të lartë për hyrje. Të përgatisësh një shembull të thjeshtë nuk është e vështirë, por administrimi dhe debugsimi më vonë duken shqetësuese. Ne do të donim këshilla të besueshme se si njerzit menaxhojnë klasterët Kubernetes në kushte reale dhe me cilat probleme ndoshta do të përballemi».
- «Do të ishte e dobishme një këshillë subjektive. Ekosistemi Kubernetes i ofron ekipeve fillestare shumë mundësi për të zgjedhur. Kur e njëjta gjë mund të bëhet në disa mënyra, si ta kuptojmë se cili është më i mirë? Si ta bëjmë zgjedhjen?»
Dhe ndoshta, më e rëndësishmja nga të gjitha pyetjeve:
- «Si të përdor Kubernetes pa ndërprerë punën e kompanisë sime?»
Fragment. Konfigurimi dhe objektet Secret
Kapaciteti për të ndarë logjikën e aplikacionit Kubernetes nga konfigurimi i tij (dmth, nga çdo vlerë apo rregullim që mund të ndryshojë me kalimin e kohës) është shume i dobishëm. Vlerat konfiguruese zakonisht i përkasin parametrave të dedikuar për një ambient të caktuar, adresat DNS të shërbimeve të jashtme dhe kredencialet për autentifikim.
Sigurisht, të gjitha këto mund të vendosen direkt në kod, por ky qasje nuk është mjaft fleksibël. Për shembull, për të ndryshuar një vlerë konfiguruese do të duhet të rindërtojmë dhe shpërndajmë kodin tuaj në mënyrë të re. Një zgjidhje shumë më e mirë do të ishte të ndaje konfigurimin nga kodi dhe të lexohet nga një skedar apo variabla të mjedisit.
Kubernetes ofron disa mënyra të ndryshme për të menaxhuar konfigurimin. Së pari, ju mund të dërgoni vlerat në aplikacion përmes variablave të mjedisit të specifikuara në specifikimin e pod-shell-it (shih nënseksionin "Variablat e Mjedisit" në fq. 192). Së dyti, të dhënat konfiguruese mund të ruhen direkt në Kubernetes, duke përdorur objektet ConfigMap dhe Secret.
Në këtë kapitull, ne do të shqyrtojmë këto objekte në thellësi dhe do të shqyrtojmë disa qasje praktike për menaxhimin e konfigurimeve dhe të dhënave të besueshme me shembuj nga një aplikacion demonstrativ.
Përditësimi i pod-shell-ave kur ndryshon konfigurimi
Imagjinoni që në klasterin tuaj ka një implementim dhe dëshironi të ndryshoni disa vlera në ConfigMap-in e tij. Nëse përdorni chart-in Helm (shihni kapitullin «Helm: menaxheri i paketave për Kubernetes» në fq. 102), zbulohet ndryshimi i konfiguracionit dhe rindohet pod-ët tuaj automatikisht me një teknikë elegante. Shtoni këtë anotim në specifikimin e implementimit tuaj:
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") .
| sha256sum }}Tani, shablloni i implementimit përmban një kontroll të shumës së parametrave të konfigurimit: me ndryshimin e parametrave, shuma do të përditësohet. Nëse ekzekutoni komandën helm upgrade, Helm do të zbulojë se specifikimi i implementimit është ndryshuar dhe do të rindohet të gjithë pod-ët.
Të dhënat e ndjeshme në Kubernetes
Ne tashmë e dimë se objekti ConfigMap ofron një mekanizëm fleksibël për ruajtjen dhe qasjen në të dhënat e konfigurimit në klaster. Megjithatë, shumica e aplikacioneve kanë informacione që janë të fshehta dhe konfidenciale: siç janë fjalëkalimet ose çelësat API. Ato mund të ruhen gjithashtu në ConfigMap, por kjo zgjidhje nuk është ideale.
Në vend të kësaj, Kubernetes ofron një objekt të një lloji të veçantë, të destinuar për ruajtjen e të dhënave konfidenciale: Secret. Më pas do të shqyrtojmë një shembull se si ky objekt mund të përdoret në aplikacionin tonë demonstrues.
Për të filluar, shikoni manifestin e Kubernetes për objektin Secret (shihni hello-secret-env/k8s/secret.yaml):
apiVersion: v1
kind: Secret
metadata:
name: demo-secret
stringData:
magicWord: xyzzy
NĂ« kĂ«tĂ« shembull, çelĂ«si sekret magicWord ka vlerĂ«n xyzzy (en.wikipedia.org/wiki/Xyzzy_(computing)). Fjala xyzzy Ă«shtĂ« gjithashtu shumĂ« e dobishme nĂ« botĂ«n e kompjuterĂ«ve. NĂ« pĂ«rputhje me ConfigMap, nĂ« objektin Secret mund tĂ« vendosen shumĂ« çelĂ«sa dhe vlera. KĂ«tu pĂ«r thjeshtĂ«si po pĂ«rdorim vetĂ«m njĂ« çift «çelĂ«s â vlerë».
Përdorimi i objekteve Secret si variabla mjedisi
Si ConfigMap, objekti Secret mund të jetë i disponueshëm në kontejner si variabla mjedisi ose si skedar në disku të tij. Në shembullin e mëposhtëm, ne do t'i japim variablës mjedisi vlerën nga Secret:
spec:
containers:
- name: demo
image: cloudnatived/demo:hello-secret-env
ports:
- containerPort: 8888
env:
- name: GREETING
valueFrom:
secretKeyRef:
name: demo-secret
key: magicWordEkzekutoni komandën e mëposhtme në repozitorin demo për të aplikuar manifestet:
kubectl apply -f hello-secret-env/k8s/
deployment.extensions "demo" configured
secret "demo-secret" createdSi më parë, drejtoni portin lokal në implementim për të parë rezultatin në shfletuesin tuaj:
kubectl port-forward deploy/demo 9999:8888
Forwarding from 127.0.0.1:9999 -> 8888
Forwarding from [::1]:9999 -> 8888Kur hapni adresën :9999/ duhet të shihni si më poshtë:
Fjala magjike është "xyzzy"
Shkrimi i objekteve Secret në skedarë
Në këtë shembull, ne do të lidhim objektin Secret me kontejnerin si skedar. Kodi ndodhet në folderin hello-secret-file të repozitorit demo.
Për të lidhur Secret-in si skedar, do të përdorim implementimin e mëposhtëm:
spec:
containers:
- name: demo
image: cloudnatived/demo:hello-secret-file
ports:
- containerPort: 8888
volumeMounts:
- name: demo-secret-volume
mountPath: "/secrets/"
readOnly: true
volumes:
- name: demo-secret-volume
secret:
secretName: demo-secretSi nĂ« nĂ«nkapitullin «Krijimi i skedarĂ«ve tĂ« konfigurimit nga objektet ConfigMap» nĂ« fq. 240, ne krijojmĂ« njĂ« vĂ«llim (nĂ« kĂ«tĂ« rast Ă«shtĂ« demo-secret-volume) dhe e lidhim atĂ« me kontejnerin nĂ« seksionin e specifikimeve tĂ« volumeMounts. NĂ« fushĂ«n mountPath Ă«shtĂ« e pĂ«rcaktuar "/secrets", pĂ«r kĂ«tĂ« arsye Kubernetes do tĂ« krijojĂ« nĂ« kĂ«tĂ« dosje njĂ« skedar pĂ«r çdo çift «çelĂ«s â vlerë» tĂ« pĂ«rcaktuar nĂ« objektin Secret.
NĂ« shembullin tonĂ« ne kemi pĂ«rcaktuar vetĂ«m njĂ« çift «çelĂ«s â vlerë» me emrin magicWord, kĂ«shtu qĂ« manifesti do tĂ« krijojĂ« nĂ« kontejner njĂ« skedar "/secrets/magicWord" me tĂ« dhĂ«na konfidenciale, i aksesueshĂ«m vetĂ«m pĂ«r lexim.
Nëse aplikohet ky manifest në të njëjtën mënyrë si në shembullin e mëparshëm, duhet të kemi të njëjtin rezultat:
Fjala magjike është "xyzzy"
Leximi i objekteve Secret
Në seksionin e mëparshëm ne përdorëm komandën kubectl describe për të shfaqur përmbajtjen e ConfigMap. A është e mundur të bëjmë të njëjtën gjë me Secret?
kubectl describe secret/demo-secret
Name: demo-secret
Namespace: default
Labels:
Annotations:
Type: Opaque
Data
====
magicWord: 5 bytesVini re se vetë të dhënat nuk shfaqen. Objeket Secret në Kubernetes kanë tipin Opaque: kjo do të thotë se përmbajtja e tyre nuk shfaqet në daljen e kubectl describe, regjistrat dhe terminalin, duke e bërë të pamundur të zbulohet rastësisht informacioni konfidencial.
Për të parë versionin e koduar të të dhënave konfidenciale në format YAML, përdorni komandën kubectl get:
kubectl get secret/demo-secret -o yaml
apiVersion: v1
data:
magicWord: eHl6enk=
kind: Secret
metadata:
...
type: Opaquebase64
ĂfarĂ« Ă«shtĂ« eHl6enk=, nuk duket aspak si vlera jonĂ« origjinale? NĂ« tĂ« vĂ«rtetĂ«, kjo Ă«shtĂ« njĂ« objekt Secret, i paraqitur nĂ« kodimin base64. Base64 Ă«shtĂ« njĂ« skemĂ« kodimi e tĂ« dhĂ«nave binare tĂ« rastĂ«sishme nĂ« formĂ«n e njĂ« vargu karakteresh.
Për shkak se informacioni konfidencial mund të jetë binar dhe i paarritshëm për dalje (siç është rasti me çelësin e enkriptimit TLS), objektet Secret gjithmonë ruhen në formatin base64.
Teksti beHl6enk= është një version i fjalës sonë sekrete xyzzy, e koduar në base64. Këtë mund ta verifikoni nëse ekzekutoni komandën base64 --decode në terminal:
echo "eHl6enk=" | base64 --decode
xyzzyKështu që, pavarësisht se Kubernetes ju mbron nga dalja aksidentale e të dhënave konfidenciale në terminal ose skedarët e regjistrit, nëse keni të drejta për të lexuar objektet Secret në një hapësirë emrash të caktuar, këto të dhëna mund të merren në formatin base64 dhe pastaj të dekodohet.
Nëse ju nevojitet të kodoni në base64 ndonjë tekst (p.sh. për ta vendosur atë në Secret), përdorni komandën base64 pa argumente:
echo xyzzy | base64
eHl6enkKAksesi në objektet Secret
Kush mund tĂ« lexojĂ« dhe editojĂ« objektet Secret? Kjo pĂ«rcaktohet nga RBAC â mekanizmi i kontrollit tĂ« aksesit (do ta diskutojmĂ« nĂ« detaje nĂ« nĂ«nseksionin "Hyrje nĂ« menaxhimin e aksesit tĂ« bazuar nĂ« role" faqe 258). NĂ« rast se pĂ«rdorni njĂ« grumbull ku sistemi RBAC nuk ekziston ose nuk Ă«shtĂ« aktivizuar, tĂ« gjithĂ« objektet tuaj Secret janĂ« tĂ« arritshme pĂ«r çdo pĂ«rdorues dhe kontejnerĂ« (mĂ« vonĂ« do tĂ« shpjegojmĂ« se nuk duhet tĂ« keni asnjĂ« grumbull prodhimi pa RBAC).
Enkriptimi pasiv i të dhënave
E çfarë është për ata që kanë akses në bazën e të dhënave etcd, ku Kubernetes ruan të gjithë informacionin e tij? A mund të lexojnë të dhënat konfidenciale pa pasur të drejta për të lexuar objektet Secret përmes API-së?
Që nga versioni 1.7, Kubernetes mbështet enkriptimin pasiv të të dhënave. Kjo do të thotë se informacioni konfidencial brenda etcd ruhet në disk në formën e enkriptuar dhe nuk mund të lexohet as nga ata që kanë qasje të drejtpërdrejtë në bazën e të dhënave. Për ta dekoduar atë nevojitet një çelës, i cili është vetëm tek serveri API i Kubernetes. Në një grumbull të konfiguruar saktë, enkriptimi pasiv duhet të jetë aktivizuar.
Mund ta kontrolloni nëse enkriptimi pasiv funksionon në grumbullin tuaj kështu:
kubectl describe pod -n kube-system -l component=kube-apiserver |grep encryption
--experimental-encryption-provider-config=...Nëse nuk e shihni flamurin experimental-encryption-provider-config, enkriptimi pasiv nuk është aktivizuar. Kur përdorni Google Kubernetes Engine ose shërbime të tjera për menaxhimin e Kubernetes, të dhënat tuaja janë të enkriptuara me një mekanizëm tjetër, kështu që flamuri do të mungojë. Kontaktoni ofruesin tuaj të Kubernetes për të kuptuar nëse përmbajtja e etcd është e enkriptuar.
Ruajtja e të dhënave konfidenciale
Ka disa burime Kubernetes që nuk duhet kurrë të fshihen nga grumbulli: për shembull, objektet shumë të rëndësishme Secret. Mund të mbani burimin nga fshirja duke përdorur një annotim, të ofruar nga menaxheri Helm:
kind: Secret
metadata:
annotations:
"helm.sh/resource-policy": keepStrategjitë e menaxhimit të objekteve Secret
Në shembullin e seksionit të mëparshëm, të dhënat konfidenciale u mbrojtën nga qasja e paautorizuar përballë ruajtjes në grumbull. Por në skedarët e manifestit, ato ishin të ruajtura si teksti i zakonshëm.
Nuk duhet të vendosni asnjë informacion konfidencial në skedarët që ndodhen në sistemin e kontrollit të versioneve. Si do ta menaxhoni dhe ruani sigurt këtë informacion deri sa ta aplikoni në grumbullin Kubernetes?
Mund të zgjidhni çdo mjet ose strategji për të punuar me të dhënat konfidenciale në aplikacionet tuaja, por do t'ju nevojitet të përgjigjeni të paktën në pyetje të mëposhtme.
- Ku të ruani të dhënat konfidenciale për t'i pasur shumë në dispozicion?
- Si t'i bëni të dhënat konfidenciale të arritshme për aplikacionet tuaja aktive?
- ĂfarĂ« duhet tĂ« ndodhĂ« me aplikacionet tuaja kur zĂ«vendĂ«soni ose redaktoni tĂ« dhĂ«nat konfidenciale?
Për autorët
DĆŸon Arundel Ă«shtĂ« njĂ« konsulent me 30 vjet pĂ«rvojĂ« nĂ« industrinĂ« kompjuterike. Ai ka shkruar disa libra dhe punon me shumĂ« kompani nga vende tĂ« ndryshme, duke i kĂ«shilluar pĂ«r infrastrukturĂ«n e orientuar nga re dhe Kubernetes. NĂ« kohĂ«n e tij tĂ« lirĂ«, ai pĂ«lqen surfimin, ka aftĂ«si tĂ« mira nĂ« qĂ«llim dhe luan me pasion piano. Jeton nĂ« njĂ« kabinĂ« magjike nĂ« Kornuoll, Angli.
DĆŸastin Domingus â inxhinier i administratĂ«s sĂ« sistemeve, duke punuar nĂ« njĂ« mjedis DevOps me Kubernetes dhe teknologjitĂ« e cloud. I pĂ«lqen tĂ« kalojĂ« kohĂ« nĂ« natyrĂ«, tĂ« pijĂ« kafe, tĂ« kapĂ« krabĂ« dhe tĂ« ulet para kompjuterit. Jeton nĂ« Seattle, Washington, me njĂ« mace tĂ« mrekullueshme dhe njĂ« grua po aq tĂ« mrekullueshme qĂ« Ă«shtĂ« dhe shoku i tij mĂ« i mirĂ«, Adrienne.
» Më shumë detaje për librin mund të gjenden në
»
»
PĂ«r pĂ«rdoruesit e Habr, zbritje 25% me kuponin â Kubernetes
Pas pagesës për versionin në paper të librit, një libër elektronik do të dërgohet në e-mail.
Burimi: habr.com
