Libri «Kubernetes për DevOps»

Libri «Kubernetes për DevOps» Përshëndetje, Habrajs! Kubernetes është një nga elementët kyç të ekosistemit modern të cloud-it. Kjo teknologji siguron qëndrueshmëri, shkallëzueshmëri dhe rezistencë për virtualizimin e konteinerëve. John Arundell dhe Justin Domingus flasin për ekosistemin Kubernetes dhe prezantojnë zgjidhje të provuara për problemet e përditshme. Hapi pas hapi do të ndërtosh një aplikacion të orientuar nga cloud-i dhe do të krijosh infrastrukturën për ta mbështetur atë, do të konfigurosh mjedisin e zhvillimit dhe një pipeline për implementim të vazhdueshëm që do të të ndihmojë në punën mbi aplikacionet e ardhshme.

‱ Do tĂ« fillosh punĂ«n me konteinerĂ«t dhe Kubernetes nga baza: nuk kĂ«rkohet pĂ«rvojĂ« e veçantĂ« pĂ«r tĂ« mĂ«suar temĂ«n. ‱ Do tĂ« fillosh klasterĂ«t tuaj ose do tĂ« zgjedhĂ«sh njĂ« shĂ«rbim tĂ« menaxhuar Kubernetes nga Amazon, Google etj. ‱ Do ta aplikosh Kubernetes pĂ«r menaxhimin e ciklit tĂ« jetĂ«s sĂ« konteinerĂ«ve dhe shpenzimeve tĂ« burimeve. ‱ Do tĂ« optimizosh klasterĂ«t sipas treguesve tĂ« kostos, performancĂ«s, qĂ«ndrushmĂ«risĂ«, kapacitetit dhe shkallĂ«zueshmĂ«risĂ«. ‱ Do tĂ« shqyrtosh mjetet mĂ« tĂ« mira pĂ«r zhvillimin, testimin dhe implementimin e aplikacioneve tuaja. ‱ Do tĂ« pĂ«rdorĂ«sh praktika aktuale tĂ« industrisĂ« pĂ«r sigurimin dhe kontrollin. ‱ Do tĂ« implementosh nĂ« kompaninĂ« tĂ«nde parimet DevOps, qĂ« ekipet e zhvilluesve tĂ« veprojnĂ« mĂ« fleksibĂ«l, shpejt dhe efikas.

Për kë është e destinuar kjo libër

Libri Ă«shtĂ« mĂ« i pĂ«rshtatshĂ«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 qĂ« merret ose me ndĂ«rtimin e shĂ«rbimeve tĂ« reja cloud, ose me migrimin e aplikacioneve ekzistuese nĂ« Kubernetes dhe nĂ« cloud. Mos u shqetĂ«soni, nuk Ă«shtĂ« e nevojshme tĂ« dini si tĂ« punoni me Kubernetes dhe konteinerĂ«t — ne do tĂ« mĂ«sojmĂ« gjithçka.

Përdoruesit e avancuar të Kubernetes gjithashtu do të gjejnë shumë të vlefshme: këtu shqyrtohen në thellësi tema si RBAC, implementimi i vazhdueshëm, menaxhimi i të dhënave të ndjeshme dhe vëzhgimi. Shpresojmë që në faqet e librit do të ketë diçka interesante edhe për ju, pavarësisht aftësive dhe përvojës suaj.

Cilat janë pyetjet që përgjigjet libri

Gjatë planifikimit dhe shkwriting të librit, ne diskutuam për teknologjitë cloud dhe Kubernetes me qindra njerëz, duke biseduar si me liderë dhe ekspertë në këtë fushë, ashtu edhe me fillestarë tërësisht të ri. Më poshtë janë disa pyetje individuale, përgjigjet për të cilat ata do të donin t'i shihnin në këtë botim.

  • «MĂ« intereson pse duhet tĂ« harxhoj kohĂ« nĂ« kĂ«tĂ« teknologji. ÇfarĂ« probleme do tĂ« ndihmojĂ« tĂ« zgjidhĂ« pĂ«r mua dhe ekipin tim?»
  • «Kubernetes duket interesante, por ka njĂ« prag tĂ« lartĂ« pĂ«r tu futur. Ndihma pĂ«r njĂ« hapĂ«sirĂ« tĂ« thjeshtĂ« nuk Ă«shtĂ« e vĂ«shtirĂ«, por administrimi dhe depurimi i mĂ«tejshĂ«m Ă«shtĂ« kĂ«rcĂ«nues. Ne do tĂ« donim tĂ« merrnim kĂ«shilla tĂ« besueshme se si njerĂ«zit menaxhojnĂ« klasterĂ«t Kubernetes nĂ« kushte reale dhe me çfarĂ« problemeve do tĂ« pĂ«rballemi mĂ« shumĂ«.»
  • «Do tĂ« ishte e dobishme njĂ« kĂ«shillĂ« subjektive. Ekosistemi Kubernetes ofron shumĂ« mundĂ«si pĂ«r ekipet fillestare. Kur diçka mund tĂ« bĂ«het nĂ« disa mĂ«nyra, si tĂ« kuptojmĂ« se cili Ă«shtĂ« mĂ« i mirĂ«? Si tĂ« bĂ«jmĂ« zgjedhjen?»

Dhe ndoshta, pyetja më e rëndësishme nga të gjitha:

  • «Si mund tĂ« pĂ«rdor Kubernetes pa ndaluar punĂ«n e kompanisĂ« sime?»

Shkëputje. Konfigurimi dhe objektet Secret

Mundësia për të ndarë logjikën e aplikacionit Kubernetes nga konfigurimi i tij (dmth, nga çdo vlerë ose parametrat që mund të ndodhin me kalimin e kohës) është shumë e dobishme. Vlerat e konfigurimit zakonisht përfshijnë parametrat e destinuar për një mjedis të caktuar, adresat DNS të shërbimeve të jashtme dhe akreditivët për autentifikim.

Sigurisht, gjithçka mund të vendoset drejtpërdrejt në kod, por ky qasje është shumë e ngurtë. Për shembull, për të ndryshuar një vlerë konfigurimi, do të duhej të mbledhësh përsëri dhe të shpërndash kodin tuaj. Një zgjidhje shumë më e mirë do të ishte të ndash konfigurimin nga kodi dhe ta lexosh atë nga një skedar ose variablat e mjedisit.

Kubernetes ofron disa mënyra të ndryshme për menaxhimin e konfigurimit. Së pari, mund të kaloni vlera në aplikacion përmes variablave të mjedisit, të specifikuara në specifikimin e pod-it (shih në seksionin '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ë ndjeshme në shembullin e një aplikacioni demonstrues.

Përditësimi i pod-rrathëve kur ndryshon konfigurimi

Imagjinoni se nĂ« klasterin tuaj ka njĂ« shpĂ«rndarje dhe dĂ«shironi tĂ« ndryshoni disa vlera nĂ« ConfigMap e tij. NĂ«se pĂ«rdorni njĂ« hartĂ« Helm (shihni seksionin “Helm: menaxheri i paketave pĂ«r Kubernetes” nĂ« fq. 102), zbulimi i ndryshimit tĂ« konfigurimit dhe rimbushja e pod-rrathĂ«ve tuaj mund tĂ« bĂ«het automatikisht me njĂ« truk tĂ« elegant. Shtoni kĂ«tĂ« annotim nĂ« specifikimin e shpĂ«rndarjes tuaj:

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

Tani, shablloni i shpërndarjes përmban një kontrolle 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 shpërndarjes ka ndryshuar dhe do të rifillojë të gjitha pod-rrathët.

Të dhënat e ndjeshme në Kubernetes

Ne e dimë tashmë 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ë informacion që është sekret dhe i ndjeshëm: për shembull, fjalëkalime ose çelësa API. Ato mund të ruhen gjithashtu në ConfigMap, por ky zgjidhje nuk është ideale.

Në vend të kësaj, Kubernetes ofron një objekt të tipit të veçantë, që është i destinuar për ruajtjen e të dhënave të ndjeshme: Secret. Më pas do të shqyrtojmë një shembull se si mund të aplikohet ky objekt në aplikacionin tonë demonstrues.

Së pari, shikoni në manifestin 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ë 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

Ashtu si ConfigMap, objekti Secret mund të bëhet i aksesueshëm në konteiner si variabla mjedisi ose si një skedar në diskun e tij. Në shembullin e mëposhtëm, ne do t'i caktojmë variablës mjedisi një vlerë 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

Kryeni komandën e mëposhtme në ripostitorin demo për të aplikuar manifestet:

kubectl apply -f hello-secret-env/k8s/
deployment.extensions "demo" e konfiguruar
sekreti "demo-secret" u krijua

Si më parë, redirektoni portin lokal në implementim për të parë rezultatin në shfletuesin tuaj:

kubectl port-forward deploy/demo 9999:8888
Po redirektohet nga 127.0.0.1:9999 -> 8888
Po redirektohet nga [::1]:9999 -> 8888

Kur të hapni adresën localhost:9999/ duhet të shihni të mëposhtmen:

Fjala magjike është "xyzzy"

Shkrimi i objekteve Secret në skedarë

Në këtë shembull, ne do ta lidhim objektin Secret me kontejnerin si një skedar. Kodi është në dosjen hello-secret-file të ripostitorit demo.

Për të lidhur Secret si një skedar, do të përdorim këtë implementim:

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

Ashtu si nĂ« seksionin "Krijimi i skedave tĂ« konfigurimit nga objektet ConfigMap" nĂ« fq. 240, ne krijojmĂ« njĂ« volum (nĂ« kĂ«tĂ« rast Ă«shtĂ« demo-secret-volume) dhe e lidhim atĂ« me kontejnerin nĂ« seksionin e specifikimeve volumeMounts. NĂ« fushĂ«n mountPath Ă«shtĂ« e specifikuar "/secrets", prandaj Kubernetes do tĂ« krijojĂ« njĂ« skedar nĂ« kĂ«tĂ« dosje 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, prandaj manifesti do tĂ« krijojĂ« njĂ« skedar nĂ« kontejnerin "/secrets/magicWord" me tĂ« dhĂ«na tĂ« ndjeshme, e cila do tĂ« jetĂ« nĂ« dispozicion 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ë rezultojë e njëjta gjë:

Fjala magjike është "xyzzy"

Leximi i objekteve Secret

Në seksionin e mëparshëm përdorëm komandën kubectl describe për të printuar përmbajtjen e ConfigMap. A mund të bëjmë të njëjtën gjë me Secret?

kubectl describe secret/demo-secret
Emri:          demo-secret

Hapësira:      default
Etiketat:             
Shënimet:
Tipi:               Opaque

Të Dhënat
====
magicWord: 5 bytes

Vini re se të dhënat nuk shfaqen vetë. Objektet Secret në Kubernetes kanë tipin Opaque: kjo do të thotë se përmbajtja e tyre nuk tregtohet në daljen e kubectl describe, regjistrat dhe terminalin, duke e bërë të pamundur për t'u zbuluar aksidental informacionin e ndjeshëm.

Për të parë versionin e koduar të të dhënave të ndjeshme në formatin 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=, krejt ndryshe nga vlera jonĂ« origjinale? NĂ« tĂ« vĂ«rtetĂ«, kjo Ă«shtĂ« njĂ« objekt Secret, i paraqitur nĂ« kodimin base64. Base64 Ă«shtĂ« njĂ« skemĂ« kodimi pĂ«r tĂ« dhĂ«na tĂ« rastĂ«sishme binarike nĂ« formĂ«n e njĂ« stringu karakteresh.

Duke qenë se informacioni ndjeshëm mund të jetë binar dhe i papërshkueshëm për daljen (siç është rasti me çelësin e enkriptimit TLS), objektet Secret gjithmonë ruhet në formatin base64.

Teksti beHl6enk= është versioni ynë i fjalës sekrete xyzzy, e koduar në base64. Këtë mund ta verifikoni, nëse ekzekutoni në terminal komandën base64 --decode:

echo "eHl6enk=" | base64 --decode
xyzzy

Prandaj, megjithëse Kubernetes ju mbron nga dalja aksidentale e të dhënave të ndjeshme në terminal ose skedarët e regjistrimit, me të drejta për të lexuar objektet Secret në një hapësirë emri të caktuar, këto të dhëna mund të merren në formatin base64 dhe më pas të deshifrohen.

Nëse ju nevojitet të kodoni ndonjë tekst në base64 (për shembull, për ta vendosur në Secret), përdorni komandën base64 pa argumente:

echo xyzzy | base64
eHl6enkK

Qasja në objektet Secret

Kush mund tĂ« lexojĂ« dhe redaktojĂ« objektet Secret? Kjo pĂ« ŰȘŰ­ŰŻÙŠŰŻet nga RBAC — mekanizmi i kontrollit tĂ« aksesit (do ta diskutojmĂ« nĂ« detaje nĂ« nĂ«nkapitullin "Hyrje nĂ« menaxhimin e aksesit tĂ« bazuar nĂ« rol" nĂ« fq. 258). NĂ«se po pĂ«rdorni njĂ« klaster ku sistemi RBAC Ă«shtĂ« i munguar ose i çaktivizuar, tĂ« gjitha objektet tuaja Secret janĂ« tĂ« disponueshme pĂ«r çdo pĂ«rdorues dhe kontejner (mĂ« vonĂ« do ta shpjegojmĂ« se nuk duhet tĂ« keni asnjĂ« klaster industrial pa RBAC).

Enkriptimi pasiv i të dhënave

Dhe çfarë ndodh me ata që kanë qasje në bazën e të dhënave etcd, në të cilën Kubernetes ruan të gjithë informacionin e tij? A mund të lexojnë të dhënat e ndjeshme pa pasur të drejta për të lexuar objektet Secret përmes API?

Nga version 1.7, Kubernetes mbështet enkriptimin pasiv të të dhënave. Kjo do të thotë se informatat konfidenciale brenda etcd ruhen në disk në formë të enkriptuar dhe nuk mund të lexohen as nga ata që kanë akses direkt në bazën e të dhënave. Për deshifrimin e saj nevojitet një çelës, i cili e ka vetëm serveri API i Kubernetes. Në një klaster të konfiguruar siç duhet, enkriptimi pasiv duhet të jetë aktivizuar.

Mund ta kontrolloni nëse enkriptimi pasiv funksionon në klasterin 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 experimental-encryption-provider-config, enkriptimi pasiv nuk është aktivizuar. Kur përdorni Google Kubernetes Engine ose shërbime të tjera menaxhimi të Kubernetes, të dhënat tuaja enkriptohen me një mekanizëm tjetër, kështu që flamuri do të mungojë. Nëse është e enkriptuar përmbajtja e etcd, kontaktoni ofruesin tuaj të Kubernetes.

Ruajtja e të dhënave konfidenciale

Ka disa burime të Kubernetes që nuk duhet kurrë të hiqen nga klasteri: për shembull, objektet e veçanta Secret. Ju mund ta mbroni burimin nga heqja duke përdorur një anotim që sigurohet nga menaxheri Helm:

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

Strategjitë e menaxhimit të objekteve Secret

Në shembullin nga Seksioni i mëparshëm, të dhënat konfidenciale u mbrojtën nga akses i paautorizuar menjëherë pas ruajtjes në klaster. Por në skedarët e manifestit ato ishin të ruajtura si tekst i pastër.

Nuk duhet kurrë të vendosni informacione konfidenciale në skedarët që ndodhen në sistemin e kontrollit të versioneve. Si mund ta administroni dhe ruani këto informata në mënyrë të sigurt para se t'i aplikoni në klasterin Kubernetes?

Mund të zgjidhni çfarëdo mjeti ose strategjie për të punuar me të dhënat konfidenciale në aplikacionet tuaja, por akoma do t'ju duhet të përgjigjeni të paktën në këto pyetje.

  • Ku tĂ« ruani tĂ« dhĂ«nat konfidenciale nĂ« mĂ«nyrĂ« qĂ« ato tĂ« ishin tĂ« disponueshme nĂ« mĂ«nyrĂ« tĂ« lartĂ«?
  • Si t'i bĂ«ni tĂ« dhĂ«nat konfidenciale tĂ« disponueshme pĂ«r aplikacionet tuaja aktive?
  • ÇfarĂ« duhet tĂ« ndodhĂ« me aplikacionet tuaja kur e zĂ«vendĂ«soni ose redaktoni tĂ« dhĂ«nat konfidenciale?

Për autorët

DĆŸon Arundel Ă«shtĂ« njĂ« kĂ«shilltar me 30 vjet eksperiencĂ« nĂ« industrinĂ« kompjuterike. Ai ka shkruar disa libra dhe punon me shumĂ« kompani nga vende tĂ« ndryshme, duke i kĂ«shilluar ata pĂ«r çështjet e infrastrukturĂ«s sĂ« orientuar nga re dhe Kubernetes. NĂ« kohĂ«n e lirĂ«, ai pĂ«lqen tĂ« praktikojĂ« surfing, Ă«shtĂ« njĂ« qĂ«llues i mirĂ« me pistoletĂ« dhe luan piano nĂ« mĂ«nyrĂ« amatore. Jeton nĂ« njĂ« kabinĂ« magjike nĂ« Kornuoll, Angli.

Justin Domingus — inxhinier sistemi, duke punuar nĂ« njĂ« mjedis DevOps me Kubernetes dhe teknologjitĂ« e re. Ai pĂ«lqen tĂ« kalojĂ« kohĂ« jashtĂ«, tĂ« pijĂ« kafe, tĂ« kapĂ« krab dhe tĂ« rrijĂ« pas kompjuterit. Jeton nĂ« SietĂ«l, Washington, sĂ« bashku me njĂ« mace tĂ« shkĂ«lqyer dhe njĂ« grua akoma mĂ« tĂ« shkĂ«lqyer, po ashtu miku i tij mĂ« i mirĂ« EdriĂ«n.

» Më shumë informacion mbi librin mund të gjendet në faqen e botuesit
» Përmbajtja
» Pjesa

PĂ«r anĂ«tarĂ«t e Habra ka njĂ« zbritje prej 25% me kodin — Kubernetes

Pas pagesës për versionin në letër të librit, libri elektronik dërgohet në e-mail.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster