Introduzzjoni għal GitOps għal OpenShift

Illum se nitkellmu dwar il-prinċipji u l-mudelli ta 'GitOps, kif ukoll kif dawn il-mudelli huma implimentati fuq il-pjattaforma OpenShift. Gwida interattiva dwar dan is-suġġett hija disponibbli по ссылке.

Introduzzjoni għal GitOps għal OpenShift

Fil-qosor, GitOps huwa sett ta 'prattiki għall-użu ta' talbiet ta 'ġibda Git biex jimmaniġġjaw l-infrastruttura u l-konfigurazzjonijiet tal-applikazzjoni. Ir-repożitorju Git f'GitOps huwa ttrattat bħala sors wieħed ta' informazzjoni dwar l-istat tas-sistema, u kwalunkwe tibdil f'dan l-istat huwa kompletament traċċabbli u awditjabbli.

L-idea ta 'traċċar tal-bidliet f'GitOps m'hija bl-ebda mod ġdida; dan l-approċċ ilu jintuża kważi b'mod universali meta taħdem mal-kodiċi tas-sors tal-applikazzjoni. GitOps sempliċement jimplimenta karatteristiċi simili (reviżjonijiet, talbiet ta 'ġibda, tikketti, eċċ.) Fil-ġestjoni tal-konfigurazzjoni tal-infrastruttura u tal-applikazzjoni u jipprovdi benefiċċji simili bħal fil-każ tal-ġestjoni tal-kodiċi tas-sors.

M'hemm l-ebda definizzjoni akkademika jew sett ta' regoli approvati għal GitOps, biss sett ta' prinċipji li fuqhom hija mibnija din il-prattika:

  • Id-deskrizzjoni dikjarattiva tas-sistema hija maħżuna fir-repożitorju Git (konfigurazzjonijiet, monitoraġġ, eċċ.).
  • Bidliet fl-istat isiru permezz ta 'pull requests.
  • L-istat tas-sistemi operattivi jinġieb f'konformità mad-dejta fir-repożitorju bl-użu ta 'talbiet push Git.

Prinċipji GitOps

  • Id-definizzjonijiet tas-sistema huma deskritti bħala kodiċi tas-sors

Il-konfigurazzjoni tas-sistemi hija ttrattata bħala kodiċi sabiex tkun tista' tiġi maħżuna u verżjoni awtomatika f'repożitorju Git, li jservi bħala sors wieħed ta' verità. Dan l-approċċ jagħmilha faċli għall-introduzzjoni u t-tkeċċija tal-bidliet fis-sistemi.

  • L-istat mixtieq u l-konfigurazzjoni tas-sistemi huma ssettjati u verġjonati f'Git

Billi naħżnu u nbiddlu l-istat mixtieq tas-sistemi f'Git, nistgħu nwettqu u nġibu lura faċilment il-bidliet fis-sistemi u l-applikazzjonijiet. Nistgħu wkoll nużaw il-mekkaniżmi tas-sigurtà ta' Git biex nikkontrollaw is-sjieda tal-kodiċi u nivverifikaw l-awtentiċità tagħha.

  • Il-bidliet fil-konfigurazzjoni jistgħu jiġu applikati awtomatikament permezz ta 'talbiet ta' ġibda

Billi nużaw it-talbiet tal-ġibda Git, nistgħu faċilment nikkontrollaw kif il-bidliet jiġu applikati għall-konfigurazzjonijiet fir-repożitorju. Pereżempju, jistgħu jingħataw lil membri oħra tat-tim għal reviżjoni jew jgħaddu minn testijiet CI, eċċ.

U fl-istess ħin, m'hemmx bżonn li jitqassmu s-setgħat tal-amministratur fuq ix-xellug u l-lemin. Biex jikkommettu bidliet fil-konfigurazzjoni, l-utenti jeħtieġu biss permessi xierqa fir-repożitorju Git fejn dawk il-konfigurazzjonijiet huma maħżuna.

  • Iffissar tal-problema ta 'drift mhux ikkontrollat ​​ta' konfigurazzjonijiet

Ladarba l-istat mixtieq tas-sistema jinħażen f'repożitorju Git, kull ma rridu nagħmlu hu li nsibu softwer li jiżgura li l-istat attwali tas-sistema jaqbel mal-istat mixtieq tagħha. Jekk dan ma jkunx il-każ, allura dan is-software għandu - skond is-settings - jew jelimina d-diskrepanza waħdu, jew jinnotifikana dwar id-drift tal-konfigurazzjoni.

Mudelli GitOps għal OpenShift

Rikonċiljatur tar-Riżorsi fuq il-Kluster

Skont dan il-mudell, il-cluster għandu kontrollur li huwa responsabbli biex iqabbel ir-riżorsi Kubernetes (fajls YAML) fir-repożitorju Git mar-riżorsi reali tal-cluster. Jekk jinstabu diskrepanzi, il-kontrollur jibgħat notifiki u possibbilment jieħu azzjoni biex jikkoreġi d-diskrepanzi. Dan il-mudell GitOps jintuża f'Anthos Config Management u Weaveworks Flux.

Introduzzjoni għal GitOps għal OpenShift

Rikonċiljatur tar-Riżorsi Esterni (Imbotta)

Dan il-mudell jista 'jitqies bħala varjazzjoni ta' dak preċedenti, meta jkollna kontrollur wieħed jew aktar responsabbli għas-sinkronizzazzjoni tar-riżorsi fil-pari "Repożitorju Git - cluster Kubernetes". Id-differenza hawnhekk hija li kull cluster amministrat mhux bilfors ikollu l-kontrollur separat tiegħu stess. Git - k8s cluster pairs ħafna drabi huma definiti bħala CRDs (definizzjonijiet tar-riżorsi personalizzati), li jistgħu jiddeskrivu kif il-kontrollur għandu jwettaq is-sinkronizzazzjoni. Fi ħdan dan il-mudell, il-kontrolluri jqabblu r-repożitorju Git speċifikat fis-CRD mar-riżorsi tal-cluster Kubernetes, li huma speċifikati wkoll fis-CRD, u jwettqu azzjonijiet xierqa bbażati fuq ir-riżultati tat-tqabbil. B'mod partikolari, dan il-mudell GitOps jintuża f'ArgoCD.

Introduzzjoni għal GitOps għal OpenShift

GitOps fuq il-pjattaforma OpenShift

Amministrazzjoni ta' infrastruttura ta' Kubernetes multi-cluster

Bit-tixrid ta 'Kubernetes u l-popolarità dejjem tikber ta' strateġiji multi-cloud u edge computing, in-numru medju ta 'clusters OpenShift għal kull klijent qed jiżdied ukoll.

Per eżempju, meta tuża edge computing, clusters ta 'klijent wieħed jistgħu jiġu skjerati f'mijiet jew saħansitra eluf. Bħala riżultat, huwa mġiegħel jimmaniġġja diversi clusters OpenShift indipendenti jew koordinati fil-cloud pubbliku u fuq il-post.

F'dan il-każ, għandhom jiġu solvuti ħafna problemi, b'mod partikolari:

  • Ikkontrolla li r-raggruppamenti jkunu fi stat identiku (konfigurazzjonijiet, monitoraġġ, ħażna, eċċ.)
  • Oħloq mill-ġdid (jew restawr) clusters ibbażati fuq stat magħruf.
  • Oħloq raggruppamenti ġodda bbażati fuq stat magħruf.
  • Implimenta bidliet għal clusters multipli OpenShift.
  • Irreġġa' lura l-bidliet f'diversi clusters ta' OpenShift.
  • Rabta konfigurazzjonijiet mudellati għal ambjenti differenti.

Konfigurazzjonijiet tal-Applikazzjoni

Matul iċ-ċiklu tal-ħajja tagħhom, l-applikazzjonijiet ħafna drabi jgħaddu minn katina ta 'clusters (dev, stadju, eċċ.) qabel jispiċċaw fi cluster ta' produzzjoni. Barra minn hekk, minħabba r-rekwiżiti tad-disponibbiltà u l-iskalabbiltà, il-klijenti spiss jużaw applikazzjonijiet f'diversi raggruppamenti fuq il-post jew reġjuni multipli ta' pjattaforma ta' cloud pubbliku.

F'dan il-każ, il-kompiti li ġejjin għandhom jiġu solvuti:

  • Tiżgura l-moviment tal-applikazzjonijiet (binarji, konfigurazzjonijiet, eċċ.) bejn clusters (dev, stadju, eċċ.).
  • Itfaċċa bidliet fl-applikazzjonijiet (binarji, konfigurazzjonijiet, eċċ.) f'diversi raggruppamenti OpenShift.
  • Irreġġa' lura l-bidliet għall-applikazzjonijiet għal stat magħruf preċedenti.

OpenShift GitOps Każijiet ta' Użu

1. Applikazzjoni ta 'bidliet mir-repożitorju Git

Amministratur tal-clusters jista' jaħżen il-konfigurazzjonijiet tal-clusters OpenShift f'repożitorju Git u japplikahom awtomatikament biex joħloq clusters ġodda mingħajr sforz u jġibhom fi stat identiku għall-istat magħruf maħżun fir-repożitorju Git.

2. Sinkronizzazzjoni mal-Maniġer Sigriet

L-amministratur se jibbenefika wkoll mill-abbiltà li jissinkronizza oġġetti sigrieti OpenShift ma 'softwer xieraq bħal Vault sabiex jimmaniġġjahom bl-użu ta' għodod maħluqa apposta għal dan.

3. Kontroll tal-konfigurazzjonijiet tad-drift

L-amministratur ikun favur biss jekk OpenShift GitOps innifsu jidentifika u jwissi dwar diskrepanzi bejn konfigurazzjonijiet reali u dawk speċifikati fir-repożitorju, sabiex ikunu jistgħu jirrispondu malajr għad-drift.

4. Notifiki dwar id-drift tal-konfigurazzjoni

Huma utli fil-każ meta l-amministratur irid jitgħallem malajr dwar każijiet ta 'drift tal-konfigurazzjoni sabiex malajr jieħu miżuri xierqa waħdu.

5. Sinkronizzazzjoni manwali ta 'konfigurazzjonijiet meta drifting

Jippermetti lill-amministratur jissinkronizza l-cluster OpenShift mar-repożitorju Git fil-każ ta 'drift tal-konfigurazzjoni, biex jirritorna malajr il-cluster għal stat magħruf preċedenti.

6.Auto-sinkronizzazzjoni ta 'konfigurazzjonijiet meta drifting

L-amministratur jista 'wkoll jikkonfigura l-cluster OpenShift biex awtomatikament jissinkronizza mar-repożitorju meta tinstab drift, sabiex il-konfigurazzjoni tal-cluster dejjem taqbel mal-konfigurazzjonijiet f'Git.

7. Diversi raggruppamenti - repożitorju wieħed

L-amministratur jista 'jaħżen konfigurazzjonijiet ta' diversi clusters OpenShift differenti f'repożitorju Git wieħed u japplikahom b'mod selettiv kif meħtieġ.

8. Ġerarkija tal-konfigurazzjonijiet tal-clusters (wirt)

L-amministratur jista 'jistabbilixxi ġerarkija ta' konfigurazzjonijiet ta 'clusters fir-repożitorju (stadju, prod, portafoll ta' app, eċċ. b'wirt). Fi kliem ieħor, jista 'jiddetermina jekk il-konfigurazzjonijiet għandhomx jiġu applikati għal raggruppament wieħed jew aktar.

Pereżempju, jekk amministratur jistabbilixxi l-ġerarkija "Raggruppamenti ta' produzzjoni (prod) → Raggruppamenti ta' Sistema X → Raggruppamenti ta' produzzjoni tas-sistema X" fir-repożitorju Git, allura taħlita tal-konfigurazzjonijiet li ġejjin tiġi applikata għar-raggruppamenti ta' produzzjoni tas-sistema X:

  • Konfigurazzjonijiet komuni għar-raggruppamenti kollha tal-produzzjoni.
  • Konfigurazzjonijiet għall-cluster System X.
  • Konfigurazzjonijiet għall-grupp tal-produzzjoni tas-sistema X.

9. Templates u konfigurazzjoni overrides

L-amministratur jista' jegħleb sett ta' konfigurazzjonijiet wiret u l-valuri tagħhom, pereżempju, biex jirfina l-konfigurazzjoni għal raggruppamenti speċifiċi li għalihom se jiġu applikati.

10. Selettiva tinkludi u teskludi għal konfigurazzjonijiet, konfigurazzjonijiet ta 'applikazzjoni

L-amministratur jista' jistabbilixxi l-kundizzjonijiet għall-applikazzjoni jew in-nuqqas ta' applikazzjoni ta' ċerti konfigurazzjonijiet għal raggruppamenti b'ċerti karatteristiċi.

11. Appoġġ tal-mudell

L-iżviluppaturi se jibbenefikaw mill-abbiltà li jagħżlu kif se jiġu definiti r-riżorsi tal-applikazzjoni (Helm Chart, Kubernetes yaml pur, eċċ.) Sabiex jużaw l-aktar format xieraq għal kull applikazzjoni speċifika.

Għodod GitOps fuq il-pjattaforma OpenShift

ArgoCD

ArgoCD jimplimenta l-mudell tar-Rikonċiljazzjoni tar-Riżorsi Esterni u joffri UI ċentralizzata għall-orkestrazzjoni ta’ relazzjonijiet wieħed għal ħafna bejn clusters u repożitorji Git. L-iżvantaġġi ta 'dan il-programm jinkludu l-inabbiltà li timmaniġġja l-applikazzjonijiet meta ArgoCD ma jkunx qed jaħdem.

Websajt uffiċjali

Fluss

Flux jimplimenta mudell ta' Rikonċiljazzjoni tar-Riżorsi On-Cluster u, bħala riżultat, m'hemm l-ebda ġestjoni ċentralizzata tar-repożitorju tad-definizzjoni, li huwa punt dgħajjef. Min-naħa l-oħra, preċiżament minħabba n-nuqqas ta 'ċentralizzazzjoni, il-kapaċità li timmaniġġja l-applikazzjonijiet tibqa' anki jekk cluster wieħed ifalli.

Websajt uffiċjali

Installazzjoni ta' ArgoCD fuq OpenShift

ArgoCD joffri interface tal-linja tal-kmand eċċellenti u console tal-web, għalhekk mhux se nkopru Flux u alternattivi oħra hawn.

Biex tuża ArgoCD fuq il-pjattaforma OpenShift 4, segwi dawn il-passi bħala amministratur tal-cluster:

L-iskjerament tal-komponenti ArgoCD fuq il-pjattaforma OpenShift

# Create a new namespace for ArgoCD components
oc create namespace argocd
# Apply the ArgoCD Install Manifest
oc -n argocd apply -f https://raw.githubusercontent.com/argoproj/argo-cd/v1.2.2/manifests/install.yaml
# Get the ArgoCD Server password
ARGOCD_SERVER_PASSWORD=$(oc -n argocd get pod -l "app.kubernetes.io/name=argocd-server" -o jsonpath='{.items[*].metadata.name}')

Titjib ta' ArgoCD Server sabiex ikun jista' jidher minn OpenShift Route

# Patch ArgoCD Server so no TLS is configured on the server (--insecure)
PATCH='{"spec":{"template":{"spec":{"$setElementOrder/containers":[{"name":"argocd-server"}],"containers":[{"command":["argocd-server","--insecure","--staticassets","/shared/app"],"name":"argocd-server"}]}}}}'
oc -n argocd patch deployment argocd-server -p $PATCH
# Expose the ArgoCD Server using an Edge OpenShift Route so TLS is used for incoming connections
oc -n argocd create route edge argocd-server --service=argocd-server --port=http --insecure-policy=Redirect

L-iskjerament tal-ArgoCD Cli Tool

# Download the argocd binary, place it under /usr/local/bin and give it execution permissions
curl -L https://github.com/argoproj/argo-cd/releases/download/v1.2.2/argocd-linux-amd64 -o /usr/local/bin/argocd
chmod +x /usr/local/bin/argocd

Nibdlu l-password tal-amministratur ta' ArgoCD Server

# Get ArgoCD Server Route Hostname
ARGOCD_ROUTE=$(oc -n argocd get route argocd-server -o jsonpath='{.spec.host}')
# Login with the current admin password
argocd --insecure --grpc-web login ${ARGOCD_ROUTE}:443 --username admin --password ${ARGOCD_SERVER_PASSWORD}
# Update admin's password
argocd --insecure --grpc-web --server ${ARGOCD_ROUTE}:443 account update-password --current-password ${ARGOCD_SERVER_PASSWORD} --new-password

Wara li tlesti dawn il-passi, tista 'taħdem ma' ArgoCD Server permezz tal-console web ArgoCD WebUI jew l-għodda tal-linja tal-kmand ArgoCD Cli.
https://blog.openshift.com/is-it-too-late-to-integrate-gitops/

GitOps - Qatt Mhu Tard Wisq

"Il-ferrovija telqet" - dan huwa dak li jgħidu dwar sitwazzjoni meta tintilef l-opportunità li tagħmel xi ħaġa. Fil-każ ta 'OpenShift, ix-xewqa li immedjatament tibda tuża din il-pjattaforma ġdida friska ħafna drabi toħloq eżattament din is-sitwazzjoni bil-ġestjoni u l-manutenzjoni ta' rotot, skjeramenti u oġġetti OpenShift oħra. Imma ċ-ċans dejjem jintilef kompletament?

Tkompli s-sensiela ta’ artikli dwar GitOps, illum aħna ser nuruk kif tittrasforma applikazzjoni maħduma bl-idejn u r-riżorsi tagħha fi proċess fejn kollox huwa ġestit minn għodod GitOps. Biex tagħmel dan, l-ewwel se niskjeraw manwalment l-applikazzjoni httpd. Il-screenshot hawn taħt turi kif noħolqu namespace, iskjerament u servizz, u mbagħad nesponu dan is-servizz biex noħolqu rotta.

oc create -f https://raw.githubusercontent.com/openshift/federation-dev/master/labs/lab-4-assets/namespace.yaml
oc create -f https://raw.githubusercontent.com/openshift/federation-dev/master/labs/lab-4-assets/deployment.yaml
oc create -f https://raw.githubusercontent.com/openshift/federation-dev/master/labs/lab-4-assets/service.yaml
oc expose svc/httpd -n simple-app

Allura għandna applikazzjoni maħduma bl-idejn. Issa jeħtieġ li jiġi trasferit taħt il-ġestjoni GitOps mingħajr telf ta 'disponibbiltà. Fil-qosor, tagħmel dan:

  • Oħloq repożitorju Git għall-kodiċi.
  • Aħna nesportaw l-oġġetti attwali tagħna u ntellgħuhom fir-repożitorju Git.
  • Għażla u skjerament tal-għodod GitOps.
  • Aħna nżidu r-repożitorju tagħna ma' dan is-sett ta' għodod.
  • Aħna niddefinixxu l-applikazzjoni fil-kit tal-għodda GitOps tagħna.
  • Aħna nwettqu test run tal-applikazzjoni billi tuża l-għodda GitOps.
  • Aħna nissinkronizzaw l-oġġetti bl-użu tal-għodda GitOps.
  • Ippermetti żbir u awto-sinkronizzazzjoni ta 'oġġetti.

Kif imsemmi fil-preċedenti artikolu, f'GitOps hemm sors wieħed u wieħed biss ta' informazzjoni dwar l-oġġetti kollha fil-cluster(s) Kubernetes - ir-repożitorju Git. Sussegwentement, nipproċedu mill-premessa li l-organizzazzjoni tiegħek diġà tuża repożitorju Git. Jista' jkun pubbliku jew privat, iżda għandu jkun aċċessibbli għall-clusters ta' Kubernetes. Dan jista' jkun l-istess repożitorju bħall-kodiċi tal-applikazzjoni, jew repożitorju separat maħluq speċifikament għall-iskjeramenti. Huwa rakkomandat li jkun hemm permessi stretti fir-repożitorju peress li hemm sigrieti, rotot, u affarijiet oħra sensittivi għas-sigurtà.

Fl-eżempju tagħna, se noħolqu repożitorju pubbliku ġdid fuq GitHub. Tista' ssejħilha kif tixtieq, nużaw l-isem blogpost.

Jekk il-fajls tal-oġġett YAML ma kinux maħżuna lokalment jew f'Git, allura jkollok tuża l-binarji oc jew kubectl. Fil-screenshot hawn taħt qed nitolbu YAML għall-ispazju tal-isem, l-iskjerament, is-servizz u r-rotta tagħna. Qabel dan, ikklonajna r-repożitorju li għadu kif inħoloq u s-cd fih.

oc get namespace simple-app -o yaml --export > namespace.yaml
oc get deployment httpd -o yaml -n simple-app --export > deployment.yaml
oc get service httpd -o yaml -n simple-app --export > service.yaml
oc get route httpd -o yaml -n simple-app --export > route.yaml

Issa ejja neditjaw il-fajl deployment.yaml biex tneħħi l-qasam li Argo CD ma jistax jissinkronizza.

sed -i '/sgeneration: .*/d' deployment.yaml

Barra minn hekk, ir-rotta trid tinbidel. L-ewwel nistabbilixxu varjabbli b'ħafna linji u mbagħad nibdlu l-ingress: null bil-kontenut ta 'dik il-varjabbli.

export ROUTE="  ingress:                                                            
    - conditions:
        - status: 'True'
          type: Admitted"

sed -i "s/  ingress: null/$ROUTE/g" route.yaml

Allura, għamilna l-fajls, dak kollu li jibqa 'hu li ssalvahom fir-repożitorju Git. Wara dan ir-repożitorju jsir l-uniku sors ta 'informazzjoni, u kwalunkwe tibdil manwali għall-oġġetti għandu jkun ipprojbit b'mod strett.

git commit -am ‘initial commit of objects’
git push origin master

Barra minn hekk nipproċedu mill-fatt li diġà skjerat ArgoCD (kif tagħmel dan - ara preċedenti wara). Għalhekk, se nżidu mas-CD Argo ir-repożitorju li ħloqna, li fih il-kodiċi tal-applikazzjoni mill-eżempju tagħna. Kun żgur li tispeċifika r-repożitorju eżatt li ħloqt qabel.

argocd repo add https://github.com/cooktheryan/blogpost

Issa ejja noħolqu l-applikazzjoni. L-applikazzjoni tistabbilixxi valuri sabiex il-kit tal-għodda GitOps jifhem liema repożitorju u mogħdijiet tuża, liema OpenShift hija meħtieġa biex timmaniġġja l-oġġetti, liema fergħa speċifika tar-repożitorju hija meħtieġa, u jekk ir-riżorsi għandhomx jissinkronizzaw awtomatikament.

argocd app create --project default 
--name simple-app --repo https://github.com/cooktheryan/blogpost.git 
--path . --dest-server https://kubernetes.default.svc 
--dest-namespace simple-app --revision master --sync-policy none

Ladarba applikazzjoni tiġi speċifikata fis-CD Argo, is-sett ta' għodod jibda jiċċekkja oġġetti diġà skjerati kontra d-definizzjonijiet fir-repożitorju. Fl-eżempju tagħna, is-sinkronizzazzjoni awtomatika u t-tindif huma diżattivati, għalhekk l-elementi għadhom ma jinbidlux. Jekk jogħġbok innota li fl-interface tal-Argo CD l-applikazzjoni tagħna se jkollha l-istatus "Missin Sinkronizzat" minħabba li m'hemm l-ebda tikketta li tipprovdi ArgoCD.
Huwa għalhekk li meta nibdew is-sinkronizzazzjoni ftit aktar tard, l-oġġetti ma jiġux skjerati mill-ġdid.

Issa ejja nagħmlu test run biex niżguraw li ma jkunx hemm żbalji fil-fajls tagħna.

argocd app sync simple-app --dry-run

Jekk ma jkunx hemm żbalji, allura tista 'tipproċedi għas-sinkronizzazzjoni.

argocd app sync simple-app

Wara li tħaddem l-argocd get kmand fuq l-applikazzjoni tagħna, għandna naraw li l-istatus tal-applikazzjoni nbidel għal Healthy jew Synced. Dan se jfisser li r-riżorsi kollha fir-repożitorju Git issa jikkorrispondu għal dawk ir-riżorsi li diġà ġew skjerati.

argocd app get simple-app
Name:               simple-app
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          simple-app
URL:                https://argocd-server-route-argocd.apps.example.com/applications/simple-app
Repo:               https://github.com/cooktheryan/blogpost.git
Target:             master
Path:               .
Sync Policy:        <none>
Sync Status:        Synced to master (60e1678)
Health Status:      Healthy
...   

Issa tista 'tippermetti s-sinkronizzazzjoni awtomatika u t-tindif biex tiżgura li xejn ma jinħoloq manwalment u li kull darba li oġġett jinħoloq jew jiġi aġġornat għar-repożitorju, iseħħ skjerament.

argocd app set simple-app --sync-policy automated --auto-prune

Għalhekk, ġibna b'suċċess applikazzjoni taħt il-kontroll ta 'GitOps li inizjalment ma kienet tuża GitOps bl-ebda mod.

Sors: www.habr.com

Żid kumment