Китоби "Kubernetes for DevOps"

Китоби "Kubernetes for DevOps" Салом, сокинони Хабро! Kubernetes яке аз унсурҳои асосии экосистемаи абрии муосир мебошад. Ин технология эътимоднокӣ, миқёспазирӣ ва устувориро барои виртуализатсияи контейнер таъмин мекунад. Ҷон Арундел ва Ҷастин Домингус дар бораи экосистемаи Кубернетес сӯҳбат мекунанд ва роҳҳои ҳалли собитшударо барои мушкилоти рӯзмарра муаррифӣ мекунанд. Қадам ба қадам, шумо барномаи абрии худро эҷод мекунед ва инфрасохторро барои дастгирии он эҷод мекунед, муҳити рушд ва лӯлаи густариши доимиро таъсис медиҳед, ки ҳангоми кор дар барномаҳои навбатии худ ба шумо кӯмак мекунад.

• Бо контейнерҳо ва Кубернетҳо аз асосҳо оғоз кунед: барои омӯхтани мавзӯъ таҷрибаи махсус лозим нест. • Кластерҳои шахсии худро идора кунед ё хидмати идорашавандаи Kubernetes аз Amazon, Google ва ғайраро интихоб кунед. • Барои идоракунии давраи ҳаёти контейнер ва истеъмоли захираҳо аз Kubernetes истифода баред. • Беҳтар кардани кластерҳо дар асоси арзиш, иҷро, устуворӣ, қудрат ва миқёспазирӣ. • Беҳтарин абзорҳоро барои таҳия, озмоиш ва ҷойгиркунии замимаҳои худ омӯзед. • Барои таъмини амният ва назорат аз таҷрибаҳои ҷории саноат истифода баред. • Принсипҳои DevOps-ро дар тамоми ширкати худ татбиқ кунед, то гурӯҳҳои таҳиякунанда тавонанд чандиртар, зуд ва муассиртар амал кунанд.

Китоб барои кӣ аст?

Китоб барои кормандони шӯъбаҳои маъмурие, ки барои серверҳо, барномаҳо ва хидматҳо масъуланд, инчунин барои таҳиягароне, ки дар сохтани хидматҳои нави абрӣ ё интиқоли замимаҳои мавҷуда ба Kubernetes ва абр машғуланд, бештар мувофиқ аст. Парво накунед, ба шумо лозим нест, ки чӣ гуна кор кардан бо Kubernetes ё контейнерҳоро бидонед - мо ба шумо ҳама чизро таълим медиҳем.

Корбарони ботаҷрибаи Kubernetes инчунин бо фарогирии амиқи мавзӯъҳо ба монанди RBAC, густариши пайваста, идоракунии ҳассос маълумот ва мушоҳида арзиши зиёде хоҳанд ёфт. Умедворем, ки дар саҳифаҳои китоб ҳатман чизе барои шумо ҷолиб хоҳад буд, сарфи назар аз малака ва таҷрибаи шумо.

Китоб ба кадом саволҳо ҷавоб медиҳад?

Ҳангоми банақшагирӣ ва навиштани китоб, мо технологияи абрӣ ва Кубернетесро бо садҳо нафар муҳокима кардем, бо пешвоёни соҳа ва коршиносон ва инчунин навгониҳои мукаммал сӯҳбат кардем. Дар зер саволҳои интихобшуда мавҷуданд, ки онҳо мехоҳанд дар ин нашрия ҷавоб гиранд.

  • «Ман ба он таваҷҷӯҳ дорам, ки чаро шумо бояд ба ин технология вақт сарф кунед. Он ба ман ва дастаи ман дар ҳалли кадом мушкилот кӯмак мекунад? ”
  • "Кубернетес ҷолиб ба назар мерасад, аммо барои ворид шудан монеаи хеле баланд дорад. Омода кардани як мисоли оддӣ душвор нест, аммо маъмурият ва ислоҳи минбаъдаи он даҳшатовар аст. Мо мехоҳем маслиҳати боэътимод гирем, ки одамон кластерҳои Kubernetes-ро дар ҷаҳони воқеӣ чӣ гуна идора мекунанд ва мо бо кадом мушкилот дучор мешавем."
  • “Маслиҳати субъективӣ муфид хоҳад буд. Экосистемаи Kubernetes ба дастаҳои нав имкон медиҳад, ки аз онҳо интихоб кунанд. Вақте ки якчанд роҳҳо барои як кор вуҷуд доранд, шумо аз куҷо медонед, ки кадомаш беҳтар аст? Чӣ тавр интихоб кардан мумкин аст?

Ва шояд аз ҳама муҳимтарин саволҳо:

  • "Чӣ гуна ман метавонам Kubernetes-ро бидуни халалдор кардани ширкати худ истифода кунам?"

Иқтибос. Конфигуратсия ва объектҳои махфӣ

Қобилияти ҷудо кардани мантиқи барномаи Kubernetes аз конфигуратсияи он (яъне аз ҳама арзишҳо ё танзимоте, ки бо мурури замон метавонанд тағир ёбанд) хеле муфид аст. Қиматҳои конфигуратсия одатан танзимоти муҳити зист, суроғаҳои хидматрасонии DNS-и тарафи сеюм ва эътимодномаҳои аутентификатсияро дар бар мегиранд.

Албатта, хамаи инро бевосита ба код гузоштан мумкин аст, аммо ин равиш ба кадри кифоя чандир нест. Масалан, тағир додани арзиши конфигуратсия пас аз шумо талаб мекунад, ки рамзи худро дубора сохта ва ҷойгир кунед. Як ҳалли хеле беҳтар аст, ки конфигуратсияро аз код ҷудо кунед ва онро аз файл ё тағирёбандаҳои муҳити зист хонед.

Kubernetes якчанд роҳҳои гуногуни идоракунии конфигуратсияро пешниҳод мекунад. Аввалан, шумо метавонед арзишҳоро ба барнома тавассути тағирёбандаҳои муҳите, ки дар мушаххасоти сарпӯши папка нишон дода шудаанд, интиқол диҳед (ниг. "Тағйирёбандаҳои муҳити зист" дар саҳифаи 192). Дуюм, маълумоти конфигуратсияро метавон мустақиман дар Kubernetes бо истифода аз объектҳои ConfigMap ва Secret нигоҳ дошт.

Дар ин боб мо ин объектҳоро ба таври муфассал таҳқиқ мекунем ва баъзе равишҳои амалии идоракунии конфигуратсия ва додаҳои ҳассосро бо истифода аз барномаи намоишӣ дида мебароем.

Ҳангоми тағир додани конфигуратсия навсозии снарядҳои pod

Тасаввур кунед, ки шумо дар кластери худ ҷойгиркунӣ доред ва шумо мехоҳед баъзе арзишҳоро дар ConfigMap-и он тағир диҳед. Агар шумо диаграммаи Helm-ро истифода баред (ниг. "Helm: Менеҷери бастаҳо барои Kubernetes" дар саҳифаи 102), шумо метавонед ба таври худкор тағироти конфигуратсияро ошкор кунед ва снарядҳои подшипникҳои худро бо як ҳиллаи зебо дубора бор кунед. Ба тавсифи густариши худ тавзеҳи зеринро илова кунед:

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

Шаблони ҷойгиркунӣ ҳоло маблағи назоратии параметрҳои конфигуратсияро дар бар мегирад: агар параметрҳо тағир дода шаванд, ҷамъ навсозӣ мешавад. Агар шумо навсозии чархро иҷро кунед, Helm муайян мекунад, ки мушаххасоти ҷойгиркунӣ тағир ёфтааст ва ҳама снарядҳои подкро аз нав оғоз мекунад.

Маълумоти ҳассос дар Kubernetes

Мо аллакай медонем, ки объекти ConfigMap механизми чандирро барои нигоҳдорӣ ва дастрасии маълумоти конфигуратсия дар кластер таъмин мекунад. Аммо, аксари барномаҳо дорои маълумоти ҳассос ва ҳассос мебошанд, ба монанди паролҳо ё калидҳои API. Онро инчунин дар ConfigMap нигоҳ доштан мумкин аст, аммо ин ҳалли беҳтарин нест.

Ба ҷои ин, Кубернетес як навъи махсуси объектеро пешниҳод мекунад, ки барои нигоҳ доштани маълумоти ҳассос пешбинӣ шудааст: Сир. Минбаъд, биёед мисолеро бубинем, ки чӣ тавр ин объектро дар барномаи намоишии мо истифода бурдан мумкин аст.

Барои оғоз кардан, ба манифести Кубернетес барои объекти Махфӣ нигаред (ниг. hello-secret-env/k8s/secret.yaml):

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

Дар ин мисол калиди хусусии magicWord xyzzy аст (en.wikipedia.org/wiki/Xyzzy_(computing)). Калимаи 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-и анбори намоишӣ ҷойгир аст.

Барои пайваст кардани Secret ҳамчун файл, мо густариши зеринро истифода мебарем:

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 дар ин ҷузвдон як файлро барои ҳар як ҷуфти калид/арзише, ки дар объекти Secret муайян шудааст, эҷод мекунад.

Дар мисоли мо, мо танҳо як ҷуфти калид-арзишро бо номи 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 навъи Opaque мебошанд, ки маънои мундариҷаи онҳо дар kubectl тавсифи баромад, сабтҳои журнал ё терминал нишон дода намешавад, ки тасодуфан ошкор кардани маълумоти ҳассосро ғайриимкон месозад.

Барои дидани версияи рамзшудаи YAML маълумоти ҳассос, фармони kubectl get -ро истифода баред:

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

пойгоҳи64

eHl6enk=, аз арзиши аслии мо комилан фарқ мекунад? Ин воқеан як объекти махфӣ аст, ки дар рамзгузории base64 муаррифӣ шудааст. Base64 схема барои рамзгузории додаҳои бинарии худсарона ҳамчун сатри аломатҳо мебошад.

Азбаски иттилооти ҳассос метавонад дуӣ бошад ва бароварда нашавад (ба монанди калиди рамзгузории TLS), объектҳои махфӣ ҳамеша дар формати base64 нигоҳ дошта мешаванд.

Матни beHl6enk= нусхаи рамзгузоришудаи base64-и калимаи махфии xyzzy мост. Шумо метавонед инро тавассути иҷро кардани фармони base64 —decode дар терминал тафтиш кунед:

echo "eHl6enk=" | base64 --decode
xyzzy

Ҳамин тавр, дар ҳоле ки Kubernetes шуморо аз тасодуфан баровардани маълумоти ҳассос дар терминал ё файлҳои журнал муҳофизат мекунад, агар шумо иҷозати хондани объектҳои махфӣ дар фазои ном дошта бошед, он маълумот метавонад асоснок карда шавад ва баъдан рамзкушо карда шавад.

Агар ба шумо лозим ояд, ки base64 баъзе матнҳоро рамзгузорӣ кунед (масалан, барои гузоштани он дар Сирри), фармони base64-ро бидуни далел истифода баред:

echo xyzzy | base64
eHl6enkK

Дастрасӣ ба объектҳои махфӣ

Кӣ метавонад объектҳои махфиро хонда ва таҳрир кунад? Ин аз ҷониби RBAC, як механизми назорати дастрасӣ муайян карда мешавад (мо онро дар зербахши "Муқаддима ба назорати нақш дар асоси нақш" дар саҳифаи 258 муфассал баррасӣ хоҳем кард). Агар шумо кластереро иҷро кунед, ки RBAC надорад ё фаъол нест, ҳама объектҳои махфии шумо барои ҳама корбарон ва контейнерҳо дастрасанд (мо дертар мефаҳмонем, ки шумо набояд ягон кластерҳои истеҳсолиро бидуни RBAC дошта бошед).

Рамзгузории пассивии маълумот

Дар бораи онҳое, ки ба пойгоҳи додаҳои etcd дастрасӣ доранд, ки дар он Kubernetes тамоми маълумоти онро нигоҳ медорад, чӣ гуфтан мумкин аст? Оё онҳо метавонанд маълумоти ҳассосро бидуни иҷозати хондани объектҳои махфӣ тавассути API хонанд?

Аз версияи 1.7, Kubernetes рамзгузории ғайрифаъоли маълумотро дастгирӣ мекунад. Ин маънои онро дорад, ки маълумоти ҳассос дар дохили etcd дар диск рамзкунонидашуда нигоҳ дошта мешавад ва ҳатто аз ҷониби онҳое, ки ба пойгоҳи додаҳо дастрасии мустақим доранд, хонда наметавонанд. Барои рамзкушоӣ кардани он, ба шумо калид лозим аст, ки танҳо сервери API Kubernetes дорад. Дар кластери дуруст танзимшуда, рамзгузории ғайрифаъол бояд фаъол карда шавад.

Шумо метавонед тафтиш кунед, ки оё рамзгузории ғайрифаъол дар кластери шумо ин тавр кор мекунад:

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% тахфиф бо истифода аз купон - Кубернитель

Ҳангоми пардохти версияи коғазии китоб, китоби электронӣ тавассути почтаи электронӣ фиристода мешавад.

Манбаъ: will.com

Илова Эзоҳ