Libri «Kubernetes për DevOps»

Libri «Kubernetes për DevOps» 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: magicWord

Ekzekutoni 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" created

Si 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 -> 8888

Kur hapni adresën localhost: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-secret

Si 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   bytes

Vini 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: Opaque

base64

Ç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
xyzzy

Kë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
eHl6enkK

Aksesi 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": keep

Strategjitë 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ë faqen e botuesit
» Përmbajtja
» Pjesa

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

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster