欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在K8S中使用ArgoCD做持續(xù)部署的方案

 更新時間:2025年03月27日 11:15:26   作者:淡黃的Cherry  
ArgoCD是一個基于Kubernetes的GitOps持續(xù)交付工具,應用的部署和更新都可以在Git倉庫上同步實現,并自帶一個可視化界面,本文介紹如何使用Git+Argocd方式來實現在k8s中部署和更新應用服務,感興趣的朋友一起看看吧

一、了解argocd

ArgoCD是一個基于Kubernetes的GitOps持續(xù)交付工具,應用的部署和更新都可以在Git倉庫上同步實現,并自帶一個可視化界面。本文介紹如何使用Git+Argocd方式來實現在k8s中部署和更新應用服務。關于ci這一塊這里不多介紹。主要講解argocd如何實現cd持續(xù)部署。在開始前,需要部署一套k8s集群,可參考本文連接:http://www.dbjr.com.cn/server/333836np5.htm

工作原理

ArgoCD 的核心理念是 GitOps,即以 Git 倉庫作為單一的真理源,通過自動化的方式將倉庫中的應用配置同步到 Kubernetes 集群中。

  • 定義應用: 用戶在 Git 倉庫中定義應用的 Kubernetes 資源清單,并將這些清單文件提交到 Git 倉庫。
  • 創(chuàng)建 ArgoCD Application: 在 ArgoCD 中創(chuàng)建一個 Application 資源,該資源描述了應用在 Git 倉庫中的位置,以及在 Kubernetes 集群中部署的位置。
  • 同步狀態(tài)監(jiān)控: ArgoCD Controller 持續(xù)監(jiān)控 Git 倉庫中的配置,并與當前集群狀態(tài)進行對比。每次檢測到 Git 倉庫中的應用配置發(fā)生變化時,Controller 會自動更新集群中的資源,保持與 Git 倉庫的一致性。
  • 自動同步與手動同步: ArgoCD 支持自動同步和手動同步。自動同步模式下,一旦檢測到 Git 倉庫有變化,ArgoCD 會自動更新 Kubernetes 集群中的資源。而在手動同步模式下,用戶需要手動觸發(fā)同步操作。
  • 回滾功能: 如果應用更新導致問題,ArgoCD 提供了回滾功能,用戶可以輕松恢復到先前的狀態(tài)

CD 流水線有兩種模式:Push 和 Pull

Push 模式

目前大多數 CI/CD 工具都使用基于 Push 的部署模式,例如 Jenkins。這種模式一般都會在 CI 流水線運行完成后執(zhí)行一個命令(比如 kubectl)將應用部署到目標環(huán)境中。

這種 CD 模式的缺陷很明顯:

需要在環(huán)境安裝配置額外管理工具(比如 kubectl);
需要 Kubernetes 對其進行授權;
需要云平臺授權;
無法感知部署狀態(tài)。也就無法感知期望狀態(tài)與實際狀態(tài)的偏差,需要借助額外的方案來保障一致性。
Kubernetes 集群或者云平臺對 CI 系統(tǒng)的授權憑證在集群或云平臺的信任域之外,不受集群或云平臺的安全策略保護,因此 CI 系統(tǒng)很容易被當成非法攻擊的載體。

Pull 模式

Pull 模式會在目標環(huán)境中安裝一個 Agent,例如在 Kubernetes 集群中就靠 Operator 來充當這個 Agent。Operator 會周期性地監(jiān)控目標環(huán)境的實際狀態(tài),并與 Git 倉庫中的期望狀態(tài)進行比較,如果實際狀態(tài)不符合期望狀態(tài),Operator 就會更新基礎設施的實際狀態(tài)以匹配期望狀態(tài)。

只有 Git 的變更可以作為期望狀態(tài)的唯一來源,除此之外,任何人都不可以對集群進行任何更改,即使你修改了,也會被 Operator 還原為期望狀態(tài),這也就是傳說中的不可變基礎設施。

目前基于 Pull 模式的 CD 工具有 Argo CD,Flux CD 以及 ks-devops。

二、部署argocd

github地址:https://github.com/argoproj/argo-cd

準備環(huán)境

#下載argocd client
wget https://github.com/argoproj/argo-cd/releases/download/v2.12.7/argocd-linux-amd64
#權限
chmod u+x argocd-linux-amd64
#移動可執(zhí)行目錄
mv ./argocd-linux-amd64 /usr/local/bin/argocd
#驗證 
argo version
#準備yaml文件
wget https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

修改svc類型

為了方便測試。將svc類型改成NodePort。實際工作中建議使用ingress

[root@master231 ~]# vim install.yaml
...
apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: server
    app.kubernetes.io/name: argocd-server
    app.kubernetes.io/part-of: argocd
  name: argocd-server
spec:
  # 增加 type: NodePort
  type: NodePort
  ports:
  - name: http
    port: 80
    # 該位置增加訪問端口 300xxx (30000-32000)任意 我們設置成30080
    nodePort: 30080
    protocol: TCP
    targetPort: 8080
  - name: https
    port: 443
    protocol: TCP
    targetPort: 8080
  selector:
    app.kubernetes.io/name: argocd-server
...

部署

kubectl create namespace argocd
kubectl apply -n argocd -f install.yaml

查看pod狀態(tài)

kubectl get all -n argocd

訪問

https://10.0.0.231:30080/login

查看密碼

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
密碼:****  
賬號:admin

argocd客戶端命令行工具修改密碼

[root@master231 bin]# argocd login 10.0.0.231:30080
WARNING: server certificate had error: tls: failed to verify certificate: x509: cannot validate certificate for 10.0.0.231 because it doesn't contain any IP SANs. Proceed insecurely (y/n)? y
Username: admin
Password: 
'admin:login' logged in successfully
Context '10.0.0.231:30080' updated
[root@master231 bin]# argocd account update-password
*** Enter password of currently logged in user (admin): 
*** Enter new password for user admin: 
*** Confirm new password for user admin: 
Password updated
Context '10.0.0.231:30080' updated
[root@lc-master-1 ~]# argocd logout  192.168.0.71:8082
Logged out from '192.168.0.71:8082'
[root@master231 bin]# argocd login 10.0.0.231:30080
WARNING: server certificate had error: tls: failed to verify certificate: x509: cannot validate certificate for 10.0.0.231 because it doesn't contain any IP SANs. Proceed insecurely (y/n)? y
Username: admin
Password: 
'admin:login' logged in successfully
Context '10.0.0.231:30080' updated

三、web界面介紹

設置介紹

添加倉庫地址

添加成功

四、創(chuàng)建應用

通過 CLI 來創(chuàng)建應用

在倉庫https://gitee.com/ljh00928/test_cherry里有個app目錄,里面有個 myapp-deployment.yaml 文件 和 myapp-service.yaml 文件,用來演示我們 argo cd 的功能

myapp-deployment.yaml

myapp-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: myapp-svc
spec:
  ports:
  - port: 8009
    targetPort: 8009
  type: NodePort
  selector:
    app: myapp

創(chuàng)建應用

#查看幫助手冊
argocd app create --help
#部署應用
argocd app create app01 --repo https://gitee.com/ljh00928/test_cherry.git --path app --dest-server https://kubernetes.default.svc --dest-namespace demo1

通過 UI 創(chuàng)建應用

同步策略:

自動同步允許 Argo CD 自動將 Git 倉庫中的應用程序狀態(tài)同步到 Kubernetes 集群中。

手動同步要求用戶通過 Argo CD UI 或 CLI 手動觸發(fā)同步操作。

由于 Argo CD 支持部署應用到多集群,所以如果你要將應用部署到外部集群的時候,需要先將外部集群的認證信息注冊到 Argo CD 中,如果是在內部部署(運行 Argo CD 的同一個集群,默認不需要配置),直接使用 https://kubernetes.default.svc 作為應用的 K8S APIServer 地址即可。

首先列出當前 kubeconfig 中的所有集群上下文:

[root@master231 ~]# kubectl config get-contexts 
CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
*         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin    orbstack

從列表中選擇一個上下文名稱并將其提供給 argocd cluster add CONTEXTNAME,比如對于 orbstack 上下文,運行:

[root@master231 ~]# argocd cluster list
SERVER                          NAME        VERSION  STATUS      MESSAGE  PROJECT
https://kubernetes.default.svc  in-cluster  1.23     Successf]ul
argocd cluster add orbstack

查看yaml文件

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: app02
spec:
  destination:
    name: ''
    namespace: demo2
    server: 'https://kubernetes.default.svc'
  source:
    path: app
    repoURL: 'https://gitee.com/ljh00928/test_cherry.git'
    targetRevision: HEAD
  project: default
  syncPolicy:
    automated: null
    syncOptions:
      - CreateNamespace=true

填寫完以上信息后,點擊頁面左上方的 Create 安裝,即可創(chuàng)建 app02 應用,創(chuàng)建完成后可以看到當前應用的處于 OutOfSync 狀態(tài):

Argo CD 默認情況下每 3 分鐘會檢測 Git 倉庫一次,用于判斷應用實際狀態(tài)是否和 Git 中聲明的期望狀態(tài)一致,如果不一致,狀態(tài)就轉換為 OutOfSync。默認情況下并不會觸發(fā)更新,除非通過 syncPolicy 配置了自動同步

SYNC OPTIONS(同步策略)

spec:
  syncPolicy:
    syncOptions:
    - Validate=false
    - CreateNamespace=true
    - PruneLast=true
    - ApplyOutOfSyncOnly=true
    - Replace=false
    - SkipDryRunOnMissingResource=true

常見的同步選項包括:

  • Validate=false: 禁用資源的服務器端驗證。這在某些自定義資源(CRD)可能尚未完全定義時非常有用。
  • CreateNamespace=true: 如果命名空間不存在,自動創(chuàng)建它。
  • PruneLast=true: 在同步過程中最后執(zhí)行 prune 操作,以確保所有資源已經創(chuàng)建。
  • ApplyOutOfSyncOnly=true: 僅應用那些狀態(tài)不同步的資源。
  • Replace=false: 使用 kubectl apply 而不是 kubectl replace 來更新資源。
  • SkipDryRunOnMissingResource=true: 在資源缺失時跳過 dry-run 檢查

五、部署應用

上面我們創(chuàng)建好了應用,但還沒有部署,所以 namespace、pod、deployment、svc 都沒有

使用 CLI 同步

應用創(chuàng)建完成后,我們可以通過如下所示命令查看其狀態(tài)

[root@master231 ~]# argocd app get app01
Name:               argocd/app01   #應用名稱
Project:            default
Server:             https://kubernetes.default.svc  #部署的服務
Namespace:          demo1  #部署的ns
URL:                https://10.0.0.231:30080/applications/app01 
Source:
- Repo:             https://gitee.com/ljh00928/test_cherry.git  #資源倉庫
  Target:           
  Path:             app   #倉庫里的資源路徑
SyncWindow:         Sync Allowed
Sync Policy:        Manual
Sync Status:        OutOfSync from  (30c6f26)  #倉庫里的資源路徑
Health Status:      Missing  #健康狀態(tài)
GROUP  KIND        NAMESPACE  NAME       STATUS     HEALTH   HOOK  MESSAGE
       Service     demo1      myapp-svc  OutOfSync  Missing        
apps   Deployment  demo1      myapp      OutOfSync  Missin

因為 app01 是我們通過命名行創(chuàng)建的,ns 寫的是 demo1,沒有設置自動創(chuàng)建。如果你集群上沒有這個命名空間,需要先手動創(chuàng)建

[root@master231 ~]# kubectl create ns demo1
namespace/demo1 created

應用程序狀態(tài)為初始 OutOfSync 狀態(tài),因為應用程序尚未部署,并且尚未創(chuàng)建任何 Kubernetes 資源。要同步(部署)應用程序,可以執(zhí)行如下所示命令

#同步應用app01
[root@master231 ~]# argocd app sync app01
TIMESTAMP                  GROUP        KIND   NAMESPACE                  NAME    STATUS    HEALTH        HOOK  MESSAGE
2025-03-25T15:12:33+08:00            Service       demo1             myapp-svc  OutOfSync  Missing              
2025-03-25T15:12:33+08:00   apps  Deployment       demo1                 myapp  OutOfSync  Missing              
2025-03-25T15:12:33+08:00            Service       demo1             myapp-svc    Synced  Healthy              
2025-03-25T15:12:33+08:00            Service       demo1             myapp-svc    Synced   Healthy              service/myapp-svc created
2025-03-25T15:12:33+08:00   apps  Deployment       demo1                 myapp  OutOfSync  Missing              deployment.apps/myapp created
2025-03-25T15:12:33+08:00   apps  Deployment       demo1                 myapp    Synced  Progressing              deployment.apps/myapp created
Name:               argocd/app01
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          demo1
URL:                https://10.0.0.231:30080/applications/app01
Source:
- Repo:             https://gitee.com/ljh00928/test_cherry.git
  Target:           
  Path:             app
SyncWindow:         Sync Allowed
Sync Policy:        Manual
Sync Status:        Synced to  (30c6f26)
Health Status:      Progressing
Operation:          Sync
Sync Revision:      30c6f26bc59ce7f0605caac7c43e5316c55c89ce
Phase:              Succeeded
Start:              2025-03-25 15:12:33 +0800 CST
Finished:           2025-03-25 15:12:33 +0800 CST
Duration:           0s
Message:            successfully synced (all tasks run)
GROUP  KIND        NAMESPACE  NAME       STATUS  HEALTH       HOOK  MESSAGE
       Service     demo1      myapp-svc  Synced  Healthy            service/myapp-svc created
apps   Deployment  demo1      myapp      Synced  Progressing        deployment.apps/myapp created

此命令從 Git 倉庫中檢索資源清單并執(zhí)行 kubectl apply 部署應用,執(zhí)行上面命令后 guestbook 應用便會運行在集群中了,現在我們就可以查看其資源組件、日志、事件和評估其健康狀態(tài)了。

#再次查看app01狀態(tài)
[root@master231 ~]# argocd app get app01
Name:               argocd/app01
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          demo1
URL:                https://10.0.0.231:30080/applications/app01
Source:
- Repo:             https://gitee.com/ljh00928/test_cherry.git
  Target:           
  Path:             app
SyncWindow:         Sync Allowed
Sync Policy:        Manual
Sync Status:        Synced to  (30c6f26)
Health Status:      Progressing   #狀態(tài)為 Progressing(進行中)了
GROUP  KIND        NAMESPACE  NAME       STATUS  HEALTH       HOOK  MESSAGE
       Service     demo1      myapp-svc  Synced  Healthy            service/myapp-svc created
apps   Deployment  demo1      myapp      Synced  Progressing        deployment.apps/myapp created

等一會在去查看狀態(tài)

[root@master231 ~]# argocd app get app01
Name:               argocd/app01
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          demo1
URL:                https://10.0.0.231:30080/applications/app01
Source:
- Repo:             https://gitee.com/ljh00928/test_cherry.git
  Target:           
  Path:             app
SyncWindow:         Sync Allowed
Sync Policy:        Manual
Sync Status:        Synced to  (8a1ee3f)
Health Status:      Healthy    #狀態(tài)為 Healthy(健康)的了
GROUP  KIND        NAMESPACE  NAME       STATUS  HEALTH   HOOK  MESSAGE
       Service     demo1      myapp-svc  Synced  Healthy        service/myapp-svc unchanged
apps   Deployment  demo1      myapp      Synced  Healthy        deployment.apps/myapp unchanged

然后查看 pod、deploy、svc

[root@master231 ~]# kubectl -n demo1 get all
NAME                         READY   STATUS    RESTARTS   AGE
pod/myapp-6449b755f5-5fkzf   1/1     Running   0          2m26s
NAME                TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
service/myapp-svc   NodePort   10.200.5.218   <none>        8009:31922/TCP   22m
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/myapp   1/1     1            1           22m
NAME                               DESIRED   CURRENT   READY   AGE
replicaset.apps/myapp-5f748b96c    0         0         0       22m
replicaset.apps/myapp-6449b755f5   1         1         1       7m18s

使用 UI 界面同步

查看資源狀態(tài)

也可以查看日志、event 等信息

查看 pod、deploy、svc。都運行正常

[root@master231 ~]# kubectl -n demo2 get all
NAME                         READY   STATUS    RESTARTS   AGE
pod/myapp-6449b755f5-4tl7m   1/1     Running   0          7m20s
NAME                TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/myapp-svc   NodePort   10.200.164.64   <none>        8009:31185/TCP   7m20s
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/myapp   1/1     1            1           7m20s
NAME                               DESIRED   CURRENT   READY   AGE
replicaset.apps/myapp-6449b755f5   1         1         1       7m20s

六、更新應用

上面我們已經部署好了兩個應用 app01 和 app02,現在來更改一下 myapp-deployment.yaml 文件,將鏡像改為green

再次點擊sync同步按鈕,可以看見有兩個rs,一個副本數為 0,一個副本數為 1

[root@master231 ~]# kubectl -n demo2 get rs
NAME               DESIRED   CURRENT   READY   AGE
myapp-6449b755f5   0         0         0       19m
myapp-65c5d9cf87   1         1         1       4m3s

七、回滾

上面我們的 app02 已經有兩個版本了,現在最新的是 geen版本,我們也可以可以回滾到第一個版本

現在是這個版本

在回滾的時候需要禁用 AUTO-SYNC 自動同步,點擊歷史和回滾。找到要回滾的版本,點擊 Rollback

這時候已經回滾到第一個版本了

#回滾前
[root@master231 ~]# kubectl -n demo2 get rs
NAME               DESIRED   CURRENT   READY   AGE
myapp-6449b755f5   0         0         0       32m
myapp-65c5d9cf87   1         1         1       16m
#回滾后
[root@master231 ~]# kubectl -n demo2 get rs
NAME               DESIRED   CURRENT   READY   AGE
myapp-6449b755f5   1         1         1       35m
myapp-65c5d9cf87   0         0         0       19m

查看 pod,svc,deployment

[root@master231 ~]# kubectl -n demo2 get all
NAME                         READY   STATUS    RESTARTS   AGE
pod/myapp-6449b755f5-252l9   1/1     Running   0          3m10s
NAME                TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/myapp-svc   NodePort   10.200.164.64   <none>        8009:31185/TCP   36m
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/myapp   1/1     1            1           36m
NAME                               DESIRED   CURRENT   READY   AGE
replicaset.apps/myapp-6449b755f5   1         1         1       36m
replicaset.apps/myapp-65c5d9cf87   0         0         0       20m

到此這篇關于在K8S中使用ArgoCD做持續(xù)部署的文章就介紹到這了,更多相關K8S ArgoCD持續(xù)部署內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解kubectl資源管理命令(陳述式)

    詳解kubectl資源管理命令(陳述式)

    kubectl是官方的CTL命令行工具,用于與apiserver進行通信,將用戶在命令行輸入的命令,組織并轉化為apiserver能識別的信息,進而實現管理k8s各種資源的一種有效途徑,這篇文章主要介紹了詳解kubectl資源管理命令(陳述式),需要的朋友可以參考下
    2025-04-04
  • K8S命令如何查看日志

    K8S命令如何查看日志

    文章內容總結:K8S命令查看日志,列出所有節(jié)點、切換節(jié)點、查看容器日志及部分日志內容,個人經驗分享,希望對大家有所幫助
    2024-11-11
  • 如何使用Kubernetes自定義資源(CRD)詳解

    如何使用Kubernetes自定義資源(CRD)詳解

    自定義資源定義(CRD)是Kubernetes API擴展,可以定義新的對象類型,下面這篇文章主要給大家介紹了關于如何使用Kubernetes自定義資源(CRD)的相關資料,需要的朋友可以參考下
    2022-09-09
  • k8s Job 執(zhí)行一次性以及批處理任務使用場景案例

    k8s Job 執(zhí)行一次性以及批處理任務使用場景案例

    這篇文章主要為大家介紹了k8s Job 執(zhí)行一次性以及批處理任務使用場景案例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • centos搭建k8s環(huán)境詳細步驟及常用命令

    centos搭建k8s環(huán)境詳細步驟及常用命令

    kubernetes是google開源的容器集群管理系統(tǒng),提供應用部署、維護、擴展機制等功能,利用kubernetes能方便管理跨集群運行容器化的應用,這篇文章主要給大家介紹了關于centos搭建k8s環(huán)境詳細步驟及常用命令的相關資料,需要的朋友可以參考下
    2024-01-01
  • 阿里云oss對象存儲使用詳細步驟

    阿里云oss對象存儲使用詳細步驟

    本文主要介紹了阿里云oss對象存儲使用詳細步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • kubernetes之statefulset搭建MySQL集群

    kubernetes之statefulset搭建MySQL集群

    這篇文章主要為大家介紹了kubernetes之statefulset搭建MySQL集群示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • k8s如何給node添加標簽(最新推薦)

    k8s如何給node添加標簽(最新推薦)

    k8s集群如果由大量節(jié)點組成,可將節(jié)點打上對應的標簽,然后通過標簽進行篩選及查看,更好的進行資源對象的相關選擇與匹配,這篇文章主要介紹了k8s如何給node添加標簽,需要的朋友可以參考下
    2023-02-02
  • k8s應用監(jiān)控探針詳解

    k8s應用監(jiān)控探針詳解

    這篇文章主要為大家介紹了k8s應用監(jiān)控探針的使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • K8s Pod調度機制詳解(從理論到生成實戰(zhàn)指南)

    K8s Pod調度機制詳解(從理論到生成實戰(zhàn)指南)

    Kubernetes調度機制是集群的智能調度中樞,主要完成過濾和打分兩個決策,在生產環(huán)境中,核心調度策略包括資源調度、親和性調度、污點與容忍、拓撲分布約束等,本文介紹K8s Pod調度機制詳解(從理論到生成實戰(zhàn)指南),感興趣的朋友一起看看吧
    2025-03-03

最新評論