Libro nga "Kubernetes para sa DevOps"

Libro nga "Kubernetes para sa DevOps" Kumusta, mga residente sa Khabro! Ang Kubernetes usa sa mga importanteng elemento sa modernong cloud ecosystem. Kini nga teknolohiya naghatag og kasaligan, scalability ug kalig-on sa container virtualization. Si John Arundel ug Justin Domingus naghisgot bahin sa ekosistema sa Kubernetes ug nagpaila sa napamatud-an nga mga solusyon sa adlaw-adlaw nga mga problema. Lakang sa lakang, magtukod ka sa imong kaugalingon nga cloud-native nga aplikasyon ug maghimo sa imprastraktura aron suportahan kini, magbutang usa ka palibot sa pag-uswag ug usa ka padayon nga pipeline sa pag-deploy nga makatabang kanimo samtang nagtrabaho ka sa imong mga sunod nga aplikasyon.

β€’ Pagsugod sa mga sudlanan ug Kubernetes gikan sa sukaranan: walay espesyal nga kasinatian ang gikinahanglan aron makat-on sa hilisgutan. β€’ Pagdagan sa imong kaugalingon nga mga cluster o pagpili og gidumala nga serbisyo sa Kubernetes gikan sa Amazon, Google, ug uban pa. β€’ Gamita ang Kubernetes aron pagdumala sa container lifecycle ug konsumo sa kapanguhaan. β€’ I-optimize ang mga cluster base sa gasto, performance, resiliency, power ug scalability. β€’ Pagkat-on sa labing maayo nga mga himan sa pagpalambo, pagsulay, ug pagdeploy sa imong mga aplikasyon. β€’ Gamita ang kasamtangang mga gawi sa industriya aron maseguro ang seguridad ug kontrol. β€’ Ipatuman ang mga prinsipyo sa DevOps sa tibuok nimong kompaniya aron ang mga development team makalihok nga mas flexible, paspas, ug episyente.

Para kang kinsa ang libro?

Ang libro mao ang labing may kalabutan alang sa mga empleyado sa mga departamento sa administrasyon nga responsable sa mga server, aplikasyon ug serbisyo, ingon man alang sa mga developer nga nalambigit sa paghimo sa bag-ong mga serbisyo sa panganod o pagbalhin sa mga naglungtad nga aplikasyon sa Kubernetes ug sa panganod. Ayaw kabalaka, dili nimo kinahanglan mahibal-an kung giunsa ang pagtrabaho sa mga Kubernetes o mga sudlanan - tudloan ka namon sa tanan.

Ang eksperyensiyado nga mga tiggamit sa Kubernetes makakita usab og daghang bili, nga adunay lawom nga coverage sa mga hilisgutan sama sa RBAC, padayon nga pag-deploy, sensitibo nga pagdumala sa datos, ug obserbasyon. Kami nanghinaut nga ang mga panid sa libro siguradong adunay usa ka butang nga makapaikag alang kanimo, bisan unsa pa ang imong kahanas ug kasinatian.

Unsang mga pangutana ang gitubag sa libro?

Samtang nagplano ug nagsulat sa libro, among gihisgutan ang cloud technology ug Kubernetes uban sa gatusan ka mga tawo, nakigsulti sa mga lider sa industriya ug mga eksperto ingon man sa kompleto nga mga bag-o. Sa ubos mao ang pinili nga mga pangutana nga gusto nilang makita nga matubag niini nga publikasyon.

  • "Nainteres ako kung nganong kinahanglan nimo nga mogahin og panahon sa kini nga teknolohiya. Unsang mga problema ang makatabang nako ug sa akong team nga masulbad?”
  • "Ang mga Kubernetes morag makapaikag, apan adunay taas nga babag sa pagsulod. Ang pag-andam sa usa ka yano nga pananglitan dili lisud, apan ang dugang nga pagdumala ug pag-debug makahadlok. Gusto namo nga makakuha ug kasaligang tambag kon giunsa pagdumala sa mga tawo ang mga kumpol sa Kubernetes sa tinuod nga kalibotan ug unsa nga mga problema ang lagmit among masugatan."
  • β€œMakatabang ang subjective nga tambag. Ang Kubernetes ecosystem naghatag sa mga bag-ong team og daghan kaayong kapilian nga mapilian. Kung adunay daghang mga paagi sa pagbuhat sa parehas nga butang, giunsa nimo pagkahibalo kung hain ang labing maayo? Unsaon paghimo sa pagpili?

Ug tingali ang labing importante sa tanang pangutana:

  • "Unsaon nako paggamit ang Kubernetes nga dili makabalda sa akong kompanya?"

Kinutlo. Configuration ug Secret nga mga butang

Ang katakus sa pagbulag sa lohika sa usa ka aplikasyon sa Kubernetes gikan sa pag-configure niini (nga mao, gikan sa bisan unsang mga kantidad o mga setting nga mahimong mausab sa paglabay sa panahon) mapuslanon kaayo. Ang mga kantidad sa pag-configure kasagaran naglakip sa mga setting nga piho sa palibot, mga adres sa DNS nga serbisyo sa ikatulo nga partido, ug mga kredensyal sa pag-authenticate.

Siyempre, kining tanan mahimong ibutang direkta sa code, apan kini nga pamaagi dili igo nga flexible. Pananglitan, ang pagbag-o sa usa ka kantidad sa pag-configure kinahanglan nimo nga tukuron ug i-deploy pag-usab ang imong code. Ang mas maayo nga solusyon mao ang pagbulag sa configuration gikan sa code ug pagbasa niini gikan sa file o environment variables.

Naghatag ang Kubernetes og daghang lain-laing mga paagi sa pagdumala sa configuration. Una, mahimo nimong ipasa ang mga kantidad sa aplikasyon pinaagi sa mga variable sa palibot nga gitakda sa detalye sa pod wrapper (tan-awa ang "Mga Variable sa Kalikopan" sa panid 192). Ikaduha, ang datos sa pag-configure mahimong direktang itago sa Kubernetes gamit ang ConfigMap ug Secret nga mga butang.

Niini nga kapitulo, gisusi namo kini nga mga butang sa detalye ug nagtan-aw sa pipila ka praktikal nga mga pamaagi sa pagdumala sa configuration ug sensitibo nga datos gamit ang demo application.

Pag-update sa pod shells kung mabag-o ang configuration

Hunahunaa nga ikaw adunay usa ka deployment sa imong cluster ug gusto nimo nga usbon ang pipila ka mga kantidad sa ConfigMap niini. Kung mogamit ka sa tsart sa Helm (tan-awa ang "Helm: Package Manager para sa Kubernetes" sa pahina 102), mahimo nimong awtomatiko nga makit-an ang pagbag-o sa configuration ug i-reload ang imong pod shell sa usa ka hapsay nga limbong. Idugang ang mosunod nga anotasyon sa imong deployment specification:

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

Ang deployment template karon adunay checksum sa configuration parameters: kung ang mga parameter usbon, ang sum ma-update. Kon magpadagan ka sa pag-upgrade sa helm, ang Helm makamatikod nga ang deployment specification nausab ug i-restart ang tanang pod shells.

Sensitibo nga datos sa Kubernetes

Nahibal-an na namon nga ang butang nga ConfigMap naghatag usa ka flexible nga mekanismo alang sa pagtipig ug pag-access sa datos sa pagsumpo sa usa ka cluster. Bisan pa, kadaghanan sa mga aplikasyon adunay kasayuran nga sensitibo ug sensitibo, sama sa mga password o mga yawe sa API. Mahimo usab kini tipigan sa ConfigMap, apan kini nga solusyon dili maayo.

Hinoon, ang Kubernetes nagtanyag og usa ka espesyal nga matang sa butang nga gidisenyo aron tipigan ang sensitibo nga datos: Sekreto. Sunod, atong tan-awon ang usa ka pananglitan kung giunsa kini nga butang magamit sa among aplikasyon sa demo.

Para makasugod, tan-awa ang Kubernetes manifest para sa Secret object (tan-awa ang hello-secret-env/k8s/secret.yaml):

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

Niini nga pananglitan, ang magicWord private key kay xyzzy (en.wikipedia.org/wiki/Xyzzy_(computing)). Ang pulong nga xyzzy sa kasagaran mapuslanon kaayo sa kalibutan sa mga kompyuter. Sama sa ConfigMap, mahimo nimong tipigan ang daghang mga yawe ug mga kantidad sa usa ka Sekreto nga butang. Dinhi, alang sa kayano, gigamit lang namo ang usa ka key-value pair.

Paggamit sa Tinago nga mga Butang isip mga Variable sa Kalikopan

Sama sa ConfigMap, ang Sekreto nga butang mahimong magamit sa sudlanan ingon nga mga variable sa palibot o ingon usa ka file sa disk niini. Sa mosunod nga pananglitan, mag-assign kami og environment variable ngadto sa value gikan sa Secret:

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

Pagdalagan ang mosunod nga sugo sa demo repository aron magamit ang mga manifests:

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

Sama kaniadto, ipasa ang lokal nga pantalan sa pag-deploy aron makita ang resulta sa imong browser:

kubectl port-forward deploy/demo 9999:8888
Forwarding from 127.0.0.1:9999 -> 8888
Forwarding from [::1]:9999 -> 8888

Sa pagbukas sa usa ka adres localhost:9999/ kinahanglan nimong makita ang mosunod:

The magic word is "xyzzy"

Pagsulat sa Tinago nga mga Butang sa mga File

Niini nga pananglitan, atong ilakip ang Sekreto nga butang sa sudlanan isip usa ka file. Ang code nahimutang sa hello-secret-file folder sa demo repository.

Aron makonektar ang Secret isip usa ka file, among gamiton ang mosunod nga deployment:

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

Sama sa subseksyon nga "Paghimo sa mga file sa pagsumpo gikan sa mga butang sa ConfigMap" sa p. 240, naghimo kami usa ka volume (sa kini nga kaso nga demo-secret-volume) ug i-mount kini sa sudlanan sa seksyon sa volumeMounts sa detalye. Ang field sa mountPath kay / secrets, mao nga maghimo ang Kubernetes og usa ka file niini nga folder para sa matag key/value pair nga gihubit sa Secret object.

Sa among pananglitan, among gihubit ang usa ra ka key-value pair nga gitawag og magicWord, mao nga ang manifest maghimo ug usa ka read-only file / secrets / magicWord nga adunay sensitibo nga datos sa sudlanan.

Kung imong i-apply kini nga manifest sa parehas nga paagi sa miaging pananglitan, kinahanglan nimo makuha ang parehas nga resulta:

The magic word is "xyzzy"

Pagbasa sa Sekreto nga mga Butang

Sa miaging seksyon, among gigamit ang kubectl describe command aron ipakita ang sulod sa usa ka ConfigMap. Mahimo ba usab kini sa Secret?

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

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

Data
====
magicWord: 5   bytes

Palihug timan-i nga ang data mismo wala gipakita. Ang tinago nga mga butang sa Kubernetes adunay tipo nga Opaque, nga nagpasabut nga ang ilang mga sulud wala gipakita sa kubectl nga naghulagway sa output, mga entry sa log, o ang terminal, nga naghimo nga imposible nga aksidente nga ipadayag ang sensitibo nga kasayuran.

Aron matan-aw ang na-encode nga YAML nga bersyon sa sensitibo nga datos, gamita ang kubectl get command:

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

sukaranan64

Unsa ang eHl6enk=, hingpit nga lahi sa among orihinal nga kantidad? Kini sa pagkatinuod usa ka Sekreto nga butang, nga girepresentahan sa base64 encoding. Ang Base64 usa ka laraw alang sa pag-encode sa arbitraryong binary data ingon usa ka hugpong sa mga karakter.

Tungod kay ang sensitibo nga impormasyon mahimong binary ug dili output (sama sa kaso sa TLS encryption key), ang mga sekretong butang kanunay nga gitipigan sa base64 format.

Ang teksto nga beHl6enk= mao ang base64 nga gi-encode nga bersyon sa among sekreto nga pulong nga xyzzy. Mahimo nimong pamatud-an kini pinaagi sa pagpadagan sa base64 β€”decode command sa terminal:

echo "eHl6enk=" | base64 --decode
xyzzy

Busa, samtang gipanalipdan ka sa Kubernetes gikan sa aksidente nga pag-output sa sensitibo nga datos sa terminal o mga file sa log, kung nabasa nimo ang mga pagtugot sa Tinago nga mga butang sa usa ka piho nga namespace, kana nga datos mahimo’g base64ed ug pagkahuman ma-decode.

Kung kinahanglan nimo nga base64 ang pag-encode sa pipila ka teksto (pananglitan, aron ibutang kini sa usa ka Sekreto), gamita ang base64 nga mando nga walay mga argumento:

echo xyzzy | base64
eHl6enkK

Pag-access sa mga Sekreto nga Butang

Kinsa ang makabasa ug maka-edit sa mga Sekreto nga butang? Gitino kini sa RBAC, usa ka mekanismo sa pagkontrol sa pag-access (atong hisgotan kini sa detalye sa subseksyon nga "Introduction to Role-Based Access Control" sa pahina 258). Kung nagdagan ka usa ka kumpol nga wala’y RBAC o wala ma-enable, ang tanan nimo nga Sekreto nga mga butang magamit sa bisan kinsa nga tiggamit ug mga sudlanan (among ipasabut sa ulahi nga dili ka kinahanglan adunay bisan unsang mga cluster sa produksiyon nga wala ang RBAC).

Passive data encryption

Komosta kadtong adunay access sa etcd database diin gitipigan sa Kubernetes ang tanang impormasyon niini? Makabasa ba sila sa sensitibo nga datos nga wala’y pagtugot sa pagbasa sa mga Sekreto nga butang pinaagi sa API?

Sukad sa bersyon 1.7, gisuportahan sa Kubernetes ang passive data encryption. Kini nagpasabot nga ang sensitibo nga impormasyon sa sulod etcd gitipigan nga naka-encrypt sa disk ug dili mabasa bisan niadtong adunay direktang access sa database. Aron ma-decrypt kini, kinahanglan nimo ang yawe nga ang Kubernetes API server ra ang adunay. Sa usa ka husto nga na-configure nga cluster, ang passive encryption kinahanglan nga mahimo.

Mahimo nimong susihon kung ang passive encryption nagtrabaho sa imong cluster niining paagiha:

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

Kung dili nimo makita ang flag nga experimental-encryption-provider-config, ang passive encryption wala ma-enable. Kung gigamit ang Google Kubernetes Engine o uban pang mga serbisyo sa pagdumala sa Kubernetes, ang imong data gi-encrypt gamit ang lahi nga mekanismo, aron ang bandila dili maanaa. Susiha uban sa imong Kubernetes vendor aron masuta kung ang etcd content na-encrypt.

Pagtipig sa kompidensyal nga datos

Adunay pipila ka mga kapanguhaan sa Kubernetes nga dili kinahanglan nga tangtangon gikan sa cluster, sama sa sensitibo kaayo nga mga butang nga Sekreto. Mahimo nimong panalipdan ang usa ka kapanguhaan nga dili mapapas gamit ang usa ka anotasyon nga gihatag sa manedyer sa Helm:

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

Mga Estratehiya sa Pagdumala sa Sekreto nga Butang

Sa pananglitan gikan sa miaging seksyon, ang sensitibo nga datos gipanalipdan gikan sa dili awtorisado nga pag-access dayon pagkahuman gitipigan sa cluster. Apan sa dayag nga mga file kini gitipigan isip yano nga teksto.

Dili gyud nimo ibutang ang kompidensyal nga kasayuran sa mga file nga naa sa kontrol sa bersyon. Sa unsang paagi nimo luwas nga madumala ug matipigan kini nga impormasyon sa dili pa kini magamit sa imong Kubernetes cluster?

Makapili ka ug bisan unsang mga himan o estratehiya sa pagdumala sa sensitibong datos sa imong mga aplikasyon, apan kinahanglan nimo nga tubagon bisan ang mosunod nga mga pangutana.

  • Asa kinahanglan tipigan ang sensitibo nga datos aron kini daling ma-access?
  • Giunsa paghimo ang sensitibo nga datos nga ma-access sa imong aktibo nga mga aplikasyon?
  • Unsa ang kinahanglan mahitabo sa imong mga aplikasyon kung imong ilisan o i-edit ang sensitibo nga datos?

Mahitungod sa mga tagsulat

John Arundel usa ka consultant nga adunay 30 ka tuig nga kasinatian sa industriya sa kompyuter. Nakasulat siya og daghang mga libro ug nagtrabaho kauban ang daghang mga kompanya gikan sa lainlaing mga nasud, gitambagan sila sa imprastraktura nga lumad sa panganod ug mga Kubernetes. Sa iyang libre nga oras, nalingaw siya sa pag-surf, usa ka maayong tigpusil sa pistola, ug nagtugtog sa piano isip usa ka amateur. Nagpuyo sa usa ka fairytale cottage sa Cornwall, England.

Justin Dominus - engineer sa administrasyon sa mga sistema nga nagtrabaho sa usa ka palibot sa DevOps nga adunay mga Kubernetes ug mga teknolohiya sa panganod. Nalingaw siya sa paggugol ug panahon sa gawas, pag-inom ug kape, pag-crabbing, ug paglingkod sa kompyuter. Nagpuyo sa Seattle, Washington, uban ang usa ka matahum nga iring ug usa ka labi ka matahum nga asawa ug labing suod nga higala, si Adrienne.

Β» Para sa dugang nga impormasyon bahin sa libro, palihog bisitaha website sa magmamantala
Β» Mga sulud sa sulud
Β» Kinutlo

Alang sa Khabrozhiteli 25% nga diskwento sa kupon - Kubernetes

Sa pagbayad sa papel nga bersyon sa libro, usa ka e-libro ang ipadala sa e-mail.

Source: www.habr.com

Idugang sa usa ka comment