Գիրք «Kubernetes for DevOps»

Գիրք «Kubernetes for DevOps» Ողջույն Խաբրո բնակիչներ։ Kubernetes-ը ժամանակակից ամպային էկոհամակարգի հիմնական տարրերից մեկն է: Այս տեխնոլոգիան ապահովում է հուսալիություն, մասշտաբայնություն և ճկունություն կոնտեյների վիրտուալացման համար: Ջոն Արունդելը և Ջասթին Դոմինգուսը խոսում են Kubernetes էկոհամակարգի մասին և ներկայացնում են առօրյա խնդիրների ապացուցված լուծումներ։ Քայլ առ քայլ դուք կստեղծեք ձեր սեփական ամպային հավելվածը և կստեղծեք ենթակառուցվածք՝ դրան աջակցելու համար, կստեղծեք զարգացման միջավայր և շարունակական տեղակայման խողովակաշար, որը կօգնի ձեզ աշխատել ձեր հաջորդ հավելվածների վրա:

• Սկսեք կոնտեյներների և Kubernetes-ի հետ աշխատելու հիմունքներից. թեման սովորելու համար հատուկ փորձ չի պահանջվում: • Գործարկեք ձեր սեփական կլաստերները կամ ընտրեք կառավարվող Kubernetes ծառայություն Amazon-ից, Google-ից և այլն: • Օգտագործեք Kubernetes-ը՝ բեռնարկղերի կյանքի ցիկլը և ռեսուրսների սպառումը կառավարելու համար: • Օպտիմալացնել կլաստերները՝ հիմնվելով ծախսերի, կատարողականի, ճկունության, հզորության և մասշտաբայնության վրա: • Իմացեք ձեր հավելվածները մշակելու, փորձարկելու և տեղակայելու լավագույն գործիքները: • Օգտագործեք ընթացիկ արդյունաբերության պրակտիկան՝ անվտանգությունն ու վերահսկողությունն ապահովելու համար: • Կիրառեք DevOps-ի սկզբունքները ձեր ողջ ընկերությունում, որպեսզի մշակող թիմերը կարողանան գործել ավելի ճկուն, արագ և արդյունավետ:

Ո՞ւմ համար է գիրքը:

Գիրքն առավել արդիական է սերվերների, հավելվածների և ծառայությունների համար պատասխանատու վարչակազմի աշխատակիցների, ինչպես նաև ծրագրավորողների համար, որոնք ներգրավված են կա՛մ նոր ամպային ծառայությունների կառուցման մեջ, կա՛մ գոյություն ունեցող հավելվածները տեղափոխելով Kubernetes և ամպ: Մի անհանգստացեք, ձեզ հարկավոր չէ իմանալ, թե ինչպես աշխատել Kubernetes-ի կամ բեռնարկղերի հետ. մենք ձեզ ամեն ինչ կսովորեցնենք:

Փորձառու Kubernetes-ի օգտատերերը նույնպես մեծ արժեք կգտնեն՝ այնպիսի թեմաների խորը լուսաբանմամբ, ինչպիսիք են RBAC-ը, շարունակական տեղակայումը, զգայուն տվյալների կառավարումը և դիտելիությունը: Հուսով ենք, որ գրքի էջերը անպայման ձեզ համար հետաքրքիր բան կպարունակեն՝ անկախ ձեր հմտություններից ու փորձից։

Ի՞նչ հարցերի է պատասխանում գիրքը:

Գիրքը պլանավորելիս և գրելիս մենք հարյուրավոր մարդկանց հետ քննարկել ենք ամպային տեխնոլոգիան և Kubernetes-ը՝ խոսելով ոլորտի առաջատարների և փորձագետների, ինչպես նաև լրիվ նորեկների հետ: Ստորև ներկայացված են ընտրված հարցեր, որոնց պատասխանները կցանկանային ստանալ այս հրապարակման մեջ:

  • «Ինձ հետաքրքրում է, թե ինչու պետք է ժամանակ ծախսել այս տեխնոլոգիայի վրա: Ի՞նչ խնդիրներ դա կօգնի ինձ ու իմ թիմին լուծել»։
  • «Kubernetes-ը հետաքրքիր է թվում, բայց մուտքի բավականին բարձր արգելք ունի: Պարզ օրինակ պատրաստելը դժվար չէ, բայց հետագա կառավարումն ու վրիպազերծումը սարսափեցնում է: Մենք կցանկանայինք վստահելի խորհուրդներ ստանալ այն մասին, թե ինչպես են մարդիկ կառավարում Kubernetes-ի կլաստերները իրական աշխարհում և ինչ խնդիրների կարող ենք հանդիպել»:
  • «Սուբյեկտիվ խորհուրդը օգտակար կլինի: Kubernetes էկոհամակարգը նոր թիմերին տալիս է ընտրության չափազանց շատ տարբերակներ: Երբ նույն բանն անելու մի քանի եղանակ կա, ինչպե՞ս գիտեք, թե որն է լավագույնը: Ինչպե՞ս ընտրություն կատարել:

Եվ թերևս բոլոր հարցերից ամենակարևորը.

  • «Ինչպե՞ս կարող եմ օգտագործել Kubernetes-ը առանց իմ ընկերությանը խաթարելու»:

Հատված. Կազմաձևում և գաղտնի օբյեկտներ

Kubernetes հավելվածի տրամաբանությունը դրա կազմաձևից (այսինքն՝ ցանկացած արժեքներից կամ պարամետրերից, որոնք կարող են փոխվել ժամանակի ընթացքում) առանձնացնելու ունակությունը շատ օգտակար է: Կազմաձևման արժեքները սովորաբար ներառում են շրջակա միջավայրի հատուկ կարգավորումներ, երրորդ կողմի ծառայության DNS հասցեներ և նույնականացման հավատարմագրեր:

Իհարկե, այս ամենը կարող է ուղղակիորեն դրվել օրենսգրքի մեջ, բայց այս մոտեցումը բավականաչափ ճկուն չէ։ Օրինակ, կազմաձևման արժեքի փոփոխությունից հետո ձեզանից կպահանջվի նորից ստեղծել և տեղադրել ձեր կոդը: Շատ ավելի լավ լուծում կլինի կոնֆիգուրացիան կոդից առանձնացնելն ու այն ֆայլից կամ միջավայրի փոփոխականներից կարդալը:

Kubernetes-ը տրամադրում է կոնֆիգուրացիան կառավարելու մի քանի տարբեր եղանակներ: Նախ, դուք կարող եք արժեքներ փոխանցել հավելվածին շրջակա միջավայրի փոփոխականների միջոցով, որոնք նշված են pod wrapper-ի բնութագրում (տես «Շրջակա միջավայրի փոփոխականներ» էջ 192): Երկրորդ, կոնֆիգուրացիայի տվյալները կարող են ուղղակիորեն պահվել Kubernetes-ում՝ օգտագործելով ConfigMap և Secret օբյեկտները:

Այս գլխում մենք մանրամասնորեն ուսումնասիրում ենք այս օբյեկտները և դիտում ենք մի քանի գործնական մոտեցումներ՝ կառավարելու կոնֆիգուրացիաները և զգայուն տվյալները՝ օգտագործելով ցուցադրական հավելված:

Կազմաձևի փոփոխման ժամանակ պատիճների կեղևների թարմացում

Պատկերացրեք, որ դուք տեղակայում ունեք ձեր կլաստերում և ցանկանում եք փոխել որոշ արժեքներ դրա ConfigMap-ում: Եթե ​​դուք օգտագործում եք Helm աղյուսակը (տես «Helm. Package Manager for Kubernetes» էջ 102), դուք կարող եք ավտոմատ կերպով հայտնաբերել կազմաձևման փոփոխությունը և վերաբեռնել ձեր պատյանների կեղևները մեկ կոկիկ հնարքով: Ավելացրեք հետևյալ ծանոթագրությունը ձեր տեղակայման բնութագրին.

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

Տեղակայման ձևանմուշն այժմ պարունակում է կազմաձևման պարամետրերի ստուգիչ գումար. եթե պարամետրերը փոխվեն, գումարը կթարմացվի: Եթե ​​դուք գործարկեք ղեկի արդիականացումը, Helm-ը կհայտնաբերի, որ տեղակայման առանձնահատկությունը փոխվել է և կվերագործարկի բոլոր պատյանները:

Զգայուն տվյալներ Kubernetes-ում

Մենք արդեն գիտենք, որ ConfigMap օբյեկտը ապահովում է ճկուն մեխանիզմ՝ կլաստերի մեջ կազմաձևման տվյալները պահելու և մուտք գործելու համար։ Այնուամենայնիվ, հավելվածների մեծ մասն ունի զգայուն և զգայուն տեղեկատվություն, ինչպիսիք են գաղտնաբառերը կամ API ստեղները: Այն կարող է պահվել նաև ConfigMap-ում, սակայն այս լուծումը իդեալական չէ:

Փոխարենը, Kubernetes-ն առաջարկում է հատուկ տեսակի օբյեկտ, որը նախատեսված է զգայուն տվյալներ պահելու համար՝ Secret: Հաջորդը, եկեք տեսնենք մի օրինակ, թե ինչպես կարող է այս օբյեկտը օգտագործվել մեր ցուցադրական հավելվածում:

Սկսելու համար նայեք Գաղտնի օբյեկտի Kubernetes մանիֆեստին (տե՛ս hello-secret-env/k8s/secret.yaml):

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

Այս օրինակում magicWord մասնավոր բանալին xyzzy է (en.wikipedia.org/wiki/Xyzzy_(հաշվողական)): xyzzy բառը ընդհանուր առմամբ շատ օգտակար է համակարգիչների աշխարհում: ConfigMap-ի նման, դուք կարող եք մի քանի բանալիներ և արժեքներ պահել գաղտնի օբյեկտում: Այստեղ, պարզության համար, մենք օգտագործում ենք միայն մեկ բանալի-արժեք զույգ:

Գաղտնի օբյեկտների օգտագործումը որպես շրջակա միջավայրի փոփոխականներ

Ինչպես ConfigMap-ը, գաղտնի օբյեկտը կարող է հասանելի լինել կոնտեյներով որպես շրջակա միջավայրի փոփոխականներ կամ որպես ֆայլ իր սկավառակի վրա: Հետևյալ օրինակում մենք շրջակա միջավայրի փոփոխական կվերագրենք Secret-ի արժեքին.

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

Գործարկեք հետևյալ հրամանը ցուցադրական պահոցում՝ մանիֆեստները կիրառելու համար.

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

Ինչպես նախկինում, փոխանցեք տեղական նավահանգիստը տեղակայմանը՝ արդյունքը տեսնելու ձեր բրաուզերում.

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

Հասցե բացելիս localhost:9999/ դուք պետք է տեսնեք հետևյալը.

The magic word is "xyzzy"

Գաղտնի առարկաներ ֆայլերում գրելը

Այս օրինակում գաղտնի օբյեկտը որպես ֆայլ կկցենք կոնտեյներին: Կոդը գտնվում է ցուցադրական պահոցի hello-secret-file թղթապանակում:

Գաղտնիքը որպես ֆայլ միացնելու համար մենք կօգտագործենք հետևյալ տեղակայումը.

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

Ինչպես «ConfigMap օբյեկտներից կազմաձևման ֆայլերի ստեղծում» ենթաբաժնում, էջ. 240, մենք ստեղծում ենք ծավալ (այս դեպքում՝ demo-secret-volume) և տեղադրում ենք այն կոնտեյների մեջ՝ ճշգրտման volumeMounts բաժնում: MountPath դաշտը /secrets է, ուստի Kubernetes-ը կստեղծի մեկ ֆայլ այս թղթապանակում գաղտնի օբյեկտում սահմանված յուրաքանչյուր բանալին/արժեք զույգի համար:

Մեր օրինակում մենք սահմանեցինք միայն մեկ բանալի-արժեք զույգ, որը կոչվում է magicWord, այնպես որ մանիֆեստը կստեղծի միայն կարդալու համար նախատեսված մեկ ֆայլ /secrets/magicWord՝ կոնտեյների մեջ զգայուն տվյալներով:

Եթե ​​դուք կիրառեք այս մանիֆեստը նույն կերպ, ինչպես նախորդ օրինակը, դուք պետք է ստանաք նույն արդյունքը.

The magic word is "xyzzy"

Գաղտնի առարկաների ընթերցում

Նախորդ բաժնում մենք օգտագործեցինք kubectl describe հրամանը՝ ConfigMap-ի բովանդակությունը ցուցադրելու համար: Կարո՞ղ է նույնը անել Secret-ի հետ:

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

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

Data
====
magicWord: 5   bytes

Խնդրում ենք նկատի ունենալ, որ տվյալներն ինքնին չեն ցուցադրվում: Kubernetes-ի գաղտնի օբյեկտները անթափանց տիպի են, ինչը նշանակում է, որ դրանց բովանդակությունը չի ցուցադրվում kubectl-ում նկարագրում է ելքը, գրանցամատյանում կամ տերմինալում, ինչը անհնարին է դարձնում պատահաբար զգայուն տեղեկատվության բացահայտումը:

Զգայուն տվյալների կոդավորված YAML տարբերակը դիտելու համար օգտագործեք kubectl get հրամանը.

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

base64- ը

Ի՞նչ է eHl6enk=-ը, որը լիովին տարբերվում է մեր սկզբնական արժեքից: Սա իրականում գաղտնի օբյեկտ է, որը ներկայացված է base64 կոդավորման մեջ: Base64-ը կամայական երկուական տվյալների կոդավորման սխեմա է որպես նիշերի տող:

Քանի որ զգայուն տեղեկատվությունը կարող է լինել երկուական և ոչ ելքային (ինչպես TLS գաղտնագրման բանալիի դեպքում), գաղտնի օբյեկտները միշտ պահվում են base64 ձևաչափով:

beHl6enk= տեքստը մեր գաղտնի բառի xyzzy-ի բազային64 կոդավորված տարբերակն է: Դուք կարող եք դա հաստատել՝ գործարկելով base64 — decode հրամանը տերմինալում.

echo "eHl6enk=" | base64 --decode
xyzzy

Այսպիսով, մինչ Kubernetes-ը պաշտպանում է ձեզ տերմինալում կամ գրանցամատյանի ֆայլերում զգայուն տվյալներ պատահաբար դուրս բերելուց, եթե դուք գաղտնի օբյեկտների թույլտվություններ ունեք որոշակի անվանատարածքում, այդ տվյալները կարող են հիմնվել64 և հետագայում վերծանվել:

Եթե ​​Ձեզ անհրաժեշտ է base64-ը կոդավորել որոշ տեքստ (օրինակ՝ գաղտնիքի մեջ դնելու համար), օգտագործեք base64 հրամանը առանց փաստարկների.

echo xyzzy | base64
eHl6enkK

Գաղտնի օբյեկտներ մուտք գործելը

Ո՞վ կարող է կարդալ և խմբագրել գաղտնի առարկաները: Սա որոշվում է RBAC-ի՝ մուտքի վերահսկման մեխանիզմի կողմից (մենք այն մանրամասն կքննարկենք «Դերի վրա հիմնված մուտքի վերահսկման ներածություն» ենթաբաժնում, էջ 258): Եթե ​​դուք աշխատում եք մի կլաստեր, որը չունի RBAC կամ միացված չէ, ձեր բոլոր Գաղտնի օբյեկտները հասանելի են ցանկացած օգտագործողի և կոնտեյների համար (մենք ավելի ուշ կբացատրենք, որ դուք չպետք է ունենաք արտադրական կլաստերներ առանց RBAC-ի):

Պասիվ տվյալների գաղտնագրում

Ինչ վերաբերում է նրանց, ովքեր մուտք ունեն etcd տվյալների բազա, որտեղ Kubernetes-ը պահում է իր ողջ տեղեկատվությունը: Կարո՞ղ են նրանք կարդալ զգայուն տվյալներ՝ առանց API-ի միջոցով գաղտնի օբյեկտները կարդալու թույլտվության:

1.7 տարբերակից ի վեր Kubernetes-ն աջակցում է տվյալների պասիվ կոդավորումը: Սա նշանակում է, որ etcd-ի ներսում զգայուն տեղեկատվությունը պահվում է կոդավորված սկավառակի վրա և չի կարող կարդալ նույնիսկ նրանց կողմից, ովքեր ուղղակիորեն մուտք ունեն տվյալների բազա: Այն վերծանելու համար ձեզ հարկավոր է բանալի, որն ունի միայն Kubernetes API սերվերը: Պատշաճ կազմաձևված կլաստերում պասիվ գաղտնագրումը պետք է միացված լինի:

Դուք կարող եք ստուգել, ​​թե արդյոք պասիվ կոդավորումն աշխատում է ձեր կլաստերում այս կերպ.

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

Եթե ​​դուք չեք տեսնում փորձնական-encryption-provider-config դրոշը, պասիվ գաղտնագրումը միացված չէ: Google Kubernetes Engine-ի կամ Kubernetes-ի կառավարման այլ ծառայություններից օգտվելիս ձեր տվյալները կոդավորված են այլ մեխանիզմի միջոցով, ուստի դրոշը չի լինի: Ստուգեք ձեր Kubernetes վաճառողի հետ՝ տեսնելու, թե etcd բովանդակությունը գաղտնագրված է:

Գաղտնի տվյալների պահպանում

Կան Kubernetes-ի որոշ ռեսուրսներ, որոնք երբեք չպետք է հեռացվեն կլաստերից, օրինակ՝ խիստ զգայուն Գաղտնի օբյեկտները: Դուք կարող եք պաշտպանել ռեսուրսը ջնջվելուց՝ օգտագործելով Helm մենեջերի կողմից տրամադրված ծանոթագրությունը.

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

Գաղտնի օբյեկտների կառավարման ռազմավարություններ

Նախորդ բաժնի օրինակում զգայուն տվյալները պաշտպանված էին չարտոնված մուտքից անմիջապես կլաստերում պահվելուց հետո: Բայց մանիֆեստի ֆայլերում դրանք պահվում էին որպես պարզ տեքստ:

Դուք երբեք չպետք է գաղտնի տեղեկատվություն տեղադրեք այն ֆայլերում, որոնք գտնվում են տարբերակի հսկողության տակ: Ինչպե՞ս կարող եք ապահով կերպով կառավարել և պահպանել այս տեղեկատվությունը, նախքան այն կիրառելը ձեր Kubernetes կլաստերում:

Դուք կարող եք ընտրել ցանկացած գործիք կամ ռազմավարություն՝ ձեր հավելվածներում զգայուն տվյալների հետ աշխատելու համար, բայց դուք դեռ պետք է պատասխանեք առնվազն հետևյալ հարցերին:

  • Որտե՞ղ պետք է պահվեն զգայուն տվյալները, որպեսզի դրանք հասանելի լինեն:
  • Ինչպե՞ս զգայուն տվյալները հասանելի դարձնել ձեր ակտիվ հավելվածներին:
  • Ի՞նչ պետք է տեղի ունենա ձեր հավելվածների հետ, երբ դուք փոխարինում կամ խմբագրում եք զգայուն տվյալները:

Հեղինակների մասին

Ջոն Արունդել համակարգչային ոլորտում 30 տարվա փորձ ունեցող խորհրդատու է: Նա գրել է մի քանի գրքեր և համագործակցում է տարբեր երկրների բազմաթիվ ընկերությունների հետ՝ խորհուրդ տալով նրանց ամպային ենթակառուցվածքների և Kubernetes-ի վերաբերյալ: Ազատ ժամանակ սիրում է սերֆինգով զբաղվել, լավ հրաձիգ է ատրճանակով, սիրողականորեն դաշնամուր է նվագում։ Ապրում է Անգլիայի Քորնուոլ քաղաքում գտնվող հեքիաթային տնակում:

Ջասթին Դոմինգուս — համակարգերի կառավարման ինժեներ, որն աշխատում է DevOps միջավայրում Kubernetes-ի և ամպային տեխնոլոգիաների հետ: Նա սիրում է ժամանակ անցկացնել դրսում, սուրճ խմել, խեցգետիններ անել և նստել համակարգչի մոտ: Ապրում է Սիեթլում, Վաշինգտոն, հիանալի կատվի և նույնիսկ ավելի հրաշալի կնոջ և լավագույն ընկերոջ՝ Ադրիենի հետ:

» Գրքի մասին ավելի մանրամասն կարող եք գտնել այստեղ հրատարակչի կայքը
» Պահեստավորված նյութեր
» Հատված

Khabrozhiteley-ի համար 25% զեղչ՝ օգտագործելով կտրոնը - Կուբերնետես

Գրքի թղթային տարբերակի վճարումից հետո էլեկտրոնային գիրք կուղարկվի էլեկտրոնային փոստով:

Source: www.habr.com

Добавить комментарий