這篇文章將為大家詳細講解有關(guān)如何進行GitOps的原理分析,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
站在用戶的角度思考問題,與客戶深入溝通,找到甘南網(wǎng)站設計與甘南網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都做網(wǎng)站、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名申請、網(wǎng)站空間、企業(yè)郵箱。業(yè)務覆蓋甘南地區(qū)。
也許你之前聽說過GitOps,但是對其并不了解。在本文中,我將對其進行簡單介紹,它其實是一個應用程序開發(fā)和管理中的一個術(shù)語,其核心思想是將應用系統(tǒng)的聲明性基礎(chǔ)架構(gòu)和應用程序存放在Git的版本控制庫中。我們將介紹GitOps是什么,它將如何影響組織以及如何與Kubernetes保持同步。
什么是GitOps
GitOps是一種實現(xiàn)持續(xù)交付的模型,利用Git開發(fā)工具對云原生應用程序進行操作和管理。當將應用程序部署到Kubernetes時,Git應該是唯一的事實來源。當開發(fā)人員更改應用程序時,Git將自動把它們push到Kubernetes進行部署。而且,如果Kubernetes內(nèi)的運行狀態(tài)發(fā)生變化但與Git內(nèi)的狀態(tài)不一致,則它們會從Git內(nèi)恢復到已知狀態(tài)。
GitOps和CI/CD是十分重要的工作伙伴。CI/CD可以讓開發(fā)人員持續(xù)迭代、開發(fā)和部署應用程序。而迭代通常通過一個Git配置倉庫進行(盡管也會有其他配置倉庫)。在部署/交付階段,構(gòu)建的基于容器的應用程序被“push”到Kubernetes進行部署。GitOps會通過Kubernetes使用“pull”的方法來增強CI/CD模型,從而將運維層面帶入部署/交付中。
但是,如果有人更改了Kubernetes集群中運行的某些內(nèi)容,會發(fā)生什么?我們將使用Git作為聲明性部署工具的主要事實來源,并利用其他工具在出現(xiàn)差異時向我們發(fā)出警報。此外,通過利用可以識別運行狀態(tài)和聲明狀態(tài)之間差異的工具,Kubernetes可以修復為已知/聲明的運行狀態(tài)。
注意:持續(xù)集成和持續(xù)開發(fā)是互補但獨立的過程。在理想狀態(tài)下,GitOps會將批處理規(guī)模拆分為單件流程,每次只處理一個單元。但是,由于CI和CD流程發(fā)生在不同的組中,因此組織之間的流程可能會有所不同。
讓我們從應用程序生命周期的視角來看一下GitOps的作用。在典型的生命周期中,應用程序會經(jīng)歷多個狀態(tài),包括:
代碼
構(gòu)建
創(chuàng)建鏡像
測試
發(fā)布
而使用GitOps,這些狀態(tài)將會擴展為:
部署
在Git倉庫中監(jiān)控更改
日志更改和事件
發(fā)生更改時發(fā)出警報,并于現(xiàn)有的監(jiān)控/告警系統(tǒng)集成
更新
在GitOps操作模型下,當應用程序發(fā)布時,Kubernetes需要確保其按預期運行。同時,Kubernetes通過確保其穩(wěn)定性和可用性來管理應用程序的運維工作。如果一個開發(fā)人員通過Git更改了該應用程序,Kubernetes將會接受聲明并根據(jù)需要應用它。
GitOps為應用程序提供一個操作模型,它可以確保Git提供一個框架來統(tǒng)一應用程序的運行、操作和持續(xù)開發(fā)。
作為CI/CD流水線的一部分,GitOps為應用程序構(gòu)建/交付與運行它的位置之間提供了粘合劑。
在Kubernetes平臺中,Git為應用程序的開發(fā)和運維提供了唯一的事實來源。
應用程序交付和平臺管理都是聲明式的,同時還能通過Git進行版本控制
Git可以控制回滾、升級以及更改
開發(fā)人員不需要知道如何操作運維平臺(如Kubernetes),無需了解復雜的部署交付流程,僅需使用熟悉的工具發(fā)布新功能即可。極大提升開發(fā)者體驗。
Git控制并修證差異或“漂移”
GitOps利用審核、監(jiān)控以及回滾功能來增加應用程序發(fā)布的可靠性和穩(wěn)定性
最后,盡管在GitOps模式下還有很多工作要做,但是GitOps、DevOps以及現(xiàn)有CI/CD模式之間存在十分明顯的協(xié)同作用。GitOps提供了一種用于將應用程序交付到Kubernetes平臺的模型,該模型確保了Git是唯一的事實來源并且充分利用Kubernetes平臺上的功能。但值得注意的是,GitOps不能替代工具。恰恰相反,GitOps通過聲明性的流程和工具來強化流程、提高其成熟度并幫助團隊交付應用程序。
FluxCD(或Flux)是一個很棒的工具,它可以將Git和Kubernetes集成起來。Flux本質(zhì)上是一個Kubernetes Operator,這意味著,你作為一個管理員可以將其安裝到Kubernetes 以管理Git和原生Kubernetes之間的集成。
在Kubernetes中,Operator是Kubernetes原生平臺的擴展,是一種自定義資源的模式,該自定義資源主要用于管理應用程序及其組件。這意味著,在Kubernetes內(nèi)部Operator的幫助下,所需狀態(tài)(如運行狀態(tài))將不斷檢查和調(diào)整以符合Git倉庫聲明的內(nèi)容。Flux可以集成到你現(xiàn)有的CI/CD工具集中,以進行其他工作流程、權(quán)限批準和審核。在Kubernetes中,F(xiàn)lux會監(jiān)控你通過配置聲明的Git倉庫是否發(fā)生更改,并且如果 Kubernetes Pod上在本地發(fā)生了不應發(fā)生的更改,F(xiàn)lux將會把Kubernetes更新到所需的運行狀態(tài)。請記住,Git是事實來源。Flux Operator會檢測到這一點,并將正在運行的配置更改回聲明的狀態(tài)。
以下demo,我將會展示如何安裝和實現(xiàn)Flux。
你將需要:
一個Docker Hub鏡像倉庫,你可以將Flaskapp docker鏡像上傳到此處
一個Git Repo并連接它,然后你可以在整個演示過程中根據(jù)需要用你的設置替換“< >”中的任何內(nèi)容
安裝Kubernetes
安裝并配置fluxctl,F(xiàn)lux部署的原生安裝程序
配置Flux以連接到Git Repo
在Git Repo中升級deployment manifest
升級容器鏡像并同步
配置漂移(drift)并同步
你可以使用以下配置進行測試或演示。它包括Flask應用程序的Docker file以及Kubernetes deployment/配置文件。在演示中,你會需要它們,此外你還可以將它們上傳到你指定的Git倉庫中。
Docker File
FROM python:3 RUN pip install flask RUN mkdir -p /corp/app WORKDIR /corp/app COPY main.py . ENV FLASK_APP=/corp/app/main.py ENV APP_NAME=MyApp.DevOps ENV APP_VERSION=v1.0.0 CMD ["flask", "run", "--host=127.0.0.1"]
main.py
Python 腳本文件
import os from flask import Flask app = Flask(__name__) @app.route('/') def index(): appname = os.environ['APP_NAME'] appversion = os.environ['APP_VERSION'] response = "%s - %s.%s\n" %('Hello World', appname, appversion) return response
Kubernetes Deployment文件
apiVersion: v1 kind: Namespace metadata: name: my-demo --- apiVersion: apps/v1 kind: Deployment metadata: name: fluxdemo namespace: my-demo annotations: flux.weave.works/tag.flask: glob:develop-v* flux.weave.works/automated: 'true' labels: role: fluxdemo env: demo app: flux spec: replicas: 1 selector: matchLabels: role: fluxdemo template: metadata: labels: role: fluxdemo spec: containers: - name: nginx image: nginx:1.16-perl imagePullPolicy: IfNotPresent ports: - name: http containerPort: 80 volumeMounts: - name: nginx-proxy-config mountPath: /etc/nginx/conf.d/default.conf subPath: nginx.conf - name: flask image: docker.io/<your docker repo>/flaskapp:develop-v1.8.0 imagePullPolicy: IfNotPresent ports: - name: http containerPort: 5000 env: - name: APP_NAME value: myfluxdemo.K8s.GitOps - name: APP_VERSION value: v1.0.5 volumes: - name: nginx-proxy-config configMap: name: nginx-conf --- apiVersion: v1 kind: ConfigMap metadata: name: nginx-conf namespace: my-demo data: nginx.conf: |- #CODE1.0: #add the nginx.conf configuration - this will be referenced within the deployment.yaml server { listen 80; server_name localhost; location / { proxy_pass http://localhost:5000/; proxy_set_header Host "localhost"; } }
安裝Fluxctl
https://docs.fluxcd.io/en/1.18.0/references/fluxctl.html
安裝Fluxcd
https://docs.fluxcd.io/en/1.18.0/tutorials/get-started.html
創(chuàng)建一個命名空間
kubectl create ns <namespace> export FLUX_FORWARD_NAMESPACE= <namespace> fluxctl list-workloads
安裝Fluxcd以建立與你的Git Repo的連接
export GHUSER="" export REPO="gitops-demo" export NS="flux" fluxctl install \ --git-user=${GHUSER} \ --git-email=${GHUSER}@users.noreply.github.com \ --git-url=git@github.com: Image download failed. {REPO} \ --namespace=${NS} | kubectl apply -f -
在你的terminal中輸入以下命令,以獲取下一步所需的密鑰:
fluxctl identity
打開Github,導航到安裝Fluxcd時添加的倉庫,轉(zhuǎn)到設置-部署密鑰,單擊【添加部署密鑰】,為其指定title,選中【允許write access】,粘貼公共密鑰,然后單擊【添加密鑰】。
打開你的Git Repo,里面應該有deployment.yaml
文件,向下滑動直到如下所示部分,然后更改APP_VERSION號碼
env: - name: APP_NAME value: myfluxdemo.K8s.GitOps - name: APP_VERSION value: v1.0.5
保存并Commit更改到你的Repo。
Flux將在5分鐘之內(nèi)升級你的deployment
要從localhost進行測試,請在Kubernetes中使用“Port-forward”命令:
kubectl get pods -n copy the pod name kubectl port-forward 8080:80 -n
打開其他terminal:
curl -s -i http://localhost:8080
現(xiàn)在讓我們對Docker鏡像進行修改并將其上傳到我們的Docker Hub鏡像倉庫中。為此,我們將修改flaskapp目錄中的main.py文件。
升級main.py
文件。將Hello World
更改為其他內(nèi)容
response = "%s - %s.%s\n" %('Flux World', appname, appversion)
創(chuàng)建一個新的Docker文件并上傳到Docker(以及另一個增量版本號)。
等待5分鐘,F(xiàn)lux將會自動部署新鏡像
現(xiàn)在,我們來測試一下手動更改正在運行的配置會發(fā)生什么。
kubectl scale deployment/fluxdemo --replicas=4 -n
現(xiàn)在,我們花幾分鐘來看看pod并觀察發(fā)生了什么。我們將會在短時間內(nèi)(5分鐘以內(nèi))看到其他的pod,此外我們還將看到許多pod終止。因此,F(xiàn)lux已使配置恢復到當前在Git中保留的已聲明的部署狀態(tài)。
kubectl get po -n --watch
重新運行相同的命令,并且你會看到目前僅有一個正在運行的pod。
別忘了清理和移除deployment和Git連接(如果你想移除它)。否則,你需要開始添加更多的倉庫并繼續(xù)進行構(gòu)建。
關(guān)于如何進行GitOps的原理分析就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
文章題目:如何進行GitOps的原理分析
URL地址:http://www.chinadenli.net/article46/pgiceg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、定制開發(fā)、網(wǎng)站策劃、做網(wǎng)站、網(wǎng)站收錄、云服務器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)