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