Ողջույն Խաբրո բնակիչներ։ Kubernetes-ը ժամանակակից ամպային էկոհամակարգի հիմնական տարրերից մեկն է: Այս տեխնոլոգիան ապահովում է հուսալիություն, մասշտաբայնություն և ճկունություն կոնտեյների վիրտուալացման համար: Ջոն Արունդելը և Ջասթին Դոմինգուսը ուսումնասիրում են Կուբերնետեսի էկոհամակարգը և ապացուցված լուծումներ տալիս առօրյա խնդիրներին: Քայլ առ քայլ դուք կստեղծեք ձեր սեփական ամպային հավելվածը և կստեղծեք ենթակառուցվածք՝ դրան աջակցելու համար, կստեղծեք զարգացման միջավայր և շարունակական տեղակայման խողովակաշար, որը կօգնի ձեզ ապագա հավելվածների վրա աշխատելիս:
• Սկսեք կոնտեյներների և Kubernetes-ի հետ սկզբից. թեման սովորելու համար հատուկ փորձ չի պահանջվում: • Գործարկեք ձեր սեփական կլաստերները կամ ընտրեք կառավարվող Kubernetes ծառայություն Amazon-ից, Google-ից և մյուսներից: • Օգտագործեք Kubernetes-ը՝ կոնտեյների կյանքի ցիկլը և ռեսուրսների սպառումը կառավարելու համար: • Օպտիմալացնել կլաստերները ծախսերի, կատարողականի, ճկունության, հզորության և մասշտաբայնության համար: • Իմացեք ձեր հավելվածները մշակելու, փորձարկելու և տեղակայելու լավագույն գործիքները: • Օգտագործեք ընթացիկ արդյունաբերության պրակտիկան՝ անվտանգությունն ու վերահսկողությունն ապահովելու համար: • Կիրառեք DevOps սկզբունքները ձեր կազմակերպությունում՝ օգնելու ձեր զարգացման թիմերին դառնալ ավելի ճկուն, արագ և արդյունավետ:
Ո՞ւմ համար է այս գիրքը:
Գիրքն առավել արդիական է սերվերների, հավելվածների և ծառայությունների համար պատասխանատու վարչակազմի աշխատակիցների, ինչպես նաև ծրագրավորողների համար, որոնք ներգրավված են կա՛մ նոր ամպային ծառայությունների կառուցման մեջ, կա՛մ գոյություն ունեցող հավելվածները տեղափոխելով Kubernetes և ամպ: Մի անհանգստացեք, ձեզ հարկավոր չէ իմանալ, թե ինչպես աշխատել Kubernetes-ի և կոնտեյներների հետ. մենք ձեզ ամեն ինչ կսովորեցնենք:
Փորձառու Kubernetes-ի օգտատերերը կգնահատեն նաև այնպիսի թեմաների խորը լուսաբանմամբ, ինչպիսիք են RBAC-ը, շարունակական տեղակայումը, գաղտնիության կառավարումը և դիտելիությունը: Հուսով ենք, որ այս գրքի էջերը անպայման ձեզ համար հետաքրքիր բան կպարունակեն՝ անկախ ձեր հմտություններից և փորձից։
Ի՞նչ հարցերի է պատասխանում գիրքը:
Գիրքը պլանավորելիս և գրելիս մենք հարյուրավոր մարդկանց հետ քննարկել ենք ամպային հաշվարկների և Kubernetes-ի մասին՝ զրուցելով ոլորտի առաջատարների և փորձագետների, ինչպես նաև լրիվ նորեկների հետ: Ստորև ներկայացնում ենք մի քանի հարցեր, որոնց պատասխանները կցանկանային ստանալ այս հրապարակման մեջ:
- «Ինձ հետաքրքրում է, թե ինչու պետք է ժամանակ հատկացնեք այս տեխնոլոգիայի վրա, ի՞նչ խնդիրներ դա կօգնի ինձ և իմ թիմին լուծել:
- «Kubernetes-ը հետաքրքիր է թվում, բայց մուտքի համար բավականին բարձր արգելք ունի: Պարզ օրինակի ստեղծումը հեշտ է, բայց հետագա կառավարումն ու վրիպազերծումը սարսափեցնում են: Մենք կցանկանայինք մի քանի հիմնավոր խորհուրդներ ստանալ այն մասին, թե ինչպես են մարդիկ կառավարում Kubernetes-ի կլաստերները վայրի բնության մեջ և ինչ խնդիրների կարող ենք հանդիպել»:
- «Սուբյեկտիվ խորհուրդը օգտակար կլինի: Kubernetes էկոհամակարգը առաջարկում է չափազանց շատ տարբերակներ նոր թիմերի համար: Երբ կան նույն բանն անելու մի քանի եղանակներ, ինչպե՞ս գիտեք, թե որն է լավագույնը: Ինչպե՞ս ընտրություն կատարել:
Եվ թերևս ամենակարևոր հարցը.
- «Ինչպե՞ս կարող եմ օգտագործել Kubernetes-ը՝ առանց իմ բիզնեսը խաթարելու»:
Հատված. Կազմաձևում և գաղտնի օբյեկտներ
Kubernetes հավելվածի տրամաբանությունը դրա կազմաձևից (այսինքն՝ ցանկացած արժեքից կամ կարգավորումից, որը կարող է փոխվել ժամանակի ընթացքում) առանձնացնելու ունակությունը շատ օգտակար է: Կազմաձևման արժեքները սովորաբար ներառում են շրջակա միջավայրի հատուկ կարգավորումներ, երրորդ կողմի ծառայությունների համար DNS հասցեներ և նույնականացման հավատարմագրեր:
Իհարկե, այս ամենը կարող է ուղղակիորեն տեղադրվել կոդի մեջ, բայց այս մոտեցումը բավականաչափ ճկուն չէ: Օրինակ, կազմաձևման արժեքը փոխելը ձեզանից կպահանջի վերակառուցել և վերաբաշխել ձեր կոդը: Շատ ավելի լավ լուծում կլինի կոնֆիգուրացիան կոդից առանձնացնելն ու այն ֆայլից կամ միջավայրի փոփոխականներից կարդալը:
Kubernetes-ը տրամադրում է կոնֆիգուրացիան կառավարելու մի քանի տարբեր եղանակներ: Նախ, դուք կարող եք արժեքներ փոխանցել հավելվածին շրջակա միջավայրի փոփոխականների միջոցով, որոնք նշված են pod shell-ի ճշգրտման մեջ (տես Շրջակա միջավայրի փոփոխականներ ենթաբաժինը էջ 192-ում): Երկրորդ, կոնֆիգուրացիայի տվյալները կարող են ուղղակիորեն պահվել Kubernetes-ում՝ օգտագործելով ConfigMap և Secret օբյեկտները:
Այս գլխում մենք մանրամասն կուսումնասիրենք այս օբյեկտները և կդիտարկենք որոշ գործնական մոտեցումներ՝ կառավարելու կոնֆիգուրացիան և գաղտնիությունը՝ օգտագործելով ցուցադրական հավելված:
Կազմաձևի փոփոխության ժամանակ պատիճների կեղևների թարմացում
Պատկերացրեք, որ դուք տեղակայում ունեք ձեր կլաստերում և ցանկանում եք փոխել որոշ արժեքներ դրա ConfigMap-ում: Եթե դուք օգտագործում եք Helm աղյուսակը (տե՛ս «Helm. A 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-ը, Գաղտնի օբյեկտը կարող է հասանելի լինել կոնտեյների ներսում՝ որպես շրջակա միջավայրի փոփոխականներ կամ որպես ֆայլ իր սկավառակի վրա: Հետևյալ օրինակում մենք գաղտնիքից արժեքը կվերագրենք շրջակա միջավայրի փոփոխականին.
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Հասցե բացելիս :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Ինչպես 240-րդ էջի «Կազմաձևման ֆայլերի ստեղծում ConfigMap Objects-ից» բաժնում, մենք ստեղծում ենք ծավալ (այս դեպքում դա դեմո-գաղտնի ծավալն է) և տեղադրում ենք այն կոնտեյների մեջ՝ ճշգրտման 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: Opaquebase64- ը
Ի՞նչ է eHl6enk=-ը, որը բոլորովին տարբերվում է մեր սկզբնական իմաստից: Սա իրականում base64 կոդավորված գաղտնի օբյեկտ է: Base64-ը կամայական երկուական տվյալների կոդավորման սխեմա է որպես նիշերի տող:
Քանի որ զգայուն տեղեկատվությունը կարող է լինել երկուական և տպագրելի (օրինակ՝ TLS կոդավորման բանալի), գաղտնի օբյեկտները միշտ պահվում են base64 ձևաչափով:
beHl6enk= տեքստը մեր գաղտնի բառի xyzzy-ի բազային64 կոդավորված տարբերակն է: Դուք կարող եք դա հաստատել՝ գործարկելով base64 --decode հրամանը տերմինալում.
echo "eHl6enk=" | base64 --decode
xyzzyԱյսպիսով, մինչ Kubernetes-ը պաշտպանում է ձեզ զգայուն տվյալներ պատահաբար նետելուց ձեր տերմինալում կամ գրանցամատյանների ֆայլերում, եթե դուք գաղտնիքների թույլտվություններ ունեք որոշակի անվանատարածքում, կարող եք առբերել այդ տվյալները base64 ձևաչափով և ապակոդավորել դրանք:
Եթե Ձեզ անհրաժեշտ է որոշակի տեքստ կոդավորել 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
