k8s部署argocd

前言

ArgoCD是一個基于Kubernetes的GitOps持續交付工具,應用的部署和更新都可以在Git倉庫上同步實現,并自帶一個可視化界面。本文介紹如何使用Git+Helm+Argocd方式來實現在k8s中部署和更新應用服務;

安裝Argocd

  • 準備一個k8s集群,然后從官網獲取yaml部署清單執行部署即可;
# 創建命名空間
kubectl create namespace argocd # 部署argocd
wget https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
kubectl apply -n argocd -f install.yaml# 查看狀態
kubectl get pod -n argocd -w# 調整下svc為nodeport默認,訪問ui頁面用的
kubectl -n argocd edit svc argocd-server
  • 訪問頁面,輸入地址后會自動跳轉https;
# 獲取ui頁面的登陸密碼,管理員為 admin
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d

默認管理密碼是隨機的,可以使用如下方式修改;

# 在線獲取bcrpyt加密后的密碼值: https://www.bejson.com/encrypt/bcrpyt_encode/
準備一個密碼,自行到上面的地址加密即可# 將加密后的密文替換為下面的 admin.password 的值
kubectl -n argocd patch secret argocd-secret \-p '{"stringData": {"admin.password": "$2a$10$dVCUtDIFah893qSLMMIReeyNa8vHx1112/kLYTbglAQMpbzBR5dbK","admin.passwordMtime": "'$(date +%FT%T%Z)'"
}}'

驗證1:(官方給出的樣例)

Argo CD 提供了一個官網樣例,我們就創建一下這個項目吧

樣例github地址: https://github.com/argoproj/argocd-example-apps

web頁面創建APP
在這里插入圖片描述
在這里插入圖片描述

  1. Application Name: app的名稱,填寫的是樣例項目的名稱
  2. Project: 是一種資源,用于組織和管理不同的 Kubernetes 應用(Application,目前先寫default
  3. SYNC POLICY: 同步策略,有手動和自動,樣例項目,我們先選擇手動
  4. AUTO-CREATE NAMESPACE: 自動創建應用部署的k8s的命名空間
  5. SOURCE: Git 倉庫,就是樣例項目的github倉庫地址
  6. Revision: 分支名
  7. Path: 資源文件所在的相對路徑,Argo CD目前支持多種 Kubernetes 清單,這里需要選擇使用那種資源配置模式就選擇哪一個路徑下的資源清單
  8. Cluster URL: Kubernetes API Server 的訪問地址,由于 Argo CD 和下發應用的 Kubernetes 集群是同 一個,因此可以直接使用 http://kubernetes.default.svc 來訪問
  9. Namespace: 應用部署在k8s中的命名空間
  10. 點擊頁面上面的create按鈕
  11. 手動同步
    在這里插入圖片描述
  12. web頁面展示
    在這里插入圖片描述
    在這里插入圖片描述

驗證2:(自己手戳)

argocd支持多種配置管理/模板工具,如 Kustomize,Helm,Ksonnet,Jsonnet,plain-YAML,這里我使用的是helm來做,先簡單制作一個helm chart 來定義應用的部署清單;

# 準備一個主目錄存放資源文件
mkdir gitops && cd gitops/ && git init
mkdir -p {helm,argocd} && cd helm/# 添加一個helm chart
# tree -L 2
└── app1├── Chart.yaml├── templates│   ├── deployment.yaml│   └── service.yaml└── values.yaml

Chart.yaml

apiVersion: v2
appVersion: "1.0"
name: app1
description: app1 for kubernetes
type: application
version: 0.1.0

values.yaml

global:replicas: 2
image:repository: harbor.example.cn/public/nginx#repository: nginxtag: stable-alpine

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: appnamespace: {{ .Release.Namespace }}
spec:replicas: {{ .Values.global.replicas }}selector:matchLabels:demo: app1template:metadata:labels:demo: app1spec:containers:- name: nginx# 這里引入變量,層級調用,.Values表聲明作用image: {{ .Values.image.repository }}:{{ .Values.image.tag }}ports:- containerPort: 80name: http

service.yaml

apiVersion: v1
kind: Service
metadata:name: app1-svcnamespace: {{ .Release.Namespace }}labels:demo: app1
spec:type: ClusterIPselector:demo: app1ports:- port: 80name: httptargetPort: httpprotocol: TCP

定義argocd清單

  • argocd有自己的聲明式寫法,這里定義一個用來調用和管理應用部署的資源清單;
# 進入argocd的存放目錄,在下面創建4個目錄來區分不同的集群環境
cd gitops/argocd && mkdir {dev,test,pre,prod}# 定義清單文件
cd argocd /
tree -L 2
.
├── dev
│   └── Application.yaml
├── pre
│   └── Application.yaml
├── prod
│   └── Application.yaml
└── test└── Application.yaml

Application.yaml

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:name: demo-argocdnamespace: argocd
spec:project: default # 所屬項目,默認即可source:repoURL: https://git.example.com/gitops/gitops1.git # helm所在的git倉庫地址(后面需要推送的git倉庫)# git倉庫的分支版本targetRevision: HEAD# helm文件在git倉庫的相對路徑path: helm/app1# 這里定義傳遞給helm執行的參數# 類型values.yamlhelm:parameters:- name: image.repositoryvalue: harbor.example.cn/public/nginx- name: image.tagvalue: stable-alpine- name: global.replicasvalue: "2"destination:# 部署到當前k8s集群的地址server: https://kubernetes.default.svc# 部署目標命名空間namespace: demosyncPolicy:automated: prune: trueselfHeal: trueallowEmpty: falsesyncOptions:- Validate=false- CreateNamespace=true- PrunePropagationPolicy=foreground- PruneLast=trueretry:limit: 5backoff:factor: 2maxDuration: 1m
  • 推送Git倉庫

準備好資源文件后,需要創建一個git倉庫來存放,將寫好的資源文件推送到git倉庫上;

# 整體目錄文件如下
gitops # tree -L 3
.
├── argocd
│   ├── dev
│   │   └── Application.yaml
│   ├── pre
│   │   └── Application.yaml
│   ├── prod
│   │   └── Application.yaml
│   └── test
│       └── Application.yaml
└── helm└── app1├── Chart.yaml├── templates└── values.yaml# 推送git倉庫
git init
git add ..
git ...

集成argocd

  • 登陸argocd頁面,添加一個git倉庫地址,這里的大概流程是通過同步git上的argocd資源清單來引用helm的部署文件來實現部署和更新;

  • 填寫倉庫地址信息;

  • 接著創建一個應用,定義git倉庫配置;


?


?


?

  • 此時資源是沒有開啟自動同步的,需要先手動同步一下;


?

  • 查看應用的部署狀態和Git同步狀態;

  • 成功部署后,將 demo-production 調整為自動同步;

版本更新

應用已經通過argocd部署到集群中,此時在argocd中存在有兩個應用;

  • demo-production :與dev/Application.yaml 文件同步,用來更新應用的版本和配置的;
  • demo-argocd :定義服務的部署,讀取的是git倉庫下的helm資源清單;

當我們需要更新demo這個服務的版本時,修改 dev/Application.yaml 這個文件的參數,重新提交到git倉庫即可;

# vim argocd/dev/Application.yaml
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:name: demo-argocdnamespace: argocd
spec:project: defaultsource:repoURL: https://git.example.com/gitops/gitops1.gittargetRevision: HEADpath: helm/app1helm:parameters:- name: image.repositoryvalue: harbor.example.cn/public/nginx- name: image.tagvalue: v1.0.0  # 修改鏡像的版本- name: global.replicasvalue: "1"     # 修改下副本數destination:server: https://kubernetes.default.svcnamespace: demosyncPolicy:automated: prune: trueselfHeal: trueallowEmpty: falsesyncOptions:- Validate=false- CreateNamespace=true- PrunePropagationPolicy=foreground- PruneLast=trueretry:limit: 5backoff:factor: 2maxDuration: 1m

等待一會后,argocd會自動檢測git上的文件版本,然后將最新修改的配置參數同步到k8s集群中;

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

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

相關文章

【Linux】MAC幀

目錄 一、MAC幀 (一)IP地址和MAC地址 (二)MAC幀格式 (三)MTU對IP協議的影響、 (四)MTU對UDP協議的影響 (五)MTU對TCP協議的影響 二、以太網協議 &…

MySQL - 數據庫基礎操作

SQL語句 結構化查詢語言(Structured Query Language),在關系型數據庫上執行數據操作、數據檢索以及數據維護的標準語言。 分類 DDL 數據定義語言(Data Definition Language),定義對數據庫對象(庫、表、列、索引)的操作。 DML 數據操作語言(Data Manip…

GraalVM原生鏡像支持:Spring Cloud應用啟動速度提升90%

引言:當Spring Cloud遇見GraalVM,啟動時間進入秒級時代 傳統Spring Cloud應用因動態類加載、反射等機制導致啟動緩慢(通常超過30秒),在Serverless和Kubernetes滾動更新場景下成為性能瓶頸。Spring Cloud 2023.x通過**G…

【Unity3D】攝像機適配場景以及Canvas適配

目錄 寬度不變策略 高度不變策略 寬度不變策略 開發分辨率 750*1334 (寬高比:0.56) 真機分辨率 1170*2532 (寬高比:0.46) 真機寬高比<開發寬高比&#xff0c;采用寬度不變策略 理由&#xff1a;小于代表真機高度比開發高度更大&#xff0c;因此不需要擔心高度上…

HarmonyOS:基于axios實現文件的下載以及下載進度的監聽

#前言&#xff1a;項目開發中&#xff0c;避免不了實現文件下載功能&#xff0c;其他平臺的下載都很成熟&#xff0c;網上的例子也比較多&#xff0c;我就自己項目中實現的下載功能做個總結&#xff0c;你可以參考我的寫法實現功能。 下載封裝基于axios實現的下載功能。 1.下載…

簡單一周日期展示及選擇切換

醫院掛號&#xff0c;可能需要切換日期&#xff0c;選擇一周內的某一天。 提供一周內的日期段&#xff0c;通過點擊&#xff0c;切換到不同天。 簡單的js&#xff0c;html實例。切換玩調用后臺接口&#xff0c;實現后續邏輯。 使用Vue,插值語法&#xff0c;更簡單。 一周日歷…

二叉樹的前,中,后序遍歷

我們來了解一下二叉樹的遍歷&#xff0c;話不多說 二叉樹的遍歷的概念&#xff1a; 二叉樹有四種遍歷方式&#xff0c;分別為前序遍歷&#xff0c;中序遍歷&#xff0c;后序遍歷和層序遍歷&#xff0c;但我們今天談談前三種&#xff0c;并實現它 前序遍歷&#xff1a; 按照根…

golang Error的一些坑

golang Error的一些坑 golang error的設計可能是被人吐槽最多的golang設計了。 最經典的err!nil只影響代碼風格設計&#xff0c;而有一些坑會導致我們的程序發生一些與我們預期不符的問題&#xff0c;開發過程中需要注意。 ?? errors.Is?判斷error是否Wrap不符合預期 ?…

逼用戶升級Win11,微軟開始給Win10限速

隨著Windows10的支持時間越來越短&#xff0c;微軟也加大了對Win10用戶的驅趕力度。 最近&#xff0c;微軟官宣了將要在今年6月份降低OneNote for Windows 10的同步速度。軟件也將和Windows10在今年的10月14日一同停止支持和維護。 這將影響實時協作和多設備訪問。 對OneNote…

SpringMVC_day02

一、SSM 整合 核心步驟 依賴管理 包含 SpringMVC、Spring JDBC、MyBatis、Druid 數據源、Jackson 等依賴。注意點&#xff1a;確保版本兼容性&#xff08;如 Spring 5.x 與 MyBatis 3.5.x&#xff09;。 配置類 SpringConfig&#xff1a;掃描 Service 層、啟用事務管理、導入…

Android14 原生PackageInstaller安裝某些apk報錯問題

最近遇到Android14安裝客戶一個大型app的時候&#xff0c;執行到開始安裝的時候就直接閃退了&#xff0c;查看log發現下面報錯&#xff1a; 03-25 18:01:29.531 3085 3085 E AndroidRuntime: java.lang.RuntimeException: Could not copy bitmap to parcel blob. 03-25 18:01:2…

SQLAlchemy關鍵詞搜索技術深度解析:從基礎過濾到全文檢索

在數據驅動的應用開發中&#xff0c;基于關鍵詞的模糊查詢是常見的業務需求。SQLAlchemy作為Python生態中最流行的ORM框架&#xff0c;提供了多種實現關鍵詞搜索的技術方案。本文將從性能、適用場景和技術復雜度三個維度&#xff0c;系統對比分析SQLAlchemy中關鍵詞搜索的最佳實…

基于 ffmpeg 實現合并視頻

ffmpeg是一個強大的多媒體處理工具&#xff0c;支持視頻文件的合并。 列出目錄下所有MP4文件 import os import glob# 當前目錄 directory os.getcwd() directory "/directory/to/mp4/*"# 列出目錄下所有MP4文件 files glob.glob(directory)# 排序 files.sort(…

算法每日一練 (20)

&#x1f4a2;歡迎來到張翊塵的技術站 &#x1f4a5;技術如江河&#xff0c;匯聚眾志成。代碼似星辰&#xff0c;照亮行征程。開源精神長&#xff0c;傳承永不忘。攜手共前行&#xff0c;未來更輝煌&#x1f4a5; 文章目錄 算法每日一練 (20)不同路徑 II題目描述解題思路解題代…

【銀河麒麟系統常識】命令:uname -m(查看系統架構)

命令&#xff1a; uname -m 功能 常用的 Linux/Unix 終端命令&#xff0c;用于顯示當前系統的硬件架構&#xff1b; 返回 返回系統的CPU架構類型&#xff0c;用于判斷軟件兼容性&#xff1b; 輸出結果架構說明常見設備x86_64Intel/AMD 64位 CPU主流 PC、服務器aarch64ARM 64位 …

sql結尾加刷題

找了一下mysql對extractvalue()、updatexml()函數的官方介紹https://dev.mysql.com/doc/refman/5.7/en/xml-functions.html#function_extractvalue ExtractValue(xml_frag, xpath_expr) 知識點 解釋一下這兩個參數xml_frag&#xff0c;是xml標記片段&#xff0c;第二個參數…

JVM類加載過程詳解

文章目錄 前言1.加載2.鏈接驗證文件格式驗證元數據驗證字節碼驗證符號引用驗證 準備解析 3.初始化4.類卸載 前言 類從被加載到虛擬機內存中開始到卸載出內存為止&#xff0c;它的整個生命周期可以簡單概括為 7 個階段&#xff1a;加載&#xff08;Loading&#xff09;、驗證&a…

el-select 可搜索下拉框 在ios、ipad 無法喚出鍵盤,造成無法輸入

下一篇&#xff1a;el-select 可搜索下拉框&#xff0c;選中選項后&#xff0c;希望立即失去焦點&#xff0c;收起鍵盤&#xff0c;執行其他邏輯 【效果圖】&#xff1a;分組展示選項 >【去界面操作體驗】 首先&#xff0c;通過 夸克瀏覽器的搜索: el-select 在 ipad 輸入框…

前端框架的定制化:滿足項目獨特需求

hello寶子們...我們是艾斯視覺擅長ui設計和前端數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩! 在數字化轉型浪潮中&#xff0c;前端技術體系已成為企業構建數字競爭力的核心戰場。當標準化前端框架…

Flutter網絡請求封裝:高效、靈活、易用的Dio工具類

在Flutter開發中&#xff0c;網絡請求是必不可少的功能。為了簡化代碼、提高開發效率&#xff0c;我們通常會封裝一個網絡請求工具類。本文基于Dio庫&#xff0c;詳細介紹如何封裝一個高效、靈活、易用的網絡請求工具類&#xff0c;支持以下功能&#xff1a; 單例模式&#xf…