[GitOps]微服務版本控制:使用ArgoCD 部署Grafana Loki

背景介紹

請回答:你們是如何保證線上部署的服務,從服務版本到參數配置,都是和測試通過的版本是一致的呢?

本文將介紹GitOps的基本原理以及ArgoCD的使用:ArgoCD部署Grafana Loki 到k8s集群。

本文項目地址:郭麻花的Azure Devops argo-cd - Repos (azure.com)

什么是GitOps

GitOps通常作為k8s集群中的一項基礎設施。它將Git倉庫中的服務清單作為唯一版本來源,并且提供自動部署機制。

GitOps提供了高度自動化和審計朔源能力來管理集群服務,大大提高團隊交付效率與安全一致性。

ArgoCD

ArgoCD是一個用于Kubernetes集群的開源且強大的GitOps工具。

Argo CD Architecture

ArgoCD可以做什么

  • ArgoCD可以管理各種Kubernetes原生資源,如Deployment、Service、ConfigMap、Secret等;
  • ArgoCD還可以管理Helm Chart,Kubernetes CRD等;
  • ArgoCD還可以管理有狀態服務,如PersistentVolumeClaim等。

總之,你可以將ArgoCD看作是集群的管家,它可以嚴格按照Git倉庫中的清單文件,時刻監視清單與集群資源的差異,并提供自動/手動?同步機制。

ArgoCD Application?

Application是由ArgoCD創建的一種Kubernetes CRD。一個k8s服務通常包含多種資源,例如:deployment, secret, configmap 或者CRD等等,而ArgoCD 可以將這些資源視為一個Application進行管理。

假如你們的服務已經被打包成了Helm Chart,更容易通過ArgoCD Application來進行管理。

注意:ArgoCD在部署Helm Chart時會將Chart重新拆解為各項資源文件進行部署,因此你無法通過Helm來管理ArgoCD部署的Helm Chart。

另外:Application可以包含其它Application。你可以在ArgoCD中對集群中的服務進行邏輯劃分,將多個Application聚合到一個Application下進行管理。

使用Helm安裝ArgoCD

使用helm安裝ArgoCD非常簡單,但是需要注意:

即使在具有充分的Cluster Role的情況下,ArgoCD 默認也只允許資源部署到它所在的命名空間。我們可以通過指定server參數 --application-namespaces="*",讓ArgoCD允許資源部署到其他命名空間。

helm repo add argo https://argoproj.github.io/argo-helmhelm install my-release argo/argo-cd

我們可以通過port-forward argocd-server 8080端口,并使用init-secret中的admin密碼訪問Argocd。

創建Git清單倉庫

Grafana Loki是一個開源的高性能的集群日志聚合服務,它的原理與Promthus相似,與Grafana結合使用,可以獲得與EFK解決方案相同的集群日志聚合可視化能力。

我將使用ArgoCD來部署Grafana Loki到集群中,請參考:?argo-cd - sample (azure.com)

例如,下面是包含了 Loki helm chart的ArgocCD Application:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:name: lokinamespace: argocd
spec:syncPolicy:syncOptions:- ServerSideApply=trueproject: defaultsource:chart: lokirepoURL: https://grafana.github.io/helm-chartstargetRevision: 5.9.2helm:releaseName: lokivalues: |loki:auth_enabled: falsecommonConfig:replication_factor: 1storage:type: 'filesystem'singleBinary:replicas: 1destination:server: "https://kubernetes.default.svc"namespace: loki

添加Repositories和certificates

現在,我們需要將Helm Chart倉庫和Apps Git倉庫以及它們的訪問憑證添加到ArgoCD當中。

我所用到的是公開的Helm Chart倉庫和Git倉庫,假如你使用的是私有倉庫,你需要為它指定連接所必須的憑證。對于Azure Git來說,只需要一個PAT(personal access token)

創建Grafana Loki App

我們用上面創建好的Git Repo地址,創建一個名為grafana-loki的App.

該Application包含了三個Application:Promtail, Loki, Grafana。

此時,這三個App的狀態是Missing,意味著在集群中不存在;如果是集群版本與Git版本不一致,狀態應該是OutSync;集群服務與Git倉庫一致,則是Synced。

Application狀態圖例

Grafana Loki

讓ArgoCD管理自己

最后,我要介紹一下如何讓ArgoCD管理它自己。我們前面使用Helm安裝了ArgoCD,因此當前集群中ArgoCD服務是由Helm來管理的,這意味著集群服務現在有著兩種不同的管理模式。

1. 我們需要在Git倉庫中創建一個Application表示當前ArgoCD服務:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:name: argo-cdnamespace: argocdfinalizers:- resources-finalizer.argocd.argoproj.io
spec:destination:server: https://kubernetes.default.svcnamespace: argocdproject: defaultsource:chart: argo-cdrepoURL: https://argoproj.github.io/argo-helmtargetRevision: 5.43.3helm:values: |server:extraArgs:- --application-namespaces="*"- --insecuresyncPolicy:automated:prune: trueselfHeal: true

2. 如上,使用上面的Application yaml,在ArgoCD中為它自己創建一個App。?

3. 等待app狀態自己變為Synced,我們可以看到ArgoCD相關的pod將被重新創建出來,之后ArgoCD將管理它自己的狀態。

4. 移除ArgoCD的Helm標記,之后我們將無法再通過Helm管理集群中的ArgoCD服務,而是由ArgoCD自己來管理自己。

kubectl delete secret -l owner=helm,name=argo-cd -n argocd

總結?

當然,能夠實現GitOps的技術還有很多,GitOps的價值也不僅僅是自動化,可溯源。

例如:我們還可以使用ArgoCD的ApplicationSet為不同環境下的app定制不同的參數;我們也可以利用Git倉庫的分支和pr策略,在CI階段進行smoke test,或者其它更有價值的Actions。

總之,我們應盡可能采取科學的,優雅的技術來不斷優化軟件工程。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/39831.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39831.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39831.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

詳細介紹如何使用 OpenCV 對圖像進行銳化

將了解銳化圖像的過程,我們將使用內核來突出顯示每個特定像素并增強其發出的顏色。它與模糊過程非常相似,只不過現在我們不是創建一個內核來平均每個像素強度,而是創建一個內核,該內核將使像素強度更高,因此對人眼來說更加突出。 了解流程的后端。 很高興知道內核用于模糊…

Nginx 解決api跨域問題

環境: nginx 1.22.1 寶塔8.0 php lavarel 在nginx里加入下面的設置 #這里填*就是任何域名都允許跨域add_header Access-Control-Allow-Origin "*";#CORS請求默認不發送Cookie和HTTP認證信息。但是如果要把Cookie發到服務器,要服務器同意&#xff0c…

Webpack和Parcel詳解

構建工具和打包器是在開發過程中幫助組織、優化和打包項目的工具。它們可以處理依賴管理、資源優化、代碼轉換等任務,從而使開發流程更高效。以下是關于構建工具和打包器的一些指導: **Webpack:** Webpack 是一個功能強大的模塊打包器&#…

Java“牽手”1688商品詳情頁面數據獲取方法,1688API實現批量商品數據抓取示例

背景:1688商城是一個網上購物平臺,售賣各類商品,包括服裝、鞋類、家居用品、美妝產品、電子產品等。要獲取1688商品詳情數據,您可以通過開放平臺的接口或者直接訪問1688商城的網頁來獲取商品詳情信息。以下是兩種常用方法的介紹&a…

538頁21萬字數字政府智慧政務大數據云平臺項目建設方案WORD

導讀:原文《538頁21萬字數字政府智慧政務大數據云平臺項目建設方案WORD》(獲取來源見文尾),本文精選其中精華及架構部分,邏輯清晰、內容完整,為快速形成售前方案提供參考。 根據業務的不同屬性&#xff0c…

深入解析 Axios Blob 的使用方法及技巧

在 Web 開發中,處理文件傳輸是一個常見的需求。Blob(二進制對象)是一種表示二進制數據的方式,常用于處理文件和多媒體數據。本文將介紹如何使用 Axios 和 Blob 來處理文件傳輸。 Axios Blob 概念 在開始之前,讓我們先…

IC流程中 DFT 學習筆記(1)

引言 DFT是ASIC芯片設計流程中不可或缺的環節。其主要目的是在芯片前端設計驗證完成后插入一些諸如寄存器鏈等可供測試的邏輯,算是IC后端設計的范疇。主要是在ASIC芯片流片完成后,通過這些已插入的邏輯,檢測流片得到的芯片的制造質量。檢測一…

Go framework-Beego

一、Beego Beego用于在Go中快速開發企業應用程序,包括RESTful API、web應用程序和后端服務。 Beego 源碼地址 Beego 官方站點 Beego 官方說明 Beego的特性 RESTful支持MVC架構模塊化自動API文檔注釋路由命名空間開發工具集合Full stack for Web & API Bee…

使用provision創建的arxml文件,導入到第三方工具需要注意哪些方面?

provision是一款基于AP AUTOSAR的ARXML設計工具,可以幫助您快速創建和配置ARXML文件。 如果您想要將provision創建的ARXML文件導入到第三方工具中,您需要注意以下幾個方面: 您需要確認第三方工具支持的AP AUTOSAR版本和provision生成的ARXML…

非計算機科班如何順利轉行計算機領域?

文章目錄 每日一句正能量前言如何規劃才能實現轉計算機?計算機崗位發展前景?現階段轉計算機的建議后記 每日一句正能量 改變思路,改變習慣,改變一種活的方式,往往會創造無限,風景無限! 前言 近年…

Java并發編程(四)線程同步 中 [AQS/Lock]

概述 Java中可以通過加鎖,來保證多個線程訪問某一個公共資源時,資源的訪問安全性。Java提出了兩種方式來加鎖 第一種是我們上文提到的通過關鍵字synchronized加鎖,synchronized底層托管給JVM執行的,并且在java 1.6 以后做了很多…

一百五十二、Kettle——Kettle9.3.0本地連接Hive3.1.2(踩坑,親測有效,附截圖)

一、目的 由于先前使用的kettle8.2版本在Linux上安裝后&#xff0c;創建共享資源庫點擊connect時頁面為空&#xff0c;后來采用如下方法&#xff0c;在/opt/install/data-integration/ui/menubar.xul文件里添加如下代碼 <menuitem id"file-openZiyuanku" label&…

音視頻學習-音視頻基礎

文章目錄 一、 音視頻錄制原理二、音視頻播放原理三、圖像基礎概念1.像素2.分辨率3.位深4.幀率5.碼率6.Stride跨距 四、RGB、YUV1.RGB2.YUV1. 4:4:4格式2. 4:2:2格式3. 4:2:0格式4. 4:2:0數據格式對比 3.RGB和YUV的轉換4.YUV Stride對齊問題 五、視頻的主要概念1.基本概念2.I P…

數據結構:棧和隊列(超詳細)

目錄 ?編輯 棧&#xff1a; 棧的概念及結構&#xff1a; 棧的實現&#xff1a; 隊列&#xff1a; 隊列的概念及結構&#xff1a; 隊列的實現&#xff1a; 擴展知識&#xff1a; 以上就是個人學習線性表的個人見解和學習的解析&#xff0c;歡迎各位大佬在評論區探討&#…

PHP substr()函數詳解,PHP截取字符串。

「作者主頁」&#xff1a;士別三日wyx 「作者簡介」&#xff1a;CSDN top100、阿里云博客專家、華為云享專家、網絡安全領域優質創作者 「推薦專欄」&#xff1a;對網絡安全感興趣的小伙伴可以關注專欄《網絡安全入門到精通》 substr 一、截取字符串二、截取中文字符串三、leng…

clickhouse集群部署

一、集群部署簡介 部署的詳情可以看官網 先部署兩個server,三個keeper[zookeeper] clickhouse之前依賴的存儲是zookeeper,后來改為了keeper,官網給出了原因 所以這就決定了clickhouse有兩種安裝方式&#xff0c;依賴于keeper做存儲或者依賴于zookeeper做存儲 二、zookeeper作…

注冊中心 —— SpringCloud Netflix Eureka

Eureka 簡介 Eureka 是一個基于 REST 的服務發現組件&#xff0c;SpringCloud 將它集成在其子項目 spring-cloud-netflix 中&#xff0c;以實現 SpringCloud 的服務注冊與發現&#xff0c;同時提供了負載均衡、故障轉移等能力&#xff0c;目前 Eureka2.0 已經不再維護&#xf…

基于YOLOv8模型和Caltech數據集的行人檢測系統(PyTorch+Pyside6+YOLOv8模型)

摘要 基于YOLOv8模型和Caltech數據集的行人檢測系統可用于日常生活中檢測與定位行人&#xff0c;利用深度學習算法可實現圖片、視頻、攝像頭等方式的行人目標檢測&#xff0c;另外本系統還支持圖片、視頻等格式的結果可視化與結果導出。本系統采用YOLOv8目標檢測算法訓練數據集…

C#使用FileInfo和DirectoryInfo類來執行文件和文件夾操作

System.IO.FileInfo 和 System.IO.DirectoryInfo 是C#中用于操作文件和文件夾的類&#xff0c;它們提供了許多有用的方法和屬性來管理文件和文件夾。 System.IO.FileInfo&#xff1a; FileInfo 類用于操作單個文件的信息和內容。以下是一些常用的方法和屬性&#xff1a; Exi…

頻繁full gc 調參

Error message from spark is:java.lang.Exception: application_1678793738534_17900289 Driver Disassociated [akka.tcp://sparkDriverClient11.71.243.117:37931] <- [akka.tcp://sparkYarnSQLAM9.10.130.149:38513] disassociated! 日志里頻繁full gc &#xff0c;可以…