3-ọna dapọ si werf: imuṣiṣẹ si Kubernetes pẹlu Helm "lori awọn sitẹriọdu"

Ohun ti a (ati kii ṣe awa nikan) ti n duro de igba pipẹ ṣẹlẹ: werf, IwUlO Orisun Ṣii wa fun awọn ohun elo ile ati jiṣẹ wọn si Kubernetes, ni bayi ṣe atilẹyin lilo awọn ayipada nipa lilo awọn abulẹ idapọ-ọna 3-ọna! Ni afikun si eyi, o ṣee ṣe lati gba awọn orisun K8s ti o wa tẹlẹ sinu awọn idasilẹ Helm laisi atunṣe awọn orisun wọnyi.

3-ọna dapọ si werf: imuṣiṣẹ si Kubernetes pẹlu Helm "lori awọn sitẹriọdu"

Ti o ba kuru pupọ, lẹhinna a fi WERF_THREE_WAY_MERGE=enabled - a gba imuṣiṣẹ “bi ninu kubectl apply", ni ibamu pẹlu awọn fifi sori Helm 2 ti o wa tẹlẹ ati paapaa diẹ sii.

Ṣugbọn jẹ ki a bẹrẹ pẹlu imọran: kini gangan awọn abulẹ ọna-ọna-ọna 3-ọna, bawo ni awọn eniyan ṣe wa pẹlu ọna lati ṣe ipilẹṣẹ wọn, ati kilode ti wọn ṣe pataki ni awọn ilana CI / CD pẹlu awọn amayederun orisun Kubernetes? Ati lẹhin naa, jẹ ki a wo kini ọna-ọna-ọna 3 wa ni werf, awọn ipo wo ni a lo nipasẹ aiyipada ati bii o ṣe le ṣakoso rẹ.

Kini alemo-ipapọ-ọna mẹta?

Nitorinaa, jẹ ki a bẹrẹ pẹlu iṣẹ ṣiṣe ti yiyi awọn orisun ti a ṣalaye ninu awọn ifihan YAML sinu Kubernetes.

Lati ṣiṣẹ pẹlu awọn orisun, Kubernetes API nfunni awọn iṣẹ ipilẹ wọnyi: ṣẹda, patch, ropo ati paarẹ. O ti ro pe pẹlu iranlọwọ wọn o jẹ dandan lati ṣe agbero irọrun lilọsiwaju ti awọn orisun si iṣupọ naa. Bawo?

Awọn pipaṣẹ kubectl pataki

Ọna akọkọ lati ṣakoso awọn nkan ni Kubernetes ni lati lo awọn aṣẹ pataki kubectl lati ṣẹda, yipada, ati paarẹ awọn nkan yẹn. Nikan fi:

  • egbe kubectl run o le ṣiṣẹ Ifiranṣẹ tabi Iṣẹ:
    kubectl run --generator=deployment/apps.v1 DEPLOYMENT_NAME --image=IMAGE
  • egbe kubectl scale - yi nọmba awọn ẹda pada:
    kubectl scale --replicas=3 deployment/mysql
  • ati bẹbẹ lọ.

Ọna yii le dabi irọrun ni wiwo akọkọ. Sibẹsibẹ awọn iṣoro wa:

  1. O le adaṣe.
  2. Bawo ni afihan iṣeto ni ni Git? Bawo ni lati ṣe ayẹwo awọn ayipada ti o ṣẹlẹ si iṣupọ?
  3. Bawo ni lati pese reproducibility atunto lori tun bi?
  4. ...

O han gbangba pe ọna yii ko baamu daradara pẹlu fifipamọ ohun elo ati awọn amayederun bi koodu (IaC; tabi paapaa GitOps bi aṣayan igbalode diẹ sii, gbigba olokiki ni ilolupo Kubernetes). Nitorinaa, awọn aṣẹ wọnyi ko gba idagbasoke siwaju ni kubectl.

Ṣẹda, gba, rọpo ati paarẹ awọn iṣẹ ṣiṣe

Pẹlu akọkọ ẹda o rọrun: firanṣẹ farahan si iṣẹ naa create kube api ati awọn oluşewadi ti a ti da. Aṣoju YAML ti iṣafihan le wa ni ipamọ ni Git ati ṣẹda nipa lilo aṣẹ naa kubectl create -f manifest.yaml.

С yiyọ tun rọrun: aropo kanna manifest.yaml lati Git si ẹgbẹ kubectl delete -f manifest.yaml.

Isẹ replace gba ọ laaye lati rọpo atunto orisun patapata pẹlu ọkan tuntun, laisi atunda orisun naa. Eyi tumọ si pe ṣaaju ṣiṣe iyipada si orisun kan, o jẹ ọgbọn lati beere ẹya lọwọlọwọ pẹlu iṣẹ naa get, yi pada ki o ṣe imudojuiwọn pẹlu iṣẹ naa replace. kube apiserver ti wa ni itumọ ti ni ireti titii ati, ti o ba lẹhin abẹ get nkan naa ti yipada, lẹhinna iṣẹ naa replace kii yoo ṣiṣẹ.

Lati tọju iṣeto ni Git ati mu dojuiwọn nipa lilo rọpo, o nilo lati ṣe iṣẹ naa get, dapọ atunto lati Git pẹlu ohun ti a gba, ati ṣiṣẹ replace. Nipa aiyipada, kubectl nikan gba ọ laaye lati lo aṣẹ naa kubectl replace -f manifest.yamlnibo manifest.yaml - ifihan ti o ti pese tẹlẹ ni kikun (ninu ọran wa, ti dapọ) ti o nilo lati fi sori ẹrọ. O wa ni jade pe olumulo nilo lati ṣe imuṣepọ awọn iṣafihan, ati pe eyi kii ṣe ọrọ bintin…

O ti wa ni tun ye ki a kiyesi wipe biotilejepe manifest.yaml ati pe o wa ni ipamọ ni Git, a ko le mọ tẹlẹ boya o jẹ dandan lati ṣẹda ohun kan tabi ṣe imudojuiwọn rẹ - eyi gbọdọ ṣee ṣe nipasẹ sọfitiwia olumulo.

Lapapọ: a le kọ kan lemọlemọfún rollout lilo nikan ṣẹda, ropo ati paarẹ, aridaju wipe awọn amayederun iṣeto ni Git pẹlú pẹlu awọn koodu ati ki o rọrun CI/CD?

Ni opo, a le... Fun eyi iwọ yoo nilo lati ṣe imuse iṣẹ iṣọpọ manifestos ati diẹ ninu awọn iru abuda ti:

  • ṣayẹwo wiwa ohun kan ninu iṣupọ,
  • ṣe iṣelọpọ awọn orisun akọkọ,
  • imudojuiwọn tabi pa a.

Nigbati o ba n ṣe imudojuiwọn, jọwọ ṣe akiyesi pe awọn oluşewadi le ti yipada niwon kẹhin get ati mu ọran tiipa ireti mu laifọwọyi - ṣe awọn igbiyanju imudojuiwọn leralera.

Sibẹsibẹ, kilode ti o tun tun kẹkẹ pada nigbati kube-apiserver nfunni ni ọna miiran lati ṣe imudojuiwọn awọn orisun: iṣẹ naa patch, Ewo ni o ṣe iranlọwọ fun olumulo diẹ ninu awọn iṣoro ti a ṣalaye?

Patch

Bayi a lọ si awọn abereyo.

Awọn abulẹ jẹ ọna akọkọ lati lo awọn ayipada si awọn nkan ti o wa ni Kubernetes. Isẹ patch o ṣiṣẹ bi eleyi:

  • olumulo kube-apiserver nilo lati fi patch kan ranṣẹ ni fọọmu JSON ki o pato nkan naa,
  • ati apiserver funrararẹ yoo ṣe pẹlu ipo lọwọlọwọ ti nkan naa ki o mu wa si fọọmu ti a beere.

Titiipa ireti ko nilo ninu ọran yii. Iṣiṣẹ yii jẹ asọye diẹ sii ju rọpo, botilẹjẹpe ni akọkọ o le dabi ọna miiran ni ayika.

Ni ọna yii:

  • lilo ohun isẹ create a ṣẹda ohun kan ni ibamu si ifihan lati Git,
  • pẹlu iranlọwọ delete - paarẹ ti nkan naa ko ba nilo,
  • pẹlu iranlọwọ patch - a yi nkan naa pada, mu wa si fọọmu ti a ṣalaye ni Git.

Sibẹsibẹ, lati ṣe eyi, o nilo lati ṣẹda alemo ti o tọ!

Bawo ni abulẹ ṣiṣẹ ni Helm 2: 2-ọna-dapọ

Nigbati o ba kọkọ fi idasilẹ kan sori ẹrọ, Helm ṣe iṣẹ naa create fun chart oro.

Nigbati o ba n ṣe imudojuiwọn itusilẹ Helm fun orisun kọọkan:

  • ṣe akiyesi alemo laarin ẹya orisun lati inu chart ti tẹlẹ ati ẹya chart lọwọlọwọ,
  • kan yi alemo.

A yoo pe yi alemo 2-ọna àkópọ alemo, nitori 2 manifestos ni o wa lowo ninu awọn oniwe-ẹda:

  • ifihan orisun lati itusilẹ iṣaaju,
  • awọn oluşewadi farahan lati lọwọlọwọ awọn oluşewadi.

Nigba yiyọ isẹ delete ni kube apiserver ni a pe fun awọn orisun ti a kede ni itusilẹ iṣaaju, ṣugbọn kii ṣe ikede ni lọwọlọwọ.

Ọna 2 ọna patch patch ni iṣoro kan: o nyorisi kuro ni amuṣiṣẹpọ pẹlu ipo gidi ti orisun ni iṣupọ ati ifihan ni Git.

Apejuwe ti awọn isoro pẹlu ohun apẹẹrẹ

  • Ni Git, chart kan tọju iṣafihan kan ninu eyiti aaye naa image Awọn ọrọ imuṣiṣẹ ubuntu:18.04.
  • Olumulo nipasẹ kubectl edit yipada iye ti aaye yii si ubuntu:19.04.
  • Nigba ti tun-fi ran awọn Helm chart ko ṣe ina alemo, nitori oko image ni išaaju ti ikede awọn Tu ati ninu awọn ti isiyi chart ni o wa kanna.
  • Lẹhin ti tun-imuṣiṣẹ image ku ubuntu:19.04, biotilejepe awọn chart wí pé ubuntu:18.04.

A ni desynchronization ati ki o sọnu declarativeness.

Kini orisun amuṣiṣẹpọ?

Ni gbogbogbo sọrọ, pari Ko ṣee ṣe lati gba ibaamu kan laarin iṣafihan orisun ni iṣupọ nṣiṣẹ ati ifihan lati Git. Nitoripe ninu ifihan gidi kan le jẹ awọn alaye iṣẹ / awọn aami, awọn apoti afikun ati data miiran ti o ṣafikun ati yọkuro lati awọn orisun ni agbara nipasẹ diẹ ninu awọn oludari. A ko le ati pe a ko fẹ lati tọju data yii ni Git. Bibẹẹkọ, a fẹ ki awọn aaye ti a sọ ni gbangba ni Git lati mu awọn iye ti o yẹ lori yiyi.

O wa ni jade ki gbogboogbo amuṣiṣẹpọ awọn oluşewadi ofin: nigbati o ba n yi orisun kan jade, o le yipada tabi paarẹ awọn aaye wọnyẹn ti o jẹ pato ni pato ninu ifihan lati Git (tabi ti wa ni pato ninu ẹya ti tẹlẹ ati pe o ti paarẹ bayi).

3-ọna àkópọ alemo

Ero akọkọ 3-ọna àkópọ alemo: ṣe agbejade alemo laarin ẹya ti o kẹhin ti iṣafihan lati Git ati ẹya ibi-afẹde ti ifihan lati Git, ni akiyesi ẹya lọwọlọwọ ti ifihan lati inu iṣupọ nṣiṣẹ. Abajade alemo gbọdọ wa ni ibamu pẹlu ofin awọn orisun amuṣiṣẹpọ:

  • awọn aaye tuntun ti a ṣafikun si ẹya ibi-afẹde ni a ṣafikun nipa lilo alemo;
  • awọn aaye ti o wa tẹlẹ ninu ẹya ti a lo kẹhin ati pe ko wa ninu ẹya ibi-afẹde ni a tunto nipa lilo alemo kan;
  • awọn aaye ninu ẹya lọwọlọwọ ti ohun ti o yatọ si ẹya ibi-afẹde ti iṣafihan ti ni imudojuiwọn nipa lilo alemo.

O jẹ lori ilana yii ti o ṣe awọn abulẹ kubectl apply:

  • Ẹya ti o kẹhin ti iṣafihan ti wa ni ipamọ ninu asọye ti nkan naa funrararẹ,
  • ibi-afẹde - ti a mu lati faili YAML ti o pato,
  • eyi ti o wa lọwọlọwọ jẹ lati inu iṣupọ ti nṣiṣẹ.

Ni bayi ti a ti ṣeto ilana yii, o to akoko lati sọ fun ọ ohun ti a ṣe ni werf.

Lilo awọn ayipada si werf

Ni iṣaaju, werf, bii Helm 2, lo awọn abulẹ ọna-ọna meji-ọna.

Tunṣe alemo

Lati le yipada si iru awọn abulẹ tuntun - 3-way-merge - igbesẹ akọkọ ti a ṣafihan ohun ti a pe awọn abulẹ titunṣe.

Nigbati o ba n gbe lọ, a lo alemo ọna-ọna-ọna-ọna boṣewa 2, ṣugbọn werf ni afikun ṣe ipilẹṣẹ alemo kan ti yoo muuṣiṣẹpọ ipo gidi ti orisun pẹlu ohun ti a kọ sinu Git (iru alemo kan ni a ṣẹda pẹlu lilo ofin awọn orisun mimuuṣiṣẹpọ kanna ti salaye loke) .

Ti imuṣiṣẹpọ kan ba waye, ni opin imuṣiṣẹ olumulo gba IKILỌ kan pẹlu ifiranṣẹ ti o baamu ati alemo ti o gbọdọ lo lati mu awọn orisun wa si fọọmu amuṣiṣẹpọ. Yi alemo ti wa ni tun gba silẹ ni pataki kan akọsilẹ werf.io/repair-patch. O ti wa ni ro wipe awọn olumulo ká ọwọ сам ao lo patch yi: werf ko ni lo rara.

Ṣiṣẹda awọn abulẹ atunṣe jẹ iwọn igba diẹ ti o fun ọ laaye lati ṣe idanwo awọn ẹda ti awọn abulẹ ti o da lori ipilẹ ọna-ọna-ọna 3, ṣugbọn maṣe lo awọn abulẹ wọnyi laifọwọyi. Ni akoko yii, ipo iṣẹ yii ti ṣiṣẹ nipasẹ aiyipada.

3-ọna-patch alemo nikan fun awọn idasilẹ titun

Bibẹrẹ Oṣu kejila ọjọ 1, ọdun 2019, beta ati awọn ẹya alpha ti werf bẹrẹ aiyipada lo awọn abulẹ ọna-ọna-ọna 3 ni kikun lati lo awọn ayipada nikan si awọn idasilẹ Helm tuntun ti a yiyi nipasẹ werf. Awọn idasilẹ ti o wa tẹlẹ yoo tẹsiwaju lati lo ọna-ọna-ọna-ọna-meji + ọna awọn abulẹ atunṣe.

Ipo iṣiṣẹ yii le muu ṣiṣẹ ni gbangba nipa tito WERF_THREE_WAY_MERGE_MODE=onlyNewReleases bayi.

Daakọ: ẹya naa han ni werf lori ọpọlọpọ awọn idasilẹ: ninu ikanni alpha o ti ṣetan pẹlu ẹya v1.0.5-alfa.19, ati ninu awọn beta ikanni - pẹlu v1.0.4-beta.20.

3-ọna-patch alemo fun gbogbo awọn idasilẹ

Bibẹrẹ Oṣu kejila ọjọ 15, Ọdun 2019, beta ati awọn ẹya alpha ti werf bẹrẹ lati lo awọn abulẹ ọna-ọna-ọna-ọna ni kikun nipasẹ aiyipada lati lo awọn ayipada si gbogbo awọn idasilẹ.

Ipo iṣiṣẹ yii le muu ṣiṣẹ ni gbangba nipa tito WERF_THREE_WAY_MERGE_MODE=enabled bayi.

Kini lati ṣe pẹlu autoscaling awọn oluşewadi?

Awọn oriṣi meji ti autoscaling ni Kubernetes: HPA (petele) ati VPA (inaro).

Petele laifọwọyi yan nọmba awọn ẹda, inaro - nọmba awọn orisun. Mejeeji nọmba awọn ẹda ati awọn ibeere orisun ni pato ninu iṣafihan orisun (wo Ifihan orisun). spec.replicas tabi spec.containers[].resources.limits.cpu, spec.containers[].resources.limits.memory и ẹda).

Isoro: ti olumulo kan ba tunto orisun kan ninu chart kan ki o ṣalaye awọn iye kan fun awọn orisun tabi awọn ẹda ati awọn adaṣe adaṣe ti ṣiṣẹ fun orisun yii, lẹhinna pẹlu werf imuṣiṣẹ kọọkan yoo tun awọn iye wọnyi pada si ohun ti a kọ sinu apẹrẹ chart. .

Awọn ojutu meji wa si iṣoro naa. Lati bẹrẹ pẹlu, o dara julọ lati yago fun sisọ ni pato awọn iye afọwọṣe ni iṣafihan aworan atọka. Ti aṣayan yii ko ba dara fun idi kan (fun apẹẹrẹ, nitori pe o rọrun lati ṣeto awọn opin orisun akọkọ ati nọmba awọn ẹda ti o wa ninu chart), lẹhinna werf nfunni ni awọn asọye atẹle:

  • werf.io/set-replicas-only-on-creation=true
  • werf.io/set-resources-only-on-creation=true

Ti iru alaye asọye ba wa, werf kii yoo tun awọn iye ti o baamu pada lori imuṣiṣẹ kọọkan, ṣugbọn yoo ṣeto wọn nikan nigbati a ṣẹda orisun akọkọ.

Fun alaye diẹ sii, wo iwe iṣẹ akanṣe fun HPA и VPA.

Eewọ lilo alemo-ọna-ọpọ-mẹta

Olumulo le ṣe idiwọ lilo awọn abulẹ tuntun ni werf nipa lilo oniyipada ayika WERF_THREE_WAY_MERGE_MODE=disabled. Sibẹsibẹ, bẹrẹ Lati Oṣu Kẹta Ọjọ 1, Ọdun 2020, wiwọle yii ko ni lo mọ. ati pe yoo ṣee ṣe nikan lati lo awọn abulẹ ọna-ọna 3-ọna.

Olomo ti oro ni werf

Titunto si ọna ti lilo awọn ayipada pẹlu awọn abulẹ-ọna-ọna-ọna 3 gba wa laaye lati ṣe iru ẹya lẹsẹkẹsẹ bi gbigba awọn orisun ti o wa ninu iṣupọ sinu itusilẹ Helm.

Helm 2 ni iṣoro kan: o ko le ṣafikun orisun kan si awọn ifihan apẹrẹ ti o wa tẹlẹ ninu iṣupọ laisi atunda orisun yii lati ibere (wo. #6031, #3275). A kọ werf lati gba awọn orisun to wa tẹlẹ fun itusilẹ. Lati ṣe eyi, o nilo lati fi sori ẹrọ asọye lori ẹya lọwọlọwọ ti orisun lati inu iṣupọ nṣiṣẹ (fun apẹẹrẹ, lilo kubectl edit):

"werf.io/allow-adoption-by-release": RELEASE_NAME

Ni bayi awọn orisun nilo lati ṣapejuwe ninu chart ati nigbamii ti werf ba gbe idasilẹ kan pẹlu orukọ ti o yẹ, awọn orisun ti o wa ni yoo gba sinu itusilẹ yii ati wa labẹ iṣakoso rẹ. Pẹlupẹlu, ninu ilana ti gbigba orisun kan fun itusilẹ, werf yoo mu ipo lọwọlọwọ ti awọn oluşewadi lati inu iṣupọ nṣiṣẹ si ipinlẹ ti a ṣalaye ninu chart, ni lilo awọn abulẹ ọna-ọna-ọna 3 kanna ati ofin awọn orisun amuṣiṣẹpọ.

Daakọ: eto WERF_THREE_WAY_MERGE_MODE ko ni ipa lori gbigba awọn ohun elo - ni ọran ti isọdọmọ, patch-merge patch 3-ọna nigbagbogbo lo.

Awọn alaye - ni iwe.

Awọn ipari ati awọn eto iwaju

Mo nireti pe lẹhin nkan yii o ti di alaye diẹ sii kini awọn abulẹ ọna-ọna 3-ọna ati idi ti wọn fi wa si wọn. Lati oju wiwo ti o wulo ti idagbasoke iṣẹ akanṣe werf, imuse wọn jẹ igbesẹ miiran si ilọsiwaju imuṣiṣẹ ti Helm-like. Bayi o le gbagbe nipa awọn iṣoro pẹlu amuṣiṣẹpọ iṣeto ni igbagbogbo dide nigba lilo Helm 2. Ni akoko kanna, ẹya tuntun ti o wulo ti gbigba awọn orisun Kubernetes ti a ti gbasilẹ tẹlẹ ti ṣafikun si itusilẹ Helm.

Awọn ọran ati awọn italaya tun wa pẹlu awọn imuṣiṣẹ bi Helm, gẹgẹbi lilo awọn awoṣe Go, ti a yoo tẹsiwaju lati koju.

Alaye nipa awọn ọna imudojuiwọn orisun ati isọdọmọ tun le rii ni iwe iwe yi.

Helmu 3

Tọ ti pataki akiyesi tu silẹ o kan awọn miiran ọjọ titun kan pataki version of Helm - v3 - eyi ti o tun nlo 3-ọna-dapọ abulẹ ati xo Tiller. Awọn titun ti ikede Helm nbeere ijira awọn fifi sori ẹrọ ti o wa tẹlẹ lati yi wọn pada si ọna kika ibi ipamọ itusilẹ tuntun.

Werf, fun apakan rẹ, ti yọkuro lọwọlọwọ lilo Tiller, yipada si ọna-ọna-ọna 3 ati ṣafikun pelu pelu, lakoko ti o wa ni ibamu pẹlu awọn fifi sori ẹrọ Helm 2 ti o wa (ko si awọn iwe afọwọkọ ijira nilo lati ṣiṣẹ). Nitorinaa, titi werf yoo yipada si Helm 3, awọn olumulo werf ko padanu awọn anfani akọkọ ti Helm 3 lori Helm 2 (werf tun ni wọn).

Sibẹsibẹ, iyipada ti werf si Helm 3 codebase jẹ eyiti ko ṣee ṣe ati pe yoo ṣẹlẹ ni ọjọ iwaju nitosi. Aigbekele eyi yoo jẹ werf 1.1 tabi werf 1.2 (ni akoko yii, ẹya akọkọ ti werf jẹ 1.0; fun alaye diẹ sii nipa ẹrọ ikede werf, wo nibi). Ni akoko yii, Helm 3 yoo ni akoko lati duro.

PS

Ka tun lori bulọọgi wa:

orisun: www.habr.com

Fi ọrọìwòye kun