Cyflwyniad i GitOps ar gyfer OpenShift

Heddiw, byddwn yn siarad am egwyddorion a modelau GitOps, yn ogystal â sut mae'r modelau hyn yn cael eu gweithredu ar y platfform OpenShift. Mae canllaw rhyngweithiol ar y pwnc hwn ar gael по ссылке.

Cyflwyniad i GitOps ar gyfer OpenShift

Yn gryno, mae GitOps yn set o arferion ar gyfer defnyddio ceisiadau tynnu Git i reoli ffurfweddiadau seilwaith a chymwysiadau. Mae ystorfa Git yn GitOps yn cael ei thrin fel un ffynhonnell wybodaeth am gyflwr y system, ac mae unrhyw newidiadau i'r cyflwr hwn yn gwbl olrheiniadwy ac archwiliadwy.

Nid yw'r syniad o olrhain newid yn GitOps yn newydd o bell ffordd; mae'r dull hwn wedi'i ddefnyddio ers amser maith bron yn gyffredinol wrth weithio gyda chod ffynhonnell cymhwysiad. Yn syml, mae GitOps yn gweithredu nodweddion tebyg (adolygiadau, ceisiadau tynnu, tagiau, ac ati) mewn rheoli seilwaith a chyfluniad cymwysiadau ac mae'n darparu buddion tebyg ag yn achos rheoli cod ffynhonnell.

Nid oes diffiniad academaidd na set gymeradwy o reolau ar gyfer GitOps, dim ond set o egwyddorion y mae’r arfer hwn wedi’i adeiladu arnynt:

  • Mae'r disgrifiad datganiadol o'r system yn cael ei storio yn ystorfa Git (configs, monitro, ac ati).
  • Gwneir newidiadau cyflwr trwy geisiadau tynnu.
  • Mae cyflwr systemau rhedeg yn cael ei gysoni â'r data yn y gadwrfa gan ddefnyddio ceisiadau gwthio Git.

Egwyddorion GitOps

  • Disgrifir diffiniadau system fel cod ffynhonnell

Mae cyfluniad systemau yn cael ei drin fel cod fel y gellir ei storio a'i fersiwnio'n awtomatig mewn ystorfa Git, sy'n gweithredu fel un ffynhonnell gwirionedd. Mae'r dull hwn yn ei gwneud hi'n hawdd cyflwyno a chyflwyno newidiadau mewn systemau yn ôl.

  • Mae cyflwr a chyfluniad systemau dymunol yn cael eu gosod a'u fersiwnio yn Git

Trwy storio a fersiwnio cyflwr dymunol systemau Git, rydym yn gallu cyflwyno a chyflwyno newidiadau i systemau a chymwysiadau yn hawdd. Gallwn hefyd ddefnyddio mecanweithiau diogelwch Git i reoli perchnogaeth cod a gwirio ei ddilysrwydd.

  • Gellir cymhwyso newidiadau cyfluniad yn awtomatig trwy geisiadau tynnu

Gan ddefnyddio ceisiadau tynnu Git, gallwn reoli'n hawdd sut mae newidiadau'n cael eu cymhwyso i ffurfweddiadau yn yr ystorfa. Er enghraifft, gellir eu rhoi i aelodau eraill o'r tîm i'w hadolygu neu eu rhedeg trwy brofion CI, ac ati.

Ac ar yr un pryd, nid oes angen dosbarthu pwerau gweinyddol chwith a dde. I gyflawni newidiadau cyfluniad, dim ond caniatâd priodol sydd ei angen ar ddefnyddwyr yn y storfa Git lle mae'r ffurfweddiadau hynny'n cael eu storio.

  • Trwsio problem drifft cyfluniadau heb ei reoli

Unwaith y bydd cyflwr dymunol y system wedi'i storio mewn ystorfa Git, y cyfan sy'n rhaid i ni ei wneud yw dod o hyd i feddalwedd a fydd yn sicrhau bod cyflwr presennol y system yn cyfateb i'r cyflwr dymunol. Os nad yw hyn yn wir, yna dylai'r feddalwedd hon - yn dibynnu ar y gosodiadau - naill ai ddileu'r anghysondeb ar ei ben ei hun, neu roi gwybod i ni am drifft cyfluniad.

Modelau GitOps ar gyfer OpenShift

Cysonydd Adnoddau Ar-Clwstwr

Yn ôl y model hwn, mae gan y clwstwr reolwr sy'n gyfrifol am gymharu adnoddau Kubernetes (ffeiliau YAML) yn ystorfa Git ag adnoddau gwirioneddol y clwstwr. Os canfyddir anghysondebau, bydd y rheolwr yn anfon hysbysiadau ac o bosibl yn cymryd camau i gywiro'r anghysondebau. Defnyddir y model GitOps hwn yn Anthos Config Management a Weaveworks Flux.

Cyflwyniad i GitOps ar gyfer OpenShift

Cysonydd Adnoddau Allanol (Gwthio)

Gellir ystyried y model hwn fel amrywiad o'r un blaenorol, pan fydd gennym un neu fwy o reolwyr yn gyfrifol am gydamseru adnoddau yn y parau “Ystorfa Git - clwstwr Kubernetes”. Y gwahaniaeth yma yw nad oes gan bob clwstwr a reolir o reidrwydd ei reolwr ar wahân ei hun. Mae parau clwstwr Git - k8s yn aml yn cael eu diffinio fel CRDs (diffiniadau adnoddau personol), a all ddisgrifio sut y dylai'r rheolydd berfformio cydamseriad. O fewn y model hwn, mae rheolwyr yn cymharu'r ystorfa Git a nodir yn y CRD ag adnoddau clwstwr Kubernetes, sydd hefyd wedi'u nodi yn y CRD, ac yn perfformio camau gweithredu priodol yn seiliedig ar ganlyniadau'r gymhariaeth. Yn benodol, defnyddir y model GitOps hwn yn ArgoCD.

Cyflwyniad i GitOps ar gyfer OpenShift

GitOps ar y platfform OpenShift

Gweinyddu seilwaith Kubernetes aml-glwstwr

Gyda lledaeniad Kubernetes a phoblogrwydd cynyddol strategaethau aml-gwmwl a chyfrifiadura ymyl, mae nifer cyfartalog y clystyrau OpenShift fesul cwsmer hefyd yn cynyddu.

Er enghraifft, wrth ddefnyddio cyfrifiadura ymylol, gellir defnyddio clystyrau un cwsmer mewn cannoedd neu hyd yn oed filoedd. O ganlyniad, mae'n cael ei orfodi i reoli sawl clwstwr OpenShift annibynnol neu gydgysylltiedig yn y cwmwl cyhoeddus ac ar y safle.

Yn yr achos hwn, mae angen datrys llawer o broblemau, yn enwedig:

  • Rheoli bod y clystyrau yn yr un cyflwr (cyfluniadau, monitro, storio, ac ati)
  • Ail-greu (neu adfer) clystyrau yn seiliedig ar gyflwr hysbys.
  • Creu clystyrau newydd yn seiliedig ar gyflwr hysbys.
  • Cyflwyno newidiadau i glystyrau OpenShift lluosog.
  • Roliwch yn ôl newidiadau ar draws nifer o glystyrau OpenShift.
  • Cysylltwch ffurfweddau templed â gwahanol amgylcheddau.

Ffurfweddau Cais

Yn ystod eu cylch bywyd, mae cymwysiadau yn aml yn mynd trwy gadwyn o glystyrau (dev, llwyfan, ac ati) cyn dod i ben mewn clwstwr cynhyrchu. Yn ogystal, oherwydd gofynion argaeledd a scalability, mae cwsmeriaid yn aml yn defnyddio cymwysiadau ar draws nifer o glystyrau ar y safle neu ranbarthau lluosog o lwyfan cwmwl cyhoeddus.

Yn yr achos hwn, mae angen datrys y tasgau canlynol:

  • Sicrhewch fod cymwysiadau (deuaidd, cyfluniadau, ac ati) yn cael eu symud rhwng clystyrau (dev, llwyfan, ac ati).
  • Cyflwyno newidiadau i gymwysiadau (deuaidd, cyfluniadau, ac ati) mewn sawl clwstwr OpenShift.
  • Roliwch yn ôl newidiadau i geisiadau i gyflwr hysbys blaenorol.

Achosion Defnydd OpenShift GitOps

1. Cymhwyso newidiadau o ystorfa Git

Gall gweinyddwr clwstwr storio ffurfweddiadau clwstwr OpenShift mewn ystorfa Git a'u cymhwyso'n awtomatig i greu clystyrau newydd yn ddiymdrech a'u dwyn i mewn i gyflwr union yr un fath â'r cyflwr hysbys sydd wedi'i storio yn ystorfa Git.

2. Cydamseru gyda Rheolwr Cyfrinachol

Bydd y gweinyddwr hefyd yn elwa o'r gallu i gydamseru gwrthrychau cyfrinachol OpenShift â meddalwedd priodol fel Vault er mwyn eu rheoli gan ddefnyddio offer a grëwyd yn arbennig ar gyfer hyn.

3. Rheoli ffurfweddiadau drifft

Dim ond os yw OpenShift GitOps ei hun yn nodi ac yn rhybuddio am anghysondebau rhwng cyfluniadau go iawn a'r rhai a nodir yn y storfa y bydd y gweinyddwr o blaid, fel y gallant ymateb yn gyflym i drifft.

4. Hysbysiadau am ddrifft cyfluniad

Maent yn ddefnyddiol yn yr achos pan fydd y gweinyddwr eisiau dysgu'n gyflym am achosion o ddrifft cyfluniad er mwyn cymryd mesurau priodol ar ei ben ei hun yn gyflym.

5. Cydamseru ffurfweddau â llaw wrth ddrifftio

Yn caniatáu i'r gweinyddwr gydamseru'r clwstwr OpenShift â'r ystorfa Git os bydd drifft cyfluniad, i ddychwelyd y clwstwr yn gyflym i gyflwr hysbys blaenorol.

6.Auto-cydamseru ffurfweddau wrth ddrifftio

Gall y gweinyddwr hefyd ffurfweddu'r clwstwr OpenShift i gydamseru'n awtomatig â'r ystorfa pan ganfyddir drifft, fel bod cyfluniad y clwstwr bob amser yn cyfateb i'r ffurfweddiadau yn Git.

7. Sawl clwstwr - un ystorfa

Gall y gweinyddwr storio ffurfweddiadau o sawl clwstwr OpenShift gwahanol mewn un ystorfa Git a'u cymhwyso'n ddetholus yn ôl yr angen.

8. Hierarchaeth ffurfweddau clwstwr (etifeddiaeth)

Gall y gweinyddwr osod hierarchaeth o ffurfweddau clwstwr yn y gadwrfa (cam, prod, portffolio app, ac ati gydag etifeddiaeth). Mewn geiriau eraill, gall benderfynu a ddylid cymhwyso ffurfweddiadau i un neu fwy o glystyrau.

Er enghraifft, os yw gweinyddwr yn gosod yr hierarchaeth “Clystyrau cynhyrchu (cynnyrch) → Clystyrau System X → Clystyrau cynhyrchu system X” yn ystorfa Git, yna cymhwysir cyfuniad o'r cyfluniadau canlynol i glystyrau cynhyrchu system X:

  • Ffurfweddau sy'n gyffredin i bob clwstwr cynhyrchu.
  • Ffurfweddau ar gyfer clwstwr System X.
  • Ffurfweddau ar gyfer y clwstwr cynhyrchu system X.

9. Templedi a chyfluniad yn diystyru

Gall y gweinyddwr ddiystyru set o gyfluniadau etifeddol a'u gwerthoedd, er enghraifft, i fireinio'r ffurfweddiad ar gyfer clystyrau penodol y byddant yn cael eu cymhwyso iddynt.

10. Dewisol cynnwys ac eithrio ar gyfer ffurfweddau, ffurfweddau cais

Gall y gweinyddwr osod yr amodau ar gyfer cymhwyso neu beidio â chymhwyso rhai ffurfweddiadau i glystyrau â nodweddion penodol.

11. cymorth templed

Bydd datblygwyr yn elwa o'r gallu i ddewis sut y bydd adnoddau cais yn cael eu diffinio (Siart Helm, Kubernetes yaml pur, ac ati) er mwyn defnyddio'r fformat mwyaf priodol ar gyfer pob cais penodol.

Offer GitOps ar y platfform OpenShift

ArgoCD

Mae ArgoCD yn gweithredu'r model Cysoni Adnoddau Allanol ac yn cynnig rhyngwyneb defnyddiwr canolog ar gyfer trefnu perthnasoedd un i lawer rhwng clystyrau a storfeydd Git. Mae anfanteision y rhaglen hon yn cynnwys yr anallu i reoli cymwysiadau pan nad yw ArgoCD yn gweithio.

Gwefan swyddogol

Fflwcs

Mae Flux yn gweithredu model Cysoni Adnoddau Ar-Glwstwr ac, o ganlyniad, nid oes unrhyw reolaeth ganolog o’r ystorfa ddiffinio, sy’n bwynt gwan. Ar y llaw arall, yn union oherwydd y diffyg canoli, mae'r gallu i reoli cymwysiadau yn parhau hyd yn oed os bydd un clwstwr yn methu.

Gwefan swyddogol

Gosod ArgoCD ar OpenShift

Mae ArgoCD yn cynnig rhyngwyneb llinell orchymyn ardderchog a chonsol gwe, felly ni fyddwn yn cwmpasu Flux a dewisiadau amgen eraill yma.

I ddefnyddio ArgoCD ar blatfform OpenShift 4, dilynwch y camau hyn fel gweinyddwr clwstwr:

Defnyddio cydrannau ArgoCD ar blatfform 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}')

Gwella Gweinydd ArgoCD fel y gellir ei weld trwy 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

Defnyddio Offeryn ArgoCD Cli

# 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

Newid cyfrinair gweinyddol Gweinydd ArgoCD

# 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

Ar ôl cwblhau'r camau hyn, gallwch weithio gyda Gweinydd ArgoCD trwy gonsol gwe ArgoCD WebUI neu offeryn llinell orchymyn ArgoCD Cli.
https://blog.openshift.com/is-it-too-late-to-integrate-gitops/

GitOps - Nid yw Byth yn Rhy Hwyr

“Mae’r trên wedi gadael” – dyma beth maen nhw’n ei ddweud am sefyllfa pan mae’r cyfle i wneud rhywbeth yn cael ei golli. Yn achos OpenShift, mae'r awydd i ddechrau defnyddio'r platfform newydd cŵl hwn ar unwaith yn aml yn creu'r union sefyllfa hon gyda rheoli a chynnal a chadw llwybrau, gosodiadau a gwrthrychau OpenShift eraill. Ond a yw'r cyfle bob amser yn cael ei golli'n llwyr?

Gan barhau â'r gyfres o erthyglau am GitOps, heddiw byddwn yn dangos i chi sut i drawsnewid cymhwysiad wedi'i grefftio â llaw a'i adnoddau yn broses lle mae popeth yn cael ei reoli gan offer GitOps. I wneud hyn, byddwn yn defnyddio'r cymhwysiad httpd â llaw yn gyntaf. Mae'r sgrinlun isod yn dangos sut rydyn ni'n creu gofod enw, lleoliad a gwasanaeth, ac yna'n datgelu'r gwasanaeth hwn i greu llwybr.

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

Felly mae gennym ni gais wedi'i wneud â llaw. Nawr mae angen ei drosglwyddo o dan reolaeth GitOps heb golli argaeledd. Yn fyr, mae'n gwneud hyn:

  • Creu ystorfa Git ar gyfer y cod.
  • Rydym yn allforio ein gwrthrychau cyfredol ac yn eu huwchlwytho i gadwrfa Git.
  • Dewis a defnyddio offer GitOps.
  • Rydym yn ychwanegu ein cadwrfa at y pecyn cymorth hwn.
  • Rydym yn diffinio'r cymhwysiad yn ein pecyn cymorth GitOps.
  • Rydym yn cynnal rhediad prawf o'r rhaglen gan ddefnyddio pecyn cymorth GitOps.
  • Rydym yn cydamseru gwrthrychau gan ddefnyddio pecyn cymorth GitOps.
  • Galluogi tocio ac awto-gydamseru gwrthrychau.

Fel y crybwyllwyd yn y blaen Erthygl, yn GitOps mae un ffynhonnell wybodaeth yn unig am yr holl wrthrychau yng nghlwstwr(iau) Kubernetes - ystorfa Git. Nesaf, rydym yn symud ymlaen o'r rhagdybiaeth bod eich sefydliad eisoes yn defnyddio ystorfa Git. Gall fod yn gyhoeddus neu'n breifat, ond rhaid iddo fod yn hygyrch i glystyrau Kubernetes. Gall hon fod yr un storfa ag ar gyfer cod cais, neu gadwrfa ar wahân a grëwyd yn benodol ar gyfer defnydd. Argymhellir cael caniatâd llym yn yr ystorfa gan y bydd cyfrinachau, llwybrau, a phethau eraill sy'n sensitif i ddiogelwch yn cael eu storio yno.

Yn ein hesiampl, byddwn yn creu ystorfa gyhoeddus newydd ar GitHub. Gallwch ei alw beth bynnag y dymunwch, rydym yn defnyddio'r enw blogbost.

Os na chafodd y ffeiliau gwrthrych YAML eu storio'n lleol neu yn Git, yna bydd yn rhaid i chi ddefnyddio'r binaries oc neu kubectl. Yn y llun isod rydym yn gofyn am YAML am ein gofod enw, defnydd, gwasanaeth a llwybr. Cyn hyn, fe wnaethon ni glonio'r ystorfa newydd ei chreu a cd i mewn iddi.

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

Nawr, gadewch i ni olygu'r ffeil deployment.yaml i ddileu'r maes na all Argo CD ei gysoni.

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

Yn ogystal, mae angen newid y llwybr. Yn gyntaf byddwn yn gosod newidyn aml-linell ac yna'n disodli ingress: null gyda chynnwys y newidyn hwnnw.

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

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

Felly, rydyn ni wedi datrys y ffeiliau, y cyfan sydd ar ôl yw eu cadw yn ystorfa Git. Wedi hynny, y storfa hon yw'r unig ffynhonnell wybodaeth, a dylid gwahardd yn llym unrhyw newidiadau â llaw i wrthrychau.

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

Ymhellach rydym yn symud ymlaen o'r ffaith eich bod eisoes wedi defnyddio ArgoCD (sut i wneud hyn - gweler yr uchod post). Felly, byddwn yn ychwanegu at y CD Argo yr ystorfa a grëwyd gennym, sy'n cynnwys y cod cais o'n hesiampl. Gwnewch yn siŵr eich bod yn nodi'r union ystorfa a grëwyd gennych yn gynharach.

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

Nawr, gadewch i ni greu'r cais. Mae'r cymhwysiad yn gosod gwerthoedd fel bod pecyn cymorth GitOps yn deall pa ystorfa a llwybrau i'w defnyddio, pa OpenShift sydd ei angen i reoli gwrthrychau, pa gangen benodol o'r ystorfa sydd ei hangen, ac a ddylai adnoddau gydamseru'n awtomatig.

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

Unwaith y bydd cais wedi'i nodi yn y CD Argo, mae'r pecyn cymorth yn dechrau gwirio gwrthrychau sydd eisoes wedi'u defnyddio yn erbyn y diffiniadau yn yr ystorfa. Yn ein hesiampl, mae auto-sync a glanhau yn anabl, felly nid yw'r elfennau'n newid eto. Sylwch y bydd gan ein cymhwysiad y statws “Out of Sync” yn rhyngwyneb CD Argo oherwydd nid oes label y mae ArgoCD yn ei ddarparu.
Dyma pam pan fyddwn yn dechrau cydamseru ychydig yn ddiweddarach, ni fydd y gwrthrychau yn cael eu hadleoli.

Nawr, gadewch i ni wneud rhediad prawf i sicrhau nad oes unrhyw wallau yn ein ffeiliau.

argocd app sync simple-app --dry-run

Os nad oes unrhyw wallau, gallwch symud ymlaen i gydamseru.

argocd app sync simple-app

Ar ôl rhedeg y gorchymyn cael argocd ar ein cais, dylem weld bod statws y cais wedi newid i Iach neu Synced. Bydd hyn yn golygu bod yr holl adnoddau yn y gadwrfa Git bellach yn cyfateb i'r adnoddau hynny sydd eisoes wedi'u defnyddio.

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
...   

Nawr gallwch chi alluogi cysoni a glanhau awtomatig i sicrhau nad oes unrhyw beth yn cael ei greu â llaw a bod gwrthrych yn cael ei greu neu ei ddiweddaru i'r ystorfa bob tro y bydd yn cael ei ddefnyddio.

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

Felly, rydym wedi llwyddo i ddod â chais o dan reolaeth GitOps na ddefnyddiodd GitOps mewn unrhyw ffordd i ddechrau.

Ffynhonnell: hab.com

Ychwanegu sylw