久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何進行GitOps的原理分析

182次閱讀
沒有評論

共計 5846 個字符,預計需要花費 15 分鐘才能閱讀完成。

這篇文章將為大家詳細講解有關如何進行 GitOps 的原理分析,文章內容質量較高,因此丸趣 TV 小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

也許你之前聽說過 GitOps,但是對其并不了解。在本文中,我將對其進行簡單介紹,它其實是一個應用程序開發和管理中的一個術語,其核心思想是將應用系統的聲明性基礎架構和應用程序存放在 Git 的版本控制庫中。我們將介紹 GitOps 是什么,它將如何影響組織以及如何與 Kubernetes 保持同步。

什么是 GitOps

GitOps 是一種實現持續交付的模型,利用 Git 開發工具對云原生應用程序進行操作和管理。當將應用程序部署到 Kubernetes 時,Git 應該是唯一的事實來源。當開發人員更改應用程序時,Git 將自動把它們 push 到 Kubernetes 進行部署。而且,如果 Kubernetes 內的運行狀態發生變化但與 Git 內的狀態不一致,則它們會從 Git 內恢復到已知狀態。

GitOps 與 CI/CD:它們之間有什么聯系?

GitOps 和 CI/CD 是十分重要的工作伙伴。CI/CD 可以讓開發人員持續迭代、開發和部署應用程序。而迭代通常通過一個 Git 配置倉庫進行(盡管也會有其他配置倉庫)。在部署 / 交付階段,構建的基于容器的應用程序被“push”到 Kubernetes 進行部署。GitOps 會通過 Kubernetes 使用“pull”的方法來增強 CI/CD 模型,從而將運維層面帶入部署 / 交付中。

但是,如果有人更改了 Kubernetes 集群中運行的某些內容,會發生什么?我們將使用 Git 作為聲明性部署工具的主要事實來源,并利用其他工具在出現差異時向我們發出警報。此外,通過利用可以識別運行狀態和聲明狀態之間差異的工具,Kubernetes 可以修復為已知 / 聲明的運行狀態。

注意:持續集成和持續開發是互補但獨立的過程。在理想狀態下,GitOps 會將批處理規模拆分為單件流程,每次只處理一個單元。但是,由于 CI 和 CD 流程發生在不同的組中,因此組織之間的流程可能會有所不同。

GitOps 和應用程序生命周期

讓我們從應用程序生命周期的視角來看一下 GitOps 的作用。在典型的生命周期中,應用程序會經歷多個狀態,包括:

代碼

構建

創建鏡像

測試

發布

而使用 GitOps,這些狀態將會擴展為:

部署

在 Git 倉庫中監控更改

日志更改和事件

發生更改時發出警報,并于現有的監控 / 告警系統集成

更新

在 GitOps 操作模型下,當應用程序發布時,Kubernetes 需要確保其按預期運行。同時,Kubernetes 通過確保其穩定性和可用性來管理應用程序的運維工作。如果一個開發人員通過 Git 更改了該應用程序,Kubernetes 將會接受聲明并根據需要應用它。

GitOps 帶來了什么?

GitOps 為應用程序提供一個操作模型,它可以確保 Git 提供一個框架來統一應用程序的運行、操作和持續開發。

作為 CI/CD 流水線的一部分,GitOps 為應用程序構建 / 交付與運行它的位置之間提供了粘合劑。

在 Kubernetes 平臺中,Git 為應用程序的開發和運維提供了唯一的事實來源。

應用程序交付和平臺管理都是聲明式的,同時還能通過 Git 進行版本控制

Git 可以控制回滾、升級以及更改

開發人員不需要知道如何操作運維平臺(如 Kubernetes),無需了解復雜的部署交付流程,僅需使用熟悉的工具發布新功能即可。極大提升開發者體驗。

Git 控制并修證差異或“漂移”

GitOps 利用審核、監控以及回滾功能來增加應用程序發布的可靠性和穩定性

最后,盡管在 GitOps 模式下還有很多工作要做,但是 GitOps、DevOps 以及現有 CI/CD 模式之間存在十分明顯的協同作用。GitOps 提供了一種用于將應用程序交付到 Kubernetes 平臺的模型,該模型確保了 Git 是唯一的事實來源并且充分利用 Kubernetes 平臺上的功能。但值得注意的是,GitOps 不能替代工具。恰恰相反,GitOps 通過聲明性的流程和工具來強化流程、提高其成熟度并幫助團隊交付應用程序。

GitOps 實踐:FluxCD Demo

FluxCD(或 Flux)是一個很棒的工具,它可以將 Git 和 Kubernetes 集成起來。Flux 本質上是一個 Kubernetes Operator,這意味著,你作為一個管理員可以將其安裝到 Kubernetes 以管理 Git 和原生 Kubernetes 之間的集成。

在 Kubernetes 中,Operator 是 Kubernetes 原生平臺的擴展,是一種自定義資源的模式,該自定義資源主要用于管理應用程序及其組件。這意味著,在 Kubernetes 內部 Operator 的幫助下,所需狀態(如運行狀態)將不斷檢查和調整以符合 Git 倉庫聲明的內容。Flux 可以集成到你現有的 CI/CD 工具集中,以進行其他工作流程、權限批準和審核。在 Kubernetes 中,Flux 會監控你通過配置聲明的 Git 倉庫是否發生更改,并且如果 Kubernetes Pod 上在本地發生了不應發生的更改,Flux 將會把 Kubernetes 更新到所需的運行狀態。請記住,Git 是事實來源。Flux Operator 會檢測到這一點,并將正在運行的配置更改回聲明的狀態。

以下 demo,我將會展示如何安裝和實現 Flux。

前期準備

你將需要:

一個 Docker Hub 鏡像倉庫,你可以將 Flaskapp docker 鏡像上傳到此處

一個 Git Repo 并連接它,然后你可以在整個演示過程中根據需要用你的設置替換“”中的任何內容

具體步驟

安裝 Kubernetes

安裝并配置 fluxctl,Flux 部署的原生安裝程序

配置 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 
 }
 }

安裝 Flux

安裝 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

為 Repo 配置 Flux

創建一個命名空間

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 -

創建 SSH 密鑰以添加到 Github 倉庫

在你的 terminal 中輸入以下命令,以獲取下一步所需的密鑰:

fluxctl identity

打開 Github,導航到安裝 Fluxcd 時添加的倉庫,轉到設置 - 部署密鑰,單擊【添加部署密鑰】,為其指定 title,選中【允許 write access】,粘貼公共密鑰,然后單擊【添加密鑰】。

在 Git Repo 中升級 Deployment Manifest

打開你的 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 分鐘之內升級你的 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

升級容器鏡像并同步

現在讓我們對 Docker 鏡像進行修改并將其上傳到我們的 Docker Hub 鏡像倉庫中。為此,我們將修改 flaskapp 目錄中的 main.py 文件。

升級 main.py 文件。將 Hello World 更改為其他內容

response =  %s - %s.%s\n  %(Flux World , appname, appversion)

創建一個新的 Docker 文件并上傳到 Docker(以及另一個增量版本號)。

等待 5 分鐘,Flux 將會自動部署新鏡像

配置漂移并同步

現在,我們來測試一下手動更改正在運行的配置會發生什么。

kubectl scale deployment/fluxdemo --replicas=4 -n

現在,我們花幾分鐘來看看 pod 并觀察發生了什么。我們將會在短時間內(5 分鐘以內)看到其他的 pod,此外我們還將看到許多 pod 終止。因此,Flux 已使配置恢復到當前在 Git 中保留的已聲明的部署狀態。

kubectl get po -n --watch

重新運行相同的命令,并且你會看到目前僅有一個正在運行的 pod。

別忘了清理和移除 deployment 和 Git 連接(如果你想移除它)。否則,你需要開始添加更多的倉庫并繼續進行構建。

關于如何進行 GitOps 的原理分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-16發表,共計5846字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 竹山县| 达州市| 呼玛县| 齐齐哈尔市| 皋兰县| 定远县| 诸暨市| 松江区| 大城县| 石渠县| 东乡县| 横山县| 民权县| 安塞县| 沙雅县| 普兰店市| 贵南县| 阜宁县| 资中县| 噶尔县| 宝山区| 阜新市| 泗水县| 太康县| 武汉市| 营山县| 巨野县| 德保县| 县级市| 习水县| 临澧县| 吉水县| 五大连池市| 穆棱市| 江达县| 礼泉县| 利辛县| 宣威市| 宁国市| 平塘县| 阳曲县|