Libri "Kubernetes për DevOps"

Libri "Kubernetes për DevOps" Përshëndetje, banorë të Khabro! Kubernetes është një nga elementët kryesorë të ekosistemit modern të reve. Kjo teknologji ofron besueshmëri, shkallëzim dhe elasticitet ndaj virtualizimit të kontejnerëve. John Arundel dhe Justin Domingus flasin për ekosistemin Kubernetes dhe prezantojnë zgjidhje të provuara për problemet e përditshme. Hap pas hapi, ju do të ndërtoni aplikacionin tuaj vendas në renë kompjuterike dhe do të krijoni infrastrukturën për ta mbështetur atë, do të krijoni një mjedis zhvillimi dhe një tubacion të vazhdueshëm vendosjeje që do t'ju ndihmojë ndërsa punoni në aplikacionet tuaja të ardhshme.

• Filloni me kontejnerët dhe Kubernetes nga bazat: nuk kërkohet përvojë e veçantë për të mësuar temën. • Drejtoni grupet tuaja ose zgjidhni një shërbim të menaxhuar Kubernetes nga Amazon, Google, etj. • Përdorni Kubernetes për të menaxhuar ciklin e jetës së kontejnerit dhe konsumin e burimeve. • Optimizoni grupet bazuar në koston, performancën, elasticitetin, fuqinë dhe shkallëzueshmërinë. • Mësoni mjetet më të mira për të zhvilluar, testuar dhe vendosur aplikacionet tuaja. • Përdorni praktikat aktuale të industrisë për të garantuar sigurinë dhe kontrollin. • Zbatoni parimet e DevOps në të gjithë kompaninë tuaj në mënyrë që ekipet e zhvillimit të mund të veprojnë në mënyrë më fleksibël, shpejt dhe me efikasitet.

Për kë është libri?

Libri është më i rëndësishëm për punonjësit e departamenteve të administratës përgjegjës për serverët, aplikacionet dhe shërbimet, si dhe për zhvilluesit e përfshirë në ndërtimin e shërbimeve të reja cloud ose migrimin e aplikacioneve ekzistuese në Kubernetes dhe cloud. Mos u shqetësoni, nuk keni nevojë të dini se si të punoni me Kubernetes ose kontejnerë - ne do t'ju mësojmë gjithçka.

Përdoruesit me përvojë të Kubernetes do të gjejnë gjithashtu shumë vlerë, me mbulim të thelluar të temave si RBAC, vendosja e vazhdueshme, menaxhimi i ndjeshëm i të dhënave dhe vëzhgueshmëria. Shpresojmë që faqet e librit të përmbajnë patjetër diçka interesante për ju, pavarësisht nga aftësitë dhe përvoja juaj.

Çfarë pyetjesh u përgjigjet libri?

Gjatë planifikimit dhe shkrimit të librit, ne diskutuam teknologjinë cloud dhe Kubernetes me qindra njerëz, duke folur me drejtues dhe ekspertë të industrisë, si dhe me fillestarë të plotë. Më poshtë janë pyetjet e përzgjedhura për të cilat do të dëshironin të merrnin përgjigje në këtë publikim.

  • “Më intereson pse duhet të shpenzosh kohë në këtë teknologji. Çfarë problemesh do të më ndihmojë mua dhe ekipin tim të zgjidhim?”
  • “Kubernetes duket interesant, por ka një pengesë mjaft të lartë për hyrjen. Përgatitja e një shembulli të thjeshtë nuk është e vështirë, por administrimi dhe korrigjimi i mëtejshëm është i frikshëm. Ne do të donim të merrnim këshilla të besueshme se si njerëzit menaxhojnë grupimet e Kubernetes në botën reale dhe çfarë problemesh ka të ngjarë të hasim."
  • “Këshillat subjektive do të ishin të dobishme. Ekosistemi Kubernetes u jep ekipeve të reja shumë opsione për të zgjedhur. Kur ka disa mënyra për të bërë të njëjtën gjë, si e dini se cila është më e mira? Si të bëni një zgjedhje?

Dhe ndoshta më e rëndësishmja nga të gjitha pyetjet:

  • "Si mund ta përdor Kubernetes pa ndërprerë kompaninë time?"

Fragment. Konfigurimi dhe objektet sekrete

Mundësia për të ndarë logjikën e një aplikacioni Kubernetes nga konfigurimi i tij (d.m.th., nga çdo vlerë ose cilësim që mund të ndryshojë me kalimin e kohës) është shumë e dobishme. Vlerat e konfigurimit zakonisht përfshijnë cilësimet specifike të mjedisit, adresat DNS të shërbimit të palëve të treta dhe kredencialet e vërtetimit.

Sigurisht, e gjithë kjo mund të futet drejtpërdrejt në kod, por kjo qasje nuk është mjaft fleksibël. Për shembull, ndryshimi i një vlere konfigurimi do t'ju kërkonte të ndërtoni dhe vendosni përsëri kodin tuaj. Një zgjidhje shumë më e mirë do të ishte ndarja e konfigurimit nga kodi dhe leximi i tij nga një skedar ose variabla mjedisi.

Kubernetes ofron disa mënyra të ndryshme për të menaxhuar konfigurimin. Së pari, mund t'i kaloni vlerat aplikacionit përmes variablave të mjedisit të specifikuara në specifikimin e mbështjellësit të pod (shihni "Ndryshoret e mjedisit" në faqen 192). Së dyti, të dhënat e konfigurimit mund të ruhen direkt në Kubernetes duke përdorur objektet ConfigMap dhe Secret.

Në këtë kapitull, ne i shqyrtojmë këto objekte në detaje dhe shikojmë disa qasje praktike për menaxhimin e konfigurimit dhe të dhënave të ndjeshme duke përdorur një aplikacion demo.

Përditësimi i predhave të pod kur ndryshon konfigurimi

Imagjinoni që keni një vendosje në grupin tuaj dhe dëshironi të ndryshoni disa vlera në ConfigMap-in e tij. Nëse përdorni grafikun Helm (shih "Helm: Menaxheri i paketave për Kubernetes" në faqen 102), mund të zbuloni automatikisht një ndryshim konfigurimi dhe të rifreskoni guaskat tuaja të pod në një mashtrim të pastër. Shtoni shënimin e mëposhtëm në specifikimet tuaja të vendosjes:

checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") .
       | sha256sum }}

Modeli i vendosjes tani përmban një shumë kontrolli të parametrave të konfigurimit: nëse parametrat ndryshohen, shuma do të përditësohet. Nëse kryeni përmirësimin e timonit, Helm do të zbulojë se specifikimi i vendosjes ka ndryshuar dhe do të rinisë të gjitha predhat e pod.

Të dhëna të ndjeshme në Kubernetes

Ne tashmë e dimë se objekti ConfigMap ofron një mekanizëm fleksibël për ruajtjen dhe aksesin e të dhënave të konfigurimit në një grup. Megjithatë, shumica e aplikacioneve kanë informacione të ndjeshme dhe të ndjeshme, të tilla si fjalëkalimet ose çelësat API. Mund të ruhet edhe në ConfigMap, por kjo zgjidhje nuk është ideale.

Në vend të kësaj, Kubernetes ofron një lloj të veçantë objekti të krijuar për të ruajtur të dhëna të ndjeshme: Sekret. Më pas, le të shohim një shembull se si mund të përdoret ky objekt në aplikacionin tonë demo.

Për të filluar, hidhini një sy manifestit Kubernetes për objektin Sekret (shih hello-secret-env/k8s/secret.yaml):

apiVersion: v1
kind: Secret
metadata:
    name: demo-secret
stringData:
    magicWord: xyzzy

Në këtë shembull, çelësi privat magicWord është xyzzy (en.wikipedia.org/wiki/Xyzzy_(computing)). Fjala xyzzy është përgjithësisht shumë e dobishme në botën e kompjuterëve. Ngjashëm me ConfigMap, ju mund të ruani çelësa dhe vlera të shumta në një objekt Sekret. Këtu, për thjeshtësi, ne përdorim vetëm një palë çelës-vlerë.

Përdorimi i objekteve sekrete si variabla të mjedisit

Ashtu si ConfigMap, objekti Secret mund të vihet i disponueshëm në kontejner si variabla mjedisi ose si skedar në diskun e tij. Në shembullin e mëposhtëm, ne do t'i caktojmë një variabël mjedisi vlerës nga Secret:

spec:
   containers:
       - name: demo
          image: cloudnatived/demo:hello-secret-env
          ports:
             - containerPort: 8888
          env:
             - name: GREETING
               valueFrom:
               secretKeyRef:
                  name: demo-secret
                  key: magicWord

Ekzekutoni komandën e mëposhtme në depo demo për të aplikuar manifestet:

kubectl apply -f hello-secret-env/k8s/
deployment.extensions "demo" configured
secret "demo-secret" created

Si më parë, përcillni portin lokal te vendosja 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 -> 8888

Kur hapni një adresë localhost:9999/ duhet të shihni sa vijon:

The magic word is "xyzzy"

Shkrimi i objekteve sekrete në skedarë

Në këtë shembull, ne do t'i bashkëngjisim objektin Secret në kontejner si skedar. Kodi ndodhet në dosjen hello-secret-file të depove demo.

Për të lidhur Secret si një skedar, ne do të përdorim vendosjen e mëposhtme:

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-secret

Si në nënseksionin "Krijimi i skedarëve të konfigurimit nga objektet ConfigMap" në f. 240, ne krijojmë një vëllim (në këtë rast demo-secret-volume) dhe e montojmë atë në kontejner në seksionin volumeMounts të specifikimit. Fusha mountPath është /secrets, kështu që Kubernetes do të krijojë një skedar në këtë dosje për çdo çift çelësi/vlere të përcaktuar në objektin Sekret.

Në shembullin tonë, ne përcaktuam vetëm një çift me vlerë kyçe të quajtur magicWord, kështu që manifesti do të krijojë një skedar të vetëm për lexim /secrets/magicWord me të dhëna të ndjeshme në kontejner.

Nëse e aplikoni këtë manifest në të njëjtën mënyrë si shembulli i mëparshëm, duhet të merrni të njëjtin rezultat:

The magic word is "xyzzy"

Leximi i objekteve sekrete

Në seksionin e mëparshëm, ne përdorëm komandën kubectl describe për të shfaqur përmbajtjen e një ConfigMap. A mund të bëhet e njëjta gjë me Secret?

kubectl describe secret/demo-secret
Name:          demo-secret

Namespace:      default
Labels:             <none>
Annotations:
Type:               Opaque

Data
====
magicWord: 5   bytes

Ju lutemi vini re se vetë të dhënat nuk shfaqen. Objektet sekrete në Kubernetes janë të tipit Opaque, që do të thotë se përmbajtja e tyre nuk shfaqet në kubectl përshkruajnë daljen, hyrjet në regjistër ose terminalin, duke e bërë të pamundur zbulimin aksidental të informacionit të ndjeshëm.

Për të parë një version të koduar YAML të të dhënave të ndjeshme, përdorni komandën kubectl get:

kubectl get secret/demo-secret -o yaml
apiVersion: v1
data:
   magicWord: eHl6enk=
kind: Secret
metadata:
...
type: Opaque

base64

Çfarë është eHl6enk=, krejtësisht e ndryshme nga vlera jonë origjinale? Ky është në fakt një objekt Sekret, i përfaqësuar në kodimin base64. Base64 është një skemë për kodimin e të dhënave binare arbitrare si një varg karakteresh.

Për shkak se informacioni i ndjeshëm mund të jetë binar dhe jo dalje (siç është rasti me një çelës kriptimi TLS), objektet sekrete ruhen gjithmonë në formatin base64.

Teksti beHl6enk= është versioni bazë64 i koduar i fjalës sonë sekrete xyzzy. Ju mund ta verifikoni këtë duke ekzekutuar komandën base64 —decode në terminal:

echo "eHl6enk=" | base64 --decode
xyzzy

Pra, ndërsa Kubernetes ju mbron nga nxjerrja aksidentale e të dhënave të ndjeshme në terminal ose skedarë log, nëse keni leje leximi për objektet sekrete në një hapësirë ​​të caktuar emri, ato të dhëna mund të bazohen64 dhe më pas të deshifrohen.

Nëse ju duhet të kodoni base64 një tekst (për shembull, për ta vendosur atë në një sekret), përdorni komandën base64 pa argumente:

echo xyzzy | base64
eHl6enkK

Qasja në objekte sekrete

Kush mund të lexojë dhe modifikojë objekte sekrete? Kjo përcaktohet nga RBAC, një mekanizëm i kontrollit të aksesit (ne do ta diskutojmë në detaje në nënseksionin "Hyrje në Kontrollin e Aksesit të Bazuar në Role" në faqen 258). Nëse po ekzekutoni një grup që nuk ka RBAC ose nuk është i aktivizuar, të gjitha objektet tuaja Sekrete janë të disponueshme për çdo përdorues dhe kontejnerë (ne do të shpjegojmë më vonë se nuk duhet të keni asnjë grup prodhimi pa RBAC).

Kriptimi pasiv i të dhënave

Po 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ëna të ndjeshme pa pasur leje për të lexuar objekte sekrete nëpërmjet API-së?

Që nga versioni 1.7, Kubernetes mbështet enkriptimin pasiv të të dhënave. Kjo do të thotë që informacioni i ndjeshëm brenda etcd ruhet i koduar në disk dhe nuk mund të lexohet as nga ata që kanë qasje të drejtpërdrejtë në bazën e të dhënave. Për ta deshifruar atë, ju nevojitet një çelës që ka vetëm serveri Kubernetes API. Në një grup të konfiguruar siç duhet, kriptimi pasiv duhet të aktivizohet.

Mund të kontrolloni nëse enkriptimi pasiv funksionon në grupin tuaj në këtë mënyrë:

kubectl describe pod -n kube-system -l component=kube-apiserver |grep encryption
        --experimental-encryption-provider-config=...

Nëse nuk e shihni flamurin eksperimental-encryption-provider-config, enkriptimi pasiv nuk aktivizohet. Kur përdorni Google Kubernetes Engine ose shërbime të tjera të menaxhimit të Kubernetes, të dhënat tuaja kodohen duke përdorur një mekanizëm tjetër, kështu që flamuri nuk do të jetë i pranishëm. Kontrolloni me shitësin tuaj Kubernetes për të parë nëse përmbajtja etcd është e koduar.

Ruajtja e të dhënave konfidenciale

Ka disa burime të Kubernetes që nuk duhet të hiqen kurrë nga grupi, siç janë objektet sekrete shumë të ndjeshme. Ju mund të mbroni një burim nga fshirja duke përdorur një shënim të dhënë nga menaxheri i Helm:

kind: Secret
metadata:
    annotations:
        "helm.sh/resource-policy": keep

Strategjitë sekrete të menaxhimit të objekteve

Në shembullin nga seksioni i mëparshëm, të dhënat e ndjeshme mbroheshin nga aksesi i paautorizuar menjëherë pasi ishin ruajtur në grup. Por në skedarët manifest ato u ruajtën si tekst i thjeshtë.

Asnjëherë nuk duhet të vendosni informacione konfidenciale në skedarë që janë nën kontrollin e versionit. Si mund ta menaxhoni dhe ruani në mënyrë të sigurt këtë informacion përpara se ta aplikoni në grupin tuaj Kubernetes?

Ju mund të zgjidhni çdo mjet ose strategji për trajtimin e të dhënave të ndjeshme në aplikacionet tuaja, por gjithsesi do t'ju duhet t'i përgjigjeni të paktën pyetjeve të mëposhtme.

  • Ku duhet të ruhen të dhënat e ndjeshme në mënyrë që ato të jenë shumë të aksesueshme?
  • Si t'i bëni të dhënat e ndjeshme të aksesueshme për aplikacionet tuaja aktive?
  • Çfarë duhet të ndodhë me aplikacionet tuaja kur zëvendësoni ose modifikoni të dhëna të ndjeshme?

Rreth autorëve

John Arundel është një konsulent me përvojë 30 vjeçare në industrinë e kompjuterave. Ai ka shkruar disa libra dhe punon me shumë kompani nga vende të ndryshme, duke i këshilluar ato për infrastrukturën vendase në cloud dhe Kubernetes. Në kohën e tij të lirë, ai kënaqet me sërfin, është një gjuajtës i mirë me pistoletë dhe i bie pianos si amator. Jeton në një vilë përrallore në Cornwall, Angli.

Justin Domingus — Inxhinier i administrimit të sistemeve që punon në një mjedis DevOps me Kubernetes dhe teknologjitë cloud. Atij i pëlqen të kalojë kohë jashtë, të pijë kafe, të gaforret dhe të ulet para kompjuterit. Jeton në Seattle, Washington, me një mace të mrekullueshme dhe një grua edhe më të mrekullueshme dhe shoqen më të mirë, Adrienne.

» Më shumë detaje rreth librit mund të gjenden në faqen e internetit të botuesit
» Përmbajtje
» Fragment

Për Khabrozhiteley 25% zbritje duke përdorur kupon - Kubernetes

Pas pagesës së versionit në letër të librit, një libër elektronik do të dërgohet me e-mail.

Burimi: www.habr.com

Shto një koment