Bubuka ka GitOps pikeun OpenShift

Dinten ieu kami bakal ngobrol ngeunaan prinsip sareng modél GitOps, ogé kumaha modél ieu dilaksanakeun dina platform OpenShift. Pitunjuk interaktif ngeunaan topik ieu sayogi link.

Bubuka ka GitOps pikeun OpenShift

Singkatna, GitOps mangrupikeun sakumpulan prakték pikeun ngagunakeun pamundut tarik Git pikeun ngatur infrastruktur sareng konfigurasi aplikasi. Repository Git di GitOps diperlakukeun salaku sumber tunggal inpormasi ngeunaan kaayaan sistem, sareng parobahan naon waé dina kaayaan ieu tiasa dilacak sareng diaudit.

Gagasan pikeun ngalacak parobahan dina GitOps sanés énggal; pendekatan ieu parantos lami dianggo ampir sacara universal nalika damel sareng kode sumber aplikasi. GitOps saukur implements fitur sarupa (ulasan, requests tarikan, tag, jsb) dina infrastruktur sarta manajemén konfigurasi aplikasi tur nyadiakeun mangpaat sarupa saperti dina kasus manajemén kode sumber.

Henteu aya definisi akademik atanapi set aturan anu disatujuan pikeun GitOps, ngan ukur sakumpulan prinsip anu ngawangun prakték ieu:

  • Déskripsi déklaratif sistem disimpen dina gudang Git (configs, monitoring, jsb.).
  • Parobahan kaayaan dijieun ngaliwatan requests tarikan.
  • Kaayaan sistem anu ngajalankeun saluyu sareng data dina gudang nganggo pamundut Git push.

Prinsip GitOps

  • Definisi sistem digambarkeun salaku kode sumber

Konfigurasi sistem diperlakukeun salaku kode sahingga bisa disimpen sarta otomatis versioned dina gudang Git, nu boga fungsi minangka sumber tunggal bebeneran. Pendekatan ieu ngagampangkeun pikeun ngaluncurkeun sareng ngabalikan deui parobahan dina sistem.

  • Kaayaan sareng konfigurasi sistem anu dipikahoyong diatur sareng versi dina Git

Ku cara nyimpen sareng ngarobihkeun kaayaan sistem anu dipikahoyong dina Git, urang tiasa gampang ngagulung sareng ngagulung deui parobihan kana sistem sareng aplikasi. Urang ogé tiasa nganggo mékanisme kaamanan Git pikeun ngadalikeun kapamilikan kode sareng pariksa kaaslianana.

  • Parobahan konfigurasi bisa otomatis dilarapkeun via requests tarikan

Ngagunakeun requests Git pull, urang bisa kalayan gampang ngadalikeun kumaha parobahan dilarapkeun ka konfigurasi dina gudang. Contona, aranjeunna bisa dibikeun ka anggota tim séjén pikeun review atawa ngajalankeun ngaliwatan tés CI, jsb.

Sareng dina waktos anu sami, henteu kedah ngadistribusikaeun kakawasaan admin ka kénca sareng ka katuhu. Pikeun ngalakukeun parobahan konfigurasi, pangguna ngan ukur peryogi idin anu pas dina gudang Git dimana konfigurasi éta disimpen.

  • Ngalereskeun masalah drift uncontrolled of konfigurasi

Sakali kaayaan sistem anu dipikahoyong disimpen dina gudang Git, anu kedah urang laksanakeun nyaéta milarian parangkat lunak anu bakal mastikeun yén kaayaan sistem ayeuna cocog sareng kaayaan anu dipikahoyong. Upami ieu sanés masalahna, maka parangkat lunak ieu kedah - gumantung kana setélan - ngaleungitkeun panyimpangan nyalira, atanapi ngawartosan kami ngeunaan drift konfigurasi.

Modél GitOps pikeun OpenShift

Reconciler Sumberdaya Dina-Kluster

Numutkeun model ieu, kluster boga controller nu jawab ngabandingkeun sumberdaya Kubernetes (file YAML) dina Repository Git kalawan sumberdaya nyata kluster. Lamun discrepancies dideteksi, controller ngirim bewara jeung kamungkinan nyokot tindakan pikeun ngabenerkeun discrepancies. Modél GitOps ieu dianggo dina Anthos Config Management sareng Weaveworks Flux.

Bubuka ka GitOps pikeun OpenShift

Rekonsiliasi Sumberdaya Éksternal (Push)

Modél ieu bisa dianggap salaku variasi ti saméméhna, lamun urang boga hiji atawa leuwih controller jawab nyingkronkeun sumberdaya dina pasangan "Git Repository - Kubernetes cluster". Bédana di dieu nyaéta unggal kluster anu diurus henteu kedah gaduh pangontrol anu misah. Git - k8s pasangan klaster mindeng dihartikeun salaku CRDs (definisi sumberdaya custom), nu bisa ngajelaskeun kumaha controller kudu nedunan sinkronisasi. Dina modél ieu, controller ngabandingkeun Repository Git dieusian dina CRD kalawan sumberdaya cluster Kubernetes, nu ogé dieusian dina CRD, sarta ngalakukeun tindakan luyu dumasar kana hasil tina ngabandingkeun. Khususna, modél GitOps ieu dianggo dina ArgoCD.

Bubuka ka GitOps pikeun OpenShift

GitOps dina platform OpenShift

Administrasi infrastruktur Kubernetes multi-cluster

Kalayan sumebarna Kubernetes sareng popularitas strategi multi-awan sareng komputasi tepi, jumlah rata-rata klaster OpenShift per palanggan ogé ningkat.

Contona, nalika ngagunakeun komputasi ujung, klaster hiji customer urang bisa deployed dina ratusan atawa malah rébuan. Hasilna, anjeunna kapaksa ngatur sababaraha klaster OpenShift mandiri atanapi terkoordinasi dina awan umum sareng di premis.

Dina hal ieu, seueur masalah anu kedah direngsekeun, khususna:

  • Kontrol yén klaster aya dina kaayaan anu sami (configs, monitoring, neundeun, jsb.)
  • Jieun deui (atawa balikkeun) klaster dumasar kana kaayaan dipikawanoh.
  • Jieun klaster anyar dumasar kana kaayaan dipikawanoh.
  • Gulungkeun parobahan kana sababaraha klaster OpenShift.
  • Gulung deui parobahan dina sababaraha klaster OpenShift.
  • Link konfigurasi templated ka lingkungan béda.

Konfigurasi Aplikasi

Salila siklus hirupna, aplikasi sering ngaliwat ranté klaster (dev, panggung, jsb) sateuacan ditungtungan dina klaster produksi. Salaku tambahan, kusabab kasadiaan sareng syarat skalabilitas, para nasabah sering nyebarkeun aplikasi dina sababaraha klaster di premis atanapi sababaraha daérah platform awan umum.

Dina hal ieu, tugas di handap ieu kudu direngsekeun:

  • Mastikeun gerakan aplikasi (binér, configs, jsb) antara klaster (dev, panggung, jsb).
  • Gulungkeun parobihan kana aplikasi (binér, konfigurasi, jsb) dina sababaraha klaster OpenShift.
  • Gulung deui parobahan aplikasi kana kaayaan dipikawanoh saméméhna.

OpenShift GitOps Use Cases

1. Nerapkeun parobahan tina gudang Git

Administrator kluster tiasa nyimpen konfigurasi kluster OpenShift dina gudang Git sareng otomatis nerapkeunana pikeun gampang nyieun klaster anyar sareng mawa kana kaayaan anu sami sareng kaayaan anu dipikanyaho disimpen dina gudang Git.

2. Sinkronisasi sareng Manajer Rusiah

Administrator ogé bakal nguntungkeun tina kamampuan pikeun nyingkronkeun objék rahasia OpenShift sareng parangkat lunak anu cocog sapertos Vault pikeun ngatur éta nganggo alat anu didamel khusus pikeun ieu.

3. Kontrol konfigurasi drift

Admin ngan ukur bakal resep upami OpenShift GitOps sorangan ngidentipikasi sareng ngingetkeun ngeunaan panyimpangan antara konfigurasi nyata sareng anu ditunjuk dina gudang, supados aranjeunna tiasa gancang ngabales drift.

4. Bewara ngeunaan drift konfigurasi

Éta mangpaat dina kasus nalika administrator hayang gancang diajar ngeunaan kasus drift konfigurasi pikeun gancang nyandak ukuran luyu sorangan.

5. Sinkronisasi manual tina konfigurasi nalika drifting

Ngidinan admin pikeun nyingkronkeun klaster OpenShift sareng Repository Git upami aya konfigurasi drift, pikeun gancang mulangkeun klaster ka kaayaan anu dikenal sateuacana.

6.Singkronisasi otomatis tina konfigurasi nalika drifting

Administrator ogé tiasa ngonpigurasikeun kluster OpenShift pikeun otomatis nyingkronkeun sareng gudang nalika aya drift dideteksi, supados konfigurasi kluster salawasna cocog sareng konfigurasi di Git.

7. Sababaraha klaster - hiji Repository

Administrator tiasa nyimpen konfigurasi sababaraha klaster OpenShift anu béda dina hiji gudang Git sareng selektif nerapkeunana upami diperyogikeun.

8. Hierarki konfigurasi klaster (warisan)

Admin tiasa nyetel hirarki konfigurasi klaster dina gudang (panggung, prod, portopolio aplikasi, jsb kalawan warisan). Dina basa sejen, eta bisa nangtukeun naha konfigurasi kudu dilarapkeun ka hiji atawa leuwih klaster.

Salaku conto, upami administrator netepkeun hirarki "Kluster Produksi (prod) → Kluster Sistem X → Kluster produksi sistem X" dina gudang Git, teras kombinasi konfigurasi di handap ieu diterapkeun kana kluster produksi sistem X:

  • Konfigurasi umum pikeun sadaya klaster produksi.
  • Konfigurasi pikeun kluster System X.
  • Konfigurasi pikeun kluster produksi sistem X.

9. Citakan jeung konfigurasi overrides

Administrator tiasa nimpa sakumpulan configs anu diwariskeun sareng nilaina, contona, pikeun nyaluyukeun konfigurasi pikeun klaster khusus anu bakal diterapkeun.

10. Selektif kaasup jeung ngaluarkeun pikeun konfigurasi, konfigurasi aplikasi

Administrator tiasa nyetél kaayaan pikeun aplikasi atanapi non-aplikasi tina konfigurasi tangtu kana klaster kalawan ciri nu tangtu.

11. rojongan template

Pamekar bakal nguntungkeun tina kamampuhan pikeun milih kumaha sumberdaya aplikasi bakal dihartikeun (Helm Bagan, murni Kubernetes yaml, jsb) guna ngagunakeun format paling luyu pikeun tiap aplikasi husus.

Alat GitOps dina platform OpenShift

ArgoCD

ArgoCD nerapkeun modél Reconcile Sumberdaya Eksternal sareng nawiskeun UI terpusat pikeun ngatur hubungan hiji-ka-loba antara klaster sareng gudang Git. Kakurangan program ieu kalebet henteu mampuh ngatur aplikasi nalika ArgoCD henteu jalan.

ramatloka resmi

ngocor

Flux ngalaksanakeun modél On-Cluster Resource Reconcile sareng, salaku hasilna, teu aya manajemén terpusat tina gudang definisi, anu mangrupikeun titik lemah. Di sisi anu sanés, kusabab kurangna sentralisasi, kamampuan pikeun ngatur aplikasi tetep sanajan hiji klaster gagal.

ramatloka resmi

Masang ArgoCD dina OpenShift

ArgoCD nawiskeun antarbeungeut garis paréntah sareng konsol wéb anu saé, janten kami moal nutupan Flux sareng alternatif sanésna di dieu.

Pikeun nyebarkeun ArgoCD dina platform OpenShift 4, tuturkeun léngkah ieu salaku administrator klaster:

Nerapkeun komponén ArgoCD dina platform 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}')

Perbaikan Server ArgoCD supados tiasa katingali ku 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

Deploying ArgoCD Cli Alat

# 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

Ngarobah sandi admin 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

Saatos ngalengkepan léngkah-léngkah ieu, anjeun tiasa damel sareng Server ArgoCD ngalangkungan konsol wéb ArgoCD WebUI atanapi alat garis paréntah ArgoCD Cli.
https://blog.openshift.com/is-it-too-late-to-integrate-gitops/

GitOps - Henteu Kasep

"Karéta parantos angkat" - ieu anu aranjeunna nyarioskeun ngeunaan kaayaan nalika kasempetan pikeun ngalakukeun hiji hal anu sono. Dina kasus OpenShift, kahayang pikeun langsung mimitian nganggo platform anyar anu keren ieu sering nyiptakeun kaayaan ieu kalayan manajemén sareng pangropéa rute, panyebaran sareng objék OpenShift anu sanés. Tapi kasempetan salawasna leungit lengkep?

Nuluykeun runtuyan artikel ngeunaan GitOps, Dinten ieu kami bakal nunjukkeun anjeun kumaha cara ngarobih aplikasi buatan tangan sareng sumberna janten prosés dimana sadayana diurus ku alat GitOps. Jang ngalampahkeun ieu, urang mimiti sacara manual nyebarkeun aplikasi httpd. Potret layar di handap nunjukkeun kumaha urang nyiptakeun rohangan ngaran, panyebaran sareng jasa, teras ngalaan jasa ieu pikeun nyiptakeun rute.

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

Janten urang gaduh aplikasi buatan tangan. Ayeuna éta kedah ditransfer dina manajemén GitOps tanpa kaleungitan kasadiaan. Pondokna, éta ngalakukeun ieu:

  • Jieun gudang Git pikeun kode.
  • Urang ékspor objék urang ayeuna jeung unggah ka gudang Git.
  • Milih sareng nyebarkeun alat GitOps.
  • Urang tambahkeun gudang kami ka toolkit ieu.
  • Urang nangtukeun aplikasi dina toolkit GitOps urang.
  • Urang ngalakukeun uji coba aplikasi nganggo toolkit GitOps.
  • Urang nyingkronkeun objék ngagunakeun toolkit GitOps.
  • Aktipkeun pruning sareng sinkronisasi otomatis objék.

Sakumaha didadarkeun di saméméhna artikel, dina GitOps aya hiji sareng ngan hiji sumber inpormasi ngeunaan sadaya objék dina klaster Kubernetes (s) - gudang Git. Salajengna, urang teraskeun tina premis yén organisasi anjeun parantos nganggo gudang Git. Éta tiasa umum atanapi swasta, tapi kedah tiasa diaksés ku klaster Kubernetes. Ieu tiasa janten gudang anu sami sareng kode aplikasi, atanapi gudang anu misah didamel khusus pikeun panyebaran. Disarankeun gaduh idin anu ketat dina gudang sabab rusiah, rute, sareng hal anu sénsitip kaamanan sanésna bakal disimpen di dinya.

Dina conto urang, urang bakal nyieun Repository publik anyar dina GitHub. Anjeun tiasa nelepon deui naon anjeun resep, kami nganggo nami blogpost.

Upami file obyék YAML henteu disimpen sacara lokal atanapi di Git, maka anjeun kedah nganggo binari oc atanapi kubectl. Dina screenshot di handap ieu kami nyuhunkeun YAML pikeun namespace, panyebaran, jasa sareng rute kami. Sateuacan ieu, urang dikloning Repository anu nembé diciptakeun sareng cd kana éta.

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

Ayeuna hayu urang ngédit file deployment.yaml pikeun miceun widang nu Argo CD teu bisa nyingkronkeun.

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

Sajaba ti éta, jalur perlu dirobah. Urang bakal mimiti nyetel variabel multiline lajeng ngaganti ingress: null kalawan eusi variabel éta.

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

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

Janten, kami parantos nyortir file, sadayana anu tetep nyaéta nyimpen kana gudang Git. Saatos éta Repository ieu janten hiji-hijina sumber inpormasi, sareng sagala parobihan manual pikeun objék kedah dilarang pisan.

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

Salajengna urang teraskeun tina kanyataan yén anjeun parantos nyebarkeun ArgoCD (kumaha carana ngalakukeun ieu - tingali sateuacana pasang). Ku alatan éta, urang bakal nambahan kana CD Argo Repository kami dijieun, ngandung kodeu aplikasi tina conto urang. Ngan pastikeun yén anjeun tangtukeun Repository pasti nu dijieun saméméhna.

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

Ayeuna hayu urang nyieun aplikasi. Aplikasi netepkeun nilai supados toolkit GitOps ngartos gudang sareng jalur mana anu dianggo, anu OpenShift diperyogikeun pikeun ngatur obyék, anu peryogi cabang khusus tina gudang, sareng naha sumber daya kedah nyingkronkeun otomatis.

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

Sakali hiji aplikasi dieusian dina CD Argo, toolkit dimimitian mariksa objék geus deployed ngalawan definisi dina gudang. Dina conto urang, sinkronisasi otomatis sareng beberesih ditumpurkeun, janten unsur-unsurna henteu acan robih. Punten dicatet yén dina antarmuka CD Argo, aplikasi urang bakal ngagaduhan status "Out of Sync" sabab teu aya labél anu disayogikeun ku ArgoCD.
Ieu naha nalika urang ngamimitian sinkronisasi saeutik engké, objék moal redeployed.

Ayeuna hayu urang ngalakukeun uji coba pikeun mastikeun teu aya kasalahan dina file urang.

argocd app sync simple-app --dry-run

Upami teu aya kasalahan, anjeun tiasa teraskeun kana sinkronisasi.

argocd app sync simple-app

Saatos ngajalankeun paréntah argocd get dina aplikasi urang, urang kedah ningali yén status aplikasi parantos robih janten Sehat atanapi Disingkronkeun. Ieu bakal hartosna yén sadaya sumber daya dina gudang Git ayeuna pakait sareng sumber daya anu parantos disebarkeun.

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

Ayeuna anjeun tiasa ngaktipkeun sinkronisasi otomatis sareng ngabersihkeun pikeun mastikeun yén teu aya anu didamel sacara manual sareng unggal waktos obyék didamel atanapi diropéa kana gudang, panyebaran bakal kajantenan.

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

Janten, kami parantos suksés nyandak aplikasi dina kontrol GitOps anu mimitina henteu nganggo GitOps dina cara naon waé.

sumber: www.habr.com

Tambahkeun komentar