• Սկսեք կոնտեյներների և 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
Հասցե բացելիս
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