GitOps: Муқоисаи усулҳои кашидан ва тела

Шарҳ. тарҷума.: Дар ҷомеаи Кубернетес, тамоюл бо номи GitOps маъруфияти возеҳ пайдо мекунад, тавре ки мо шахсан дидем, ташриф овардан KubeCon Europe 2019. Ин истилоҳ нисбатан нав буд coined аз ҷониби роҳбари Weaveworks - Алексис Ричардсон - ва маънои истифодаи асбобҳои ба таҳиягарон шинос (пеш аз ҳама Git, аз ин рӯ номи) барои ҳалли мушкилоти амалиётӣ. Аз ҷумла, мо дар бораи кори Kubernetes тавассути нигоҳ доштани конфигуратсияҳои он дар Git ва ба таври худкор ворид кардани тағирот ба кластер сухан меронем. Маттиас Ҷг дар ин мақола дар бораи ду равиш ба ин паҳнкунӣ сӯҳбат мекунад.

GitOps: Муқоисаи усулҳои кашидан ва тела

Соли гузашта (дар асл, ин расман дар моҳи августи соли 2017 рух дод - тақрибан тарҷума.) Равиши нав барои ҷойгиркунии барномаҳо дар Kubernetes вуҷуд дорад. Он GitOps номида мешавад ва он ба идеяи асосӣ асос ёфтааст, ки версияҳои ҷойгиркунӣ дар муҳити амни анбори Git пайгирӣ карда мешаванд.

Афзалиятҳои асосии ин усул инҳоянд::

  1. Варианти ҷойгиркунӣ ва таърихи тағирот. Ҳолати тамоми кластер дар анбори Git нигоҳ дошта мешавад ва ҷойгиркунӣ танҳо тавассути супоришҳо нав карда мешавад. Илова бар ин, ҳама тағиротро метавон бо истифода аз таърихи содирот пайгирӣ кард.
  2. Бозгаштҳо бо истифода аз фармонҳои Git шинос. Содда git reset ба шумо имкон медиҳад, ки тағиротро дар ҷойгиркунӣ барқарор кунед; давлатҳои гузашта ҳамеша дастрас мебошанд.
  3. Назорати дастрасии омода. Одатан, системаи Git дорои маълумоти зиёди ҳассос аст, аз ин рӯ аксари ширкатҳо ба ҳифзи он диққати махсус медиҳанд. Мутаносибан, ин муҳофизат ба амалиётҳо бо ҷойгиркунӣ низ дахл дорад.
  4. Сиёсати ҷойгиркунӣ. Аксари системаҳои Git аслан сиёсатҳои филиал ба филиалро дастгирӣ мекунанд - масалан, танҳо дархостҳои ҷалб метавонанд устодро навсозӣ кунанд ва тағиротҳо бояд аз ҷониби аъзои дигари даста баррасӣ ва қабул карда шаванд. Мисли назорати дастрасӣ, ҳамон сиёсатҳо нисбати навсозиҳои густариш татбиқ мешаванд.

Тавре ки шумо мебинед, усули GitOps манфиатҳои зиёд дорад. Дар давоми як соли охир, ду равиш маъруфияти махсус пайдо карданд. Яке ба фишор асос ёфтааст, дигаре ба кашидан. Пеш аз он ки мо ба онҳо назар кунем, биёед аввал бубинем, ки ҷойгиркунии маъмулии Kubernetes чӣ гуна аст.

Усулҳои ҷойгиркунӣ

Дар солҳои охир, Кубернетес усулҳо ва воситаҳои гуногунро барои ҷойгиркунӣ таъсис додааст:

  1. Дар асоси қолибҳои аслии Kubernetes/Kustomize. Ин роҳи осонтарини ҷойгиркунии барномаҳо дар Kubernetes аст. Таҳиягар файлҳои асосии YAML-ро эҷод мекунад ва онҳоро татбиқ мекунад. Барои халос шудан аз дубора навиштани ҳамон қолабҳо, Kustomize таҳия шудааст (он қолибҳои Kubernetes-ро ба модулҳо табдил медиҳад). Шарҳ. тарҷума.: Kustomize ба kubectl бо ҳамгиро карда шудааст Нашри Kubernetes 1.14.
  2. Диаграммаҳои Helm. Диаграммаҳои чарх ба шумо имкон медиҳанд, ки маҷмӯи қолибҳо, контейнерҳои ибтидоӣ, паҳлӯҳо ва ғайра эҷод кунед, ки барои ҷойгиркунии барномаҳо бо имконоти мутобиқсозии фасеҳтар нисбат ба равиши ба қолаб асосёфта истифода мешаванд. Ин усул ба файлҳои YAML-и қолабӣ асос ёфтааст. Helm онҳоро бо параметрҳои гуногун пур мекунад ва сипас онҳоро ба Tiller мефиристад, як ҷузъи кластер, ки онҳоро дар кластер ҷойгир мекунад ва имкон медиҳад навсозӣ ва бозгашт. Муҳим он аст, ки Helm аслан танҳо арзишҳои дилхоҳро ба қолибҳо дохил мекунад ва сипас онҳоро ба ҳамон тарзе татбиқ мекунад, ки он дар равиши анъанавӣ анҷом дода мешавад. (дар бораи он ки чӣ тавр ҳама кор мекунад ва чӣ тавр шумо метавонед онро дар мо истифода баред, бештар хонед мақолаи Ҳелм - тахминан. тарҷума.). Диаграммаҳои гуногуни тайёри Helm мавҷуданд, ки доираи васеи вазифаҳоро дар бар мегиранд.
  3. Воситаҳои алтернативӣ. Бисёр воситаҳои алтернативӣ вуҷуд доранд. Он чизе, ки ҳамаи онҳо доранд, дар он аст, ки онҳо баъзе файлҳои қолабиро ба файлҳои YAML-хондашавандаи Kubernetes табдил медиҳанд ва сипас онҳоро истифода мебаранд.

Дар кори худ, мо пайваста диаграммаҳои Helm-ро барои абзорҳои муҳим истифода мебарем (зеро онҳо аллакай чизҳои зиёде доранд, ки ҳаётро осонтар мекунанд) ва файлҳои "тоза" Kubernetes YAML -ро барои ҷойгиркунии замимаҳои худамон истифода мебарем.

Кашидан ва тела додан

Дар яке аз паёмҳои блоги охирини худ, ман асбобро муаррифӣ кардам Weave Flux. Таҷрибаи ман нишон медиҳад, ки ин асбоб яке аз воситаҳои асосии пешбурди равиши кашидан аст, бинобар ин ман аксар вақт ба он муроҷиат мекунам. Агар шумо хоҳед, ки дар бораи чӣ гуна истифода бурдани он маълумоти бештар гиред, дар ин ҷо пайванд ба мақола.

НБ! Ҳама бартариҳои истифодаи GitOps барои ҳарду равиш яксон боқӣ мемонанд.

Муносибати кашидан

GitOps: Муқоисаи усулҳои кашидан ва тела

Равиши ҷалб ба он асос ёфтааст, ки ҳама тағиротҳо аз дохили кластер татбиқ карда мешаванд. Дар дохили кластер операторе мавҷуд аст, ки репозиторийҳои алоқаманди Git ва Docker Registry-ро мунтазам тафтиш мекунад. Агар дар онҳо ягон тағйирот ба амал ояд, ҳолати кластер ба таври дохилӣ нав карда мешавад. Ин раванд одатан хеле бехатар ҳисобида мешавад, зеро ҳеҷ як муштарии беруна ба ҳуқуқҳои администратори кластер дастрасӣ надорад.

Тарафдор:

  1. Ягон муштарии беруна ҳуқуқ надорад ба кластер тағирот ворид кунад; ҳама навсозиҳо аз дохили он бароварда мешаванд.
  2. Баъзе асбобҳо инчунин ба шумо имкон медиҳанд, ки навсозиҳои диаграммаи Helm-ро ҳамоҳанг созед ва онҳоро ба кластер пайваст кунед.
  3. Реестри Docker метавонад барои версияҳои нав скан карда шавад. Агар тасвири нав дастрас бошад, анбори Git ва ҷойгиркунӣ ба версияи нав нав карда мешавад.
  4. Воситаҳои кашидан мумкин аст дар фазои номҳои гуногун бо анборҳо ва иҷозатҳои гуногуни Git паҳн карда шаванд. Ба шарофати ин, модели бисёрсоҳавӣ метавонад истифода шавад. Масалан, дастаи А метавонад фазои номи A-ро истифода барад, гурӯҳи B метавонад фазои номи В-ро истифода барад ва дастаи инфрасохтор фазои глобалиро истифода барад.
  5. Чун қоида, асбобҳо хеле сабуканд.
  6. Якҷоя бо асбобҳо ба монанди оператор Асрори мӯҳршудаи Bitnami, сиррҳо метавонанд дар анбори Git рамзкунонидашуда нигоҳ дошта шаванд ва дар дохили кластер барқарор карда шаванд.
  7. Ба қубурҳои CD пайваст нест, зеро ҷойгиркунӣ дар дохили кластер сурат мегирад.

Минусы:

  1. Идоракунии сирри ҷобаҷогузорӣ аз диаграммаҳои Helm нисбат ба сирри муқаррарӣ мушкилтар аст, зеро онҳо бояд аввал дар шакли, масалан, сирри мӯҳршуда тавлид шаванд, сипас аз ҷониби оператори дохилӣ рамзкушоӣ карда шаванд ва танҳо пас аз он онҳо ба асбоби кашидан дастрас мешаванд. Пас шумо метавонед барориши онро дар Helm бо арзишҳои сирри аллакай ҷойгиршуда иҷро кунед. Роҳи осонтарини эҷод кардани сир бо тамоми арзишҳои Helm, ки барои ҷойгиркунӣ истифода мешаванд, рамзкушоӣ кардани он ва ба Git супурдан аст.
  2. Ҳангоме ки шумо равиши кашиданро мегиред, шумо ба асбобҳои кашидан баста мешавед. Ин қобилияти танзим кардани раванди ҷойгиркунӣ дар кластерро маҳдуд мекунад. Масалан, Kustomize аз он сабаб мураккаб аст, ки он бояд пеш аз он ки қолабҳои ниҳоӣ ба Git ворид карда шаванд, кор кунанд. Ман намегӯям, ки шумо асбобҳои мустақилро истифода бурда наметавонед, аммо онҳо ба раванди ҷойгиркунии шумо ҳамгироӣ кардан душвортаранд.

Муносибати ба фишор асосёфта

GitOps: Муқоисаи усулҳои кашидан ва тела

Дар равиши push, системаи беруна (асосан қубурҳои CD) ҷойгиркуниро ба кластер пас аз ӯҳдадорӣ ба анбори Git оғоз мекунад ё агар лӯлаи қаблии CI муваффақ бошад. Дар ин равиш, система ба кластер дастрасӣ дорад.

Плюсы:

  1. Амният аз ҷониби анбори Git муайян карда мешавад ва лӯлаи бунёд.
  2. Ҷойгиркунии диаграммаҳои Helm осонтар аст ва плагинҳои Helm-ро дастгирӣ мекунад.
  3. Идоракунии асрор осонтар аст, зеро асрорро дар қубурҳо истифода бурдан мумкин аст ва инчунин метавонанд дар Git рамзкунонидашуда нигоҳ дошта шаванд (вобаста ба афзалиятҳои корбар).
  4. Ҳеҷ гуна пайвастшавӣ ба асбоби мушаххас вуҷуд надорад, зеро ҳама намуди онро истифода бурдан мумкин аст.
  5. Навсозии версияи контейнерро тавассути лӯлаи сохтмон оғоз кардан мумкин аст.

Минусы:

  1. Маълумоти дастрасии кластер дар дохили системаи сохтанист.
  2. Навсозии контейнерҳои ҷойгиркунӣ бо раванди кашидан осонтар аст.
  3. Вобастагии шадид аз системаи CD, зеро қубурҳое, ки ба мо лозиманд, шояд дар ибтидо барои Gitlab Runners навишта шуда бошанд ва баъд даста тасмим гирифт, ки ба Azure DevOps ё Ҷенкинс гузарад... ва бояд миқдори зиёди қубурҳои сохтмонро интиқол диҳад.

Натиҷаҳо: тела ё кашед?

Тавре ки маъмул аст, ҳар як равиш ҷиҳатҳои мусбат ва манфии худро дорад. Баъзе вазифаҳоро бо як вазифа иҷро кардан осонтар ва бо дигараш душвортар аст. Дар аввал ман ҷойгиркуниро дастӣ мекардам, аммо пас аз он ки ман чанд мақола дар бораи Weave Flux пайдо кардам, ман тасмим гирифтам, ки равандҳои GitOps-ро барои ҳама лоиҳаҳо татбиқ кунам. Барои қолибҳои асосӣ ин осон буд, аммо баъд ман бо диаграммаҳои Helm ба мушкилот дучор шудам. Он вақт Weave Flux танҳо як версияи оддии Оператори Helm Chart-ро пешниҳод мекард, аммо ҳоло ҳам баъзе вазифаҳо аз сабаби зарурати эҷоди дастӣ ва татбиқи онҳо мушкилтаранд. Шумо метавонед баҳс кунед, ки равиши кашидан хеле амнтар аст, зеро маълумоти эътимоднокии кластер берун аз кластер дастрас нест ва онро хеле бехатартар мекунад, ки он ба саъю кӯшиши иловагӣ меарзад.

Пас аз каме андеша ронда, ман ба хулосаи ғайричашмдошт омадам, ки ин тавр нест. Агар мо дар бораи ҷузъҳое сухан ронем, ки муҳофизати ҳадди аксарро талаб мекунанд, ин рӯйхат нигоҳдории махфӣ, системаҳои CI/CD ва анбори Git-ро дар бар мегирад. Маълумот дар дохили онҳо хеле осебпазир аст ва ба муҳофизати ҳадди аксар ниёз дорад. Илова бар ин, агар касе ба анбори Git-и шумо ворид шавад ва кодро ба он ҷо тела диҳад, онҳо метавонанд ҳар чизеро, ки мехоҳанд, ҷойгир кунанд (хоҳ кашидан ё тела) ва ба системаҳои кластер ворид шаванд. Ҳамин тариқ, муҳимтарин ҷузъҳое, ки бояд ҳифз карда шаванд, анбори Git ва системаҳои CI/CD мебошанд, на маълумотҳои кластер. Агар шумо барои ин намуди системаҳо сиёсатҳо ва назорати бехатарии хуб танзимшуда дошта бошед ва маълумоти кластер танҳо дар қубурҳо ҳамчун махфӣ истихроҷ карда шаванд, амнияти иловагии равиши кашидан метавонад он қадар арзишманд набошад, ки дар аввал фикр мекард.

Пас, агар равиши кашолакунӣ меҳнатталабтар бошад ва фоидаи амниятӣ надиҳад, оё истифодаи танҳо равиши такя ба мантиқӣ нест? Аммо касе метавонад баҳс кунад, ки шумо дар равиши фишор ба системаи CD аз ҳад зиёд вобастаед ва эҳтимолан беҳтар аст, ки ин корро накунед, то дар оянда муҳоҷират осонтар шавад.

Ба андешаи ман (чун ҳамеша), шумо бояд он чизеро, ки барои як парванда ё комбайн мувофиқтар аст, истифода баред. Шахсан ман ҳарду равишро истифода мебарам: Weave Flux барои ҷобаҷогузории ба кашиш асосёфта, ки асосан хидматҳои шахсии моро дар бар мегирад ва равиши push бо Helm ва плагинҳо, ки татбиқи диаграммаҳои Helm-ро ба кластер осон мекунад ва ба шумо имкон медиҳад, ки асрори бефосила эҷод кунед. Ман фикр мекунам, ки ҳеҷ гоҳ ҳалли ягонаи мувофиқ барои ҳама ҳолатҳо вуҷуд надорад, зеро ҳамеша нозукиҳои зиёде мавҷуданд ва онҳо аз барномаи мушаххас вобастаанд. Гуфта мешавад, ман GitOps-ро хеле тавсия медиҳам - он ҳаётро хеле осон мекунад ва амниятро беҳтар мекунад.

Ман умедворам, ки таҷрибаи ман дар ин мавзӯъ ба шумо кӯмак мекунад, ки кадом усул барои намуди ҷойгиркунии шумо мувофиқтар аст ва ман аз шунидани андешаи шумо шод хоҳам шуд.

PS Эзоҳ аз тарҷумон

Камбудии модели кашидан дар он аст, ки гузоштани манифестҳои додашуда ба Git душвор аст, аммо ҳеҷ нуқсоне вуҷуд надорад, ки лӯлаи CD дар модели кашидашуда аз паҳншавӣ ҷудо зиндагӣ мекунад ва аслан ба лӯлаи категория табдил меёбад. Муроҷиати доимӣ. Аз ин рӯ, барои ҷамъоварии мақоми онҳо аз ҳама ҷобаҷогузорӣ ва ба гунае дастрасӣ ба гузоришҳо/мақом, беҳтараш бо истинод ба системаи CD таъмин кардани онҳо, кӯшиши боз ҳам бештар лозим мешавад.

Ба ин маъно, модели push ба мо имкон медиҳад, ки ҳадди аққал баъзе кафолатҳои интиқолро таъмин кунем, зеро мӯҳлати истифодаи лӯла метавонад ба мӯҳлати коркард баробар карда шавад.

Мо ҳарду моделро санҷида, ба як хулоса омадем, ки муаллифи мақола:

  1. Модели кашидан барои мо барои ташкили навсозии ҷузъҳои система дар шумораи зиёди кластерҳо мувофиқ аст (ниг. мақола дар бораи addon-operator).
  2. Модели push дар асоси GitLab CI барои паҳн кардани барномаҳо бо истифода аз диаграммаҳои Helm мувофиқ аст. Ҳамзамон, бо истифода аз асбоб ҷараёни ҷойгиркунӣ дар дохили қубурҳо назорат карда мешавад верф. Воқеан, дар заминаи ин лоиҳаи мо, вақте ки мо дар стенди худ дар KubeCon Europe'19 масъалаҳои мубрами муҳандисони DevOps-ро муҳокима кардем, мо "GitOps"-и доимиро шунидем.

PPS аз тарҷумон

Инчунин дар блоги мо хонед:

Танҳо корбарони сабтиномшуда метавонанд дар пурсиш иштирок кунанд. даромад, Лутфан.

Оё шумо GitOps-ро истифода мебаред?

  • Бале, равиш кашед

  • Ҳа, тела

  • Бале, кашед + тела кунед

  • Бале, чизи дигар

  • нест

30 корбар овоз доданд. 10 корбар худдорӣ карданд.

Манбаъ: will.com

Илова Эзоҳ