Pirtûka "Kubernetes ji bo DevOps"

Pirtûka "Kubernetes ji bo DevOps" Silav, niştecîhên Xabro! Kubernetes yek ji hêmanên sereke yên ekosîstema ewr a nûjen e. Vê teknolojiyê pêbawerî, pîvanbûn û rehetbûna virtualkirina konteynerê peyda dike. John Arundel û Justin Domingus li ser ekosîstema Kubernetes diaxivin û ji pirsgirêkên rojane re çareseriyên îsbatkirî destnîşan dikin. Gav-gav, hûn ê serîlêdana xweya ewr-xwecihî ava bikin û binesaziyê biafirînin ku piştgiriyê bidin wê, hawîrdorek pêşkeftinê û boriyek birêkûpêk a domdar saz bikin ku dê ji we re bibe alîkar dema ku hûn li ser sepanên xwe yên din bixebitin.

• Bi konteynir û Kubernetes ji bingehan dest pê bikin: Ji bo fêrbûna mijarê ezmûnek taybetî hewce nake. • Komên xwe bimeşînin an jî karûbarek Kubernetes a birêvebir ji Amazon, Google û hwd hilbijêrin. • Klusteran li ser bingeha lêçûn, performans, berxwedêrî, hêz û mezinbûnê çêtir bikin. • Amûrên çêtirîn fêr bibin ku hûn serîlêdanên xwe pêşve bibin, ceribandin û bicîh bikin. • Pratîkên pîşesaziyê yên heyî bikar bînin da ku ewlehî û kontrol bikin. • Prensîbên DevOps li seranserê pargîdaniya xwe bicîh bikin da ku tîmên pêşkeftinê bi nermî, zû û bikêrtir tevbigerin.

Pirtûk ji bo kê ye?

Pirtûk ji bo xebatkarên beşên rêveberiyê yên ku ji server, serîlêdan û karûbaran berpirsiyar in, û hem jî ji bo pêşdebiran ku di avakirina karûbarên cloudê yên nû de an jî koçkirina sepanên heyî ji Kubernetes û ewr re têkildar in, herî têkildar e. Xem neke, hûn ne hewce ne ku hûn zanibin ka meriv çawa bi Kubernetes an konteyneran re dixebite - em ê her tiştî hînî we bikin.

Bikarhênerên Kubernetes ên bi ezmûn dê di heman demê de bi vegirtina kûr a mijarên wekî RBAC, birêkûpêkkirina domdar, rêveberiya daneya hesas, û çavdêriyê re gelek nirx bibînin. Em hêvî dikin ku di rûpelên pirtûkê de bê guman jêhatîbûn û ezmûna we tiştek balkêş ji bo we hebe.

Pirtûk bersiva kîjan pirsan dide?

Di dema plansazkirin û nivîsandina pirtûkê de, me teknolojiya ewr û Kubernetes bi bi sedan kesan re nîqaş kir, bi serokên pîşesaziyê û pisporan re û hem jî nûjenên bêkêmasî re axivî. Li jêr pirsên hilbijartî hene ku ew dixwazin di vê weşanê de bersivê bibînin.

  • "Ez bala min dikişînim ka çima divê hûn wextê xwe li ser vê teknolojiyê derbas bikin. Ew ê ji min û tîmê min re çi pirsgirêkan çareser bike?
  • "Kubernetes balkêş xuya dike, lê ji bo têketinê xwedan astengiyek pir bilind e. Amadekirina mînakek hêsan ne dijwar e, lê bêtir rêvebirin û debugging tirsnak e. Em dixwazin şîretên pêbawer bistînin ka meriv çawa komikên Kubernetes di cîhana rastîn de birêve dibin û dibe ku em bi kîjan pirsgirêkan re rû bi rû bimînin."
  • "Şêwirdariya subjektîf dê bibe alîkar. Ekosîstema Kubernetes gelek vebijarkan dide tîmên nû ku ji wan hilbijêrin. Gava ku çend awayan hene ku meriv heman tiştî bikin, hûn çawa dizanin ka kîjan çêtirîn e? Meriv çawa bijartinek çêbike?

Û dibe ku ji hemî pirsan ya herî girîng:

  • "Ez çawa dikarim Kubernetes bikar bînim bêyî ku pargîdaniya xwe asteng bikim?"

Excerpt. Veavakirin û tiştên veşartî

Qabiliyeta veqetandina mantiqa serîlêdana Kubernetes ji veavakirina wê (ango, ji her nirx an mîhengên ku dibe ku bi demê re biguhere) pir bikêr e. Nirxên vesazkirinê bi gelemperî mîhengên hawîrdorê, navnîşanên DNS-ê yên karûbarê sêyemîn, û pêbaweriyên erêkirinê vedigirin.

Bê guman, ev hemî rasterast dikare di kodê de were danîn, lê ev nêzîkatî bi têra xwe maqûl nîne. Mînakî, guheztina nirxek mîhengê wê hingê hewce dike ku hûn dîsa koda xwe ava bikin û bicîh bikin. Çareseriyek pir çêtir dê ev be ku veavakirinê ji kodê veqetînin û wê ji pelek an guhêrbarên hawîrdorê bixwînin.

Kubernetes ji bo birêvebirina veavakirinê çend awayên cûda peyda dike. Pêşîn, hûn dikarin nirxan bi navgîniya guhêrbarên jîngehê yên ku di taybetmendiya pêça pod de hatine destnîşan kirin re derbas bikin (li "Guherbarên Jîngehê" li ser rûpela 192 binêre). Ya duyemîn, daneyên mîhengê dikarin rasterast li Kubernetes bi karanîna ConfigMap û tiştên veşartî werin hilanîn.

Di vê beşê de, em van tiştan bi hûrgulî vedikolin û li hin nêzîkatiyên pratîkî yên ji bo birêvebirina veavakirin û daneyên hesas bi karanîna serîlêdanek demo dinêrin.

Dema ku veavakirin diguhezîne şêlên podê nûve dike

Xeyal bikin ku we di koma xwe de vedanek heye û hûn dixwazin di ConfigMap-a wê de hin nirxan biguhezînin. Ger hûn nexşeya Helm bikar bînin (li "Helm: Rêvebirê Pakêtê ji bo Kubernetes" li ser rûpela 102 binêre), hûn dikarin bixweber guhertinek vesazkirinê tespît bikin û şêlên podê xwe di yek fêlbaziyek xweş de ji nû ve bar bikin. Şîrovekirina jêrîn li taybetmendiya bicîhkirina xwe zêde bikin:

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

Naha şablona bicîhkirinê jimareyek pîvanên veavakirinê dihewîne: ger parametre werin guheztin, berhevok dê were nûve kirin. Ger hûn nûvekirina helmê bimeşînin, Helm dê tespît bike ku taybetmendiya bicîhkirinê guherî ye û dê hemî pelikên pod ji nû ve bide destpêkirin.

Daneyên hesas li Kubernetes

Em jixwe dizanin ku objeya ConfigMap mekanîzmayek maqûl peyda dike ji bo hilanîn û gihîştina daneyên mîhengê di komekê de. Lêbelê, piraniya serlêdanan agahdariya ku hesas û hesas e, wek şîfre an bişkojkên API-ê hene. Ew dikare di ConfigMap de jî were hilanîn, lê ev çareserî ne îdeal e.

Di şûna wê de, Kubernetes celebek taybetî ya ku ji bo hilanîna daneyên hesas hatî sêwirandin pêşkêşî dike: Veşartî. Dûv re, em li mînakek binêrin ka ev tişt çawa dikare di serîlêdana meya demo de were bikar anîn.

Ji bo ku hûn dest pê bikin, li manîfestoya Kubernetes ji bo tişta Veşartî mêze bikin (binihêrin hello-secret-env/k8s/secret.yaml):

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

Di vê nimûneyê de, mifteya taybet a magicWord xyzzy ye (en.wikipedia.org/wiki/Xyzzy_(computing)). Peyva xyzzy bi gelemperî di cîhana komputeran de pir bikêr e. Mîna ConfigMap, hûn dikarin gelek kilît û nirxan di nav tiştek veşartî de hilînin. Li vir, ji bo sadebûnê, em tenê yek cotek key-nirx bikar tînin.

Bikaranîna Tiştên Veşartî wekî Guherbarên Jîngehê

Mîna ConfigMap, tişta Veşartî dikare di konteynerê de wekî guhêrbarên hawîrdorê an wekî pelek li ser dîska wê were peyda kirin. Di mînaka jêrîn de, em ê guhêrbarek jîngehê bi nirxa ji Secret veqetînin:

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

Fermana jêrîn di depoya demo de bicîh bikin da ku nîşanan bicîh bikin:

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

Mîna berê, porta herêmî bişopînin dakêşanê da ku encamê di geroka xwe de bibînin:

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

Dema ku navnîşek vekin localhost:9999/ divê hûn jêrîn bibînin:

The magic word is "xyzzy"

Nivîsandina tiştên veşartî li ser pelan

Di vê nimûneyê de, em ê tiştê Veşartî wekî pelê bi konteynerê ve girêbidin. Kod di peldanka pelê silav-veşartî ya depoya demo de ye.

Ji bo girêdana Secret wekî pelê, em ê bicîhkirina jêrîn bikar bînin:

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

Wekî ku di binbeşê de "Afirandina pelên veavakirinê ji tiştên ConfigMap" li ser rûp. 240, em cildek çêdikin (di vê rewşê de volumek demo-veşartî) û wê li konteynerê di beşa volumeMounts ya taybetmendiyê de siwar dikin. Qada mountPath /secrets e, ji ber vê yekê Kubernetes dê di vê peldankê de ji bo her cotek kilît/nirxê ku di tiştê Veşartî de hatî destnîşan kirin pelek biafirîne.

Di mînaka xwe de, me tenê cotek nirx-kilît bi navê magicWord diyar kir, ji ber vê yekê manîfesto dê pelek yek-tenê xwendinê /secrets/magicWord bi daneyên hesas di konteynerê de biafirîne.

Ger hûn vê manîfestoyê bi heman awayê mînaka berê bicîh bînin, divê hûn heman encamê bistînin:

The magic word is "xyzzy"

Xwendina tiştên veşartî

Di beşa berê de, me fermana danasîna kubectl bikar anî da ku naveroka ConfigMap nîşan bide. Ma heman tişt bi Secret re dikare were kirin?

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

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

Data
====
magicWord: 5   bytes

Ji kerema xwe not bikin ku dane bixwe nayê xuyang kirin. Tiştên nehênî yên di Kubernetes de ji celebê Opaque ne, ku tê vê wateyê ku naveroka wan di kubectl de encam, navnîşên têketinê, an termînalê diyar nakin, ne gengaz e ku meriv bi xeletî agahdariya hesas eşkere bike.

Ji bo dîtina guhertoyek YAML ya kodkirî ya daneyên hesas, emrê kubectl get bikar bînin:

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

bingeh64

eHl6enk= çi ye, bi tevahî ji nirxa meya eslî cuda ye? Ev bi rastî tiştek Veşartî ye, ku di şîfrekirina base64 de tê temsîl kirin. Base64 nexşeyek e ji bo şîfrekirina daneyên binary yên keyfî wekî rêzek tîpan.

Ji ber ku agahdariya hesas dibe ku binar be û ne derbikeve (wek ku bi mifteya şîfrekirinê ya TLS re ye), tiştên veşartî her gav di forma base64 de têne hilanîn.

Nivîsa beHl6enk= guhertoya kodkirî ya bingehîn64 a peyva meya veşartî xyzzy ye. Hûn dikarin vê yekê bi xebitandina base64 -fermana dekodkirinê ya di termînalê de verast bikin:

echo "eHl6enk=" | base64 --decode
xyzzy

Ji ber vê yekê, dema ku Kubernetes we ji derxistina bi xeletî daneyên hesas di termînalê an pelên têketinê de diparêze, heke we destûrnameyên li ser tiştên Veşartî di nav cîhek taybetî de xwendibe, ew dane dikare were bingeh64kirin û dûv re were deşîfrekirin.

Heke hûn hewce ne ku base64 hin nivîsê kod bikin (mînakî, ji bo ku wê di Veşartiyek de bixin), fermana base64 bêyî argumanan bikar bînin:

echo xyzzy | base64
eHl6enkK

Gihîştina Tiştên Veşartî

Kî dikare tiştên veşartî bixwîne û biguherîne? Ev ji hêla RBAC, mekanîzmayek kontrolkirina gihîştinê ve hatî destnîşankirin (em ê di binbeşa "Destpêkkirina Kontrola Gihîştina Bingeha Rol" a li ser rûpela 258 de bi berfirehî nîqaş bikin). Ger hûn komek ku xwedan RBAC nîne an neçalakkirî dimeşînin, hemî tiştên weya nehênî ji her bikarhêner û konteyneran re peyda dibin (em ê paşê rave bikin ku divê hûn bêyî RBAC komikên hilberînê nebin).

Şîfrekirina daneya pasîf

Çi li ser kesên ku xwedan databasa etcd-yê ne ku Kubernetes hemî agahdariya xwe hilîne? Ma ew dikarin daneyên hesas bixwînin bêyî ku destûr bidin ku tiştên veşartî bi API-yê bixwînin?

Ji ber guhertoya 1.7, Kubernetes şîfrekirina daneya pasîf piştgirî dike. Ev tê vê wateyê ku agahdariya hesas di hundurê etcd de bi şîfrekirî li ser dîskê têne hilanîn û nekarin ji hêla kesên ku rasterast xwedan databasê ne jî bixwînin. Ji bo deşîfrekirina wê, hûn hewceyê mifteyek ku tenê servera Kubernetes API heye heye. Di komek bi rêkûpêk vesazkirî de, şîfrekirina pasîf divê were çalak kirin.

Hûn dikarin bi vî rengî kontrol bikin ka şîfrekirina pasîf di koma we de dixebite:

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

Heke hûn ala ceribandin-şîfre-pêşkêşker-config nabînin, şîfrekirina pasîf nayê çalak kirin. Dema ku Google Kubernetes Engine an karûbarên din ên rêveberiya Kubernetes bikar tînin, daneyên we bi karanîna mekanîzmayek cûda têne şîfre kirin, ji ber vê yekê ala dê tune be. Bi firoşkarê xwe yê Kubernetes re binihêrin ka naveroka etcd şîfrekirî ye.

Depokirina daneyên nehênî

Hin çavkaniyên Kubernetes hene ku divê tu carî ji komê neyên rakirin, wek tiştên veşartî yên pir hesas. Hûn dikarin çavkaniyek ji jêbirinê bi karanîna annotationek ku ji hêla rêveberê Helm ve hatî peyda kirin biparêzin:

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

Stratejiyên Rêvebiriya Veşartî

Di mînaka ji beşa berê de, daneyên hesas piştî ku di komê de hatin hilanîn tavilê ji gihîştina nedestûr hate parastin. Lê di pelên manîfestoyê de ew wek nivîsa sade hatin hilanîn.

Divê tu carî agahdariya nepenî di pelên ku di bin kontrola guhertoyê de ne bi cîh bikin. Hûn çawa dikarin bi ewlehî vê agahiyê bi rêve bibin û hilînin berî ku wê li koma xweya Kubernetes bicîh bikin?

Hûn dikarin her amûr an stratejiyek ji bo birêvebirina daneyên hesas di serîlêdanên xwe de hilbijêrin, lê dîsa jî hûn hewce ne ku bi kêmî ve pirsên jêrîn bersiv bidin.

  • Divê daneyên hesas li ku werin hilanîn da ku ew pir bigihîjin?
  • Meriv çawa daneyên hesas bigihîje serîlêdanên xwe yên çalak?
  • Dema ku hûn daneyên hesas biguhezînin an biguherînin divê serîlêdanên we çi bibe?

Li ser nivîskaran

John Arundel di pîşesaziya kompîturê de şêwirmendek bi 30 sal ezmûn e. Wî çend pirtûk nivîsandine û bi gelek pargîdaniyên ji welatên cihê re dixebite, li ser binesaziya ewr-xwecihî û Kubernetes şîretan li wan dike. Di dema xwe ya vala de, ew ji surfingê hez dike, fîşekek baş e, û wekî amator li piyanoyê dixe. Li Cornwall, Îngilîstanê, li kozikeke çîrokan dijî.

Justin Domingus - Endezyarê rêveberiya pergalê li hawîrdorek DevOps bi teknolojiyên Kubernetes û ewr re dixebite. Ew kêfa dema xwe li derve derbas dike, qehwe vedixwe, xiftanê dike û li ber komputerê rûdine. Li Seattle, Washington, bi pisîkek ecêb û jina xweşiktir û hevalek çêtirîn, Adrienne re dijî.

» Agahiyên bêtir li ser pirtûkê dikarin li vir bibînin malpera weşanger
» Table of Contents
» Jêkirin

Ji bo Khabrozhiteley 25% erzanî bi karanîna kupon - Kubernetes

Li ser dayîna guhertoya kaxezê ya pirtûkê, dê pirtûkek elektronîkî bi e-nameyê were şandin.

Source: www.habr.com