1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Argo CD 保姆級(jí)入門教程

        共 18172字,需瀏覽 37分鐘

         ·

        2022-08-08 20:48


        ?

        原文鏈接??:https://icloudnative.io/posts/getting-started-with-argocd/
        請(qǐng)復(fù)制粘貼到瀏覽器打開

        在上一篇『??GitOps 介紹[1]』中,我介紹了什么是 GitOps,包括 GitOps 的原則和優(yōu)勢(shì),以及 GitOps 與 DevOps 的區(qū)別。本文將介紹用于實(shí)施 GitOps 的工具 Argo CD。

        Argo CD 是以 Kubernetes 作為基礎(chǔ)設(shè)施,遵循聲明式 GitOps 理念的持續(xù)交付(continuous delivery, CD)工具,支持多種配置管理工具,包括 ksonnet/jsonnet、kustomize 和 Helm 等。它的配置和使用非常簡(jiǎn)單,并且自帶一個(gè)簡(jiǎn)單易用的可視化界面。

        按照官方定義,Argo CD 被實(shí)現(xiàn)為一個(gè) Kubernetes 控制器,它會(huì)持續(xù)監(jiān)控正在運(yùn)行的應(yīng)用,并將當(dāng)前的實(shí)際狀態(tài)與 Git 倉(cāng)庫(kù)中聲明的期望狀態(tài)進(jìn)行比較,如果實(shí)際狀態(tài)不符合期望狀態(tài),就會(huì)更新應(yīng)用的實(shí)際狀態(tài)以匹配期望狀態(tài)。

        在正式開始解讀和使用 Argo CD 之前,我們需要先搞清楚為什么需要 Argo CD?它能給我們帶來(lái)什么價(jià)值?


        插播一句,8 月 6 日 KubeSphere 將和 SOFAStack 在廣州聯(lián)合主辦一場(chǎng)云原生主題的 Meetup,想和我面基的同學(xué)歡迎報(bào)名??,我在現(xiàn)場(chǎng)等你!

        傳統(tǒng) CD 工作流

        從上篇文章『??GitOps 介紹[2]』可以知道,目前大多數(shù) CI/CD 工具都使用基于 Push 的部署模式,例如 Jenkins、CircleCI 等。這種模式一般都會(huì)在 CI 流水線運(yùn)行完成后執(zhí)行一個(gè)命令(比如 kubectl)將應(yīng)用部署到目標(biāo)環(huán)境中。

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

        • 需要安裝配置額外工具(比如 kubectl);
        • 需要 Kubernetes 對(duì)其進(jìn)行授權(quán);
        • 需要云平臺(tái)授權(quán);
        • 無(wú)法感知部署狀態(tài)。也就無(wú)法感知期望狀態(tài)與實(shí)際狀態(tài)的偏差,需要借助額外的方案來(lái)保障一致性。

        下面以 Argo CD 為例,來(lái)看看遵循聲明式 GitOps 理念的 CD 工具是怎么實(shí)現(xiàn)的。

        使用 Argo CD 的 CD 工作流

        和傳統(tǒng) CI/CD 工具一樣,CI 部分并沒(méi)有什么區(qū)別,無(wú)非就是測(cè)試、構(gòu)建鏡像、推送鏡像、修改部署清單等等。重點(diǎn)在于 CD 部分。

        Argo CD 會(huì)被部署在 Kubernetes 集群中,使用的是基于 Pull 的部署模式,它會(huì)周期性地監(jiān)控應(yīng)用的實(shí)際狀態(tài),也會(huì)周期性地拉取 Git 倉(cāng)庫(kù)中的配置清單,并將實(shí)際狀態(tài)與期望狀態(tài)進(jìn)行比較,如果實(shí)際狀態(tài)不符合期望狀態(tài),就會(huì)更新應(yīng)用的實(shí)際狀態(tài)以匹配期望狀態(tài)。

        無(wú)論是通過(guò) CI 流水線觸發(fā)更新 K8s 編排文件,還是 DevOps 工程師直接修改 K8s 編排文件,Argo CD 都會(huì)自動(dòng)拉取最新的配置并應(yīng)用到 K8s 集群中。

        最終會(huì)得到一個(gè)相互隔離的 CI 與 CD 流水線,CI 流水線通常由研發(fā)人員(或者 DevOps 團(tuán)隊(duì))控制,CD 流水線通常由集群管理員(或者 DevOps 團(tuán)隊(duì))控制。

        Argo CD 的優(yōu)勢(shì)

        下面我們來(lái)看看 Argo CD 相較于傳統(tǒng) CD 工具有哪些比較明顯的優(yōu)勢(shì)。

        Git 作為應(yīng)用的唯一真實(shí)來(lái)源

        所有 K8s 的聲明式配置都保存在 Git 中,并把 Git 作為應(yīng)用的唯一事實(shí)來(lái)源,我們不再需要手動(dòng)更新應(yīng)用(比如執(zhí)行腳本,執(zhí)行 kubectl apply 或者 helm install 命令),只需要通過(guò)統(tǒng)一的接口(Git)來(lái)更新應(yīng)用。

        此外,Argo CD 不僅會(huì)監(jiān)控 Git 倉(cāng)庫(kù)中聲明的期望狀態(tài),還會(huì)監(jiān)控集群中應(yīng)用的實(shí)際狀態(tài),并將兩種狀態(tài)進(jìn)行對(duì)比,只要實(shí)際狀態(tài)不符合期望狀態(tài),實(shí)際狀態(tài)就會(huì)被修正與期望狀態(tài)一致。所以即使有人修改了集群中應(yīng)用的狀態(tài)(比如修改了副本數(shù)量),Argo CD 還是會(huì)將其恢復(fù)到之前的狀態(tài)。這就真正確保了 Git 倉(cāng)庫(kù)中的編排文件可以作為集群狀態(tài)的唯一真實(shí)來(lái)源。

        當(dāng)然,有時(shí)候我們需要快速更新應(yīng)用并進(jìn)行調(diào)試,通過(guò) Git 來(lái)觸發(fā)更新還是慢了點(diǎn),這也不是沒(méi)有辦法,我們可以修改 Argo CD 的配置,使其不對(duì)手動(dòng)修改的部分進(jìn)行覆蓋或者回退,而是直接發(fā)送告警,提醒管理員不要忘了將更新提交到 Git 倉(cāng)庫(kù)中。

        快速回滾

        Argo CD 會(huì)定期拉取最新配置并應(yīng)用到集群中,一旦最新的配置導(dǎo)致應(yīng)用出現(xiàn)了故障(比如應(yīng)用啟動(dòng)失?。?,我們可以通過(guò) Git History 將應(yīng)用狀態(tài)快速恢復(fù)到上一個(gè)可用的狀態(tài)。

        如果你有多個(gè) Kubernetes 集群使用同一個(gè) Git 倉(cāng)庫(kù),這個(gè)優(yōu)勢(shì)會(huì)更明顯,因?yàn)槟悴恍枰謩e在不同的集群中通過(guò) kubectl delete 或者 helm uninstall 等手動(dòng)方式進(jìn)行回滾,只需要將 Git 倉(cāng)庫(kù)回滾到上一個(gè)可用的版本,Argo CD 便會(huì)自動(dòng)同步。

        集群災(zāi)備

        如果你在青云[3]北京3區(qū)中的 KubeSphere[4] 集群出現(xiàn)故障,且短期內(nèi)不可恢復(fù),可以直接創(chuàng)建一個(gè)新集群,然后將 Argo CD 連接到 Git 倉(cāng)庫(kù),這個(gè)倉(cāng)庫(kù)包含了整個(gè)集群的所有配置聲明。最終新集群的狀態(tài)會(huì)與之前舊集群的狀態(tài)一致,完全不需要人工干預(yù)。

        使用 Git 實(shí)現(xiàn)訪問(wèn)控制

        通常在生產(chǎn)環(huán)境中是不允許所有人訪問(wèn) Kubernetes 集群的,如果直接在 Kubernetes 集群中控制訪問(wèn)權(quán)限,必須要使用復(fù)雜的 RBAC 規(guī)則。在 Git 倉(cāng)庫(kù)中控制權(quán)限就比較簡(jiǎn)單了,例如所有人(DevOps 團(tuán)隊(duì),運(yùn)維團(tuán)隊(duì),研發(fā)團(tuán)隊(duì),等等)都可以向倉(cāng)庫(kù)中提交 Pull Request,但只有高級(jí)工程師可以合并 Pull Request。

        這樣做的好處是,除了集群管理員和少數(shù)人員之外,其他人不再需要直接訪問(wèn) Kubernetes 集群,只需訪問(wèn) Git 倉(cāng)庫(kù)即可。對(duì)于程序而言也是如此,類似于 Jenkins 這樣的 CI 工具也不再需要訪問(wèn) Kubernetes 的權(quán)限,因?yàn)橹挥?Argo CD 才可以 apply 配置清單,而且 Argo CD 已經(jīng)部署在 Kubernetes 集群中,必要的訪問(wèn)權(quán)限已經(jīng)配置妥當(dāng),這樣就不需要給集群外的任意人或工具提供訪問(wèn)的證書,可以提供更強(qiáng)大的安全保障。

        擴(kuò)展 Kubernetes

        雖然 Argo CD 可以部署在 Kubernetes 集群中,享受 Kubernetes 帶來(lái)的好處,但這不是 Argo CD 專屬的呀!Jenkins 不是也可以部署在 Kubernetes 中嗎?Argo CD 有啥特殊的嗎?

        那當(dāng)然有了,沒(méi)這金剛鉆也不敢攬這瓷器活啊,Argo CD 巧妙地利用了 Kubernetes 集群中的很多功能來(lái)實(shí)現(xiàn)自己的目的,例如所有的資源都存儲(chǔ)在 Etcd 集群中,利用 Kubernetes 的控制器來(lái)監(jiān)控應(yīng)用的實(shí)際狀態(tài)并與期望狀態(tài)進(jìn)行對(duì)比,等等。

        這樣做最直觀的好處就是可以實(shí)時(shí)感知應(yīng)用的部署狀態(tài)。例如,當(dāng)你在 Git 倉(cāng)庫(kù)中更新配置清單中的鏡像版本后,Argo CD 會(huì)將集群中的應(yīng)用更新到最新版本,你可以在 Argo CD 的可視化界面中實(shí)時(shí)查看更新狀態(tài)(比如 Pod 創(chuàng)建成功,應(yīng)用成功運(yùn)行并且處于健康狀態(tài),或者應(yīng)用運(yùn)行失敗需要進(jìn)行回滾操作)。

        Argo CD 架構(gòu)

        從功能架構(gòu)來(lái)看,Argo CD 主要有三個(gè)組件:API Server、Repository Server 和 Application Controller。從 GitOps 工作流的角度來(lái)看,總共分為 3 個(gè)階段:檢索、調(diào)諧和呈現(xiàn)。

        檢索 -- Repository Server

        檢索階段會(huì)克隆應(yīng)用聲明式配置清單所在的 Git 倉(cāng)庫(kù),并將其緩存到本地存儲(chǔ)。包含 Kubernetes 原生的配置清單、Helm Chart 以及 Kustomize 配置清單。履行這些職責(zé)的組件就是 Repository Server。

        調(diào)諧 -- Application Controller

        調(diào)諧(Reconcile)階段是最復(fù)雜的,這個(gè)階段會(huì)將 Repository Server 獲得的配置清單與反映集群當(dāng)前狀態(tài)的實(shí)時(shí)配置清單進(jìn)行對(duì)比,一旦檢測(cè)到應(yīng)用處于 OutOfSync 狀態(tài),Application Controller 就會(huì)采取修正措施,使集群的實(shí)際狀態(tài)與期望狀態(tài)保持一致。

        呈現(xiàn) -- API Server

        最后一個(gè)階段是呈現(xiàn)階段,由 Argo CD 的 API Server 負(fù)責(zé),它本質(zhì)上是一個(gè) gRPC/REST Server,提供了一個(gè)無(wú)狀態(tài)的可視化界面,用于展示調(diào)諧階段的結(jié)果。同時(shí)還提供了以下這些功能:

        • 應(yīng)用管理和狀態(tài)報(bào)告;
        • 調(diào)用與應(yīng)用相關(guān)的操作(例如同步、回滾、以及用戶自定義的操作);
        • Git 倉(cāng)庫(kù)與集群憑證管理(以 Kubernetes Secret 的形式存儲(chǔ));
        • 為外部身份驗(yàn)證組件提供身份驗(yàn)證和授權(quán)委托;
        • RBAC 增強(qiáng);
        • Git Webhook 事件的監(jiān)聽器/轉(zhuǎn)發(fā)器。

        部署 Argo CD

        Argo CD 有兩種不同的部署模式:

        多租戶

        Argo CD 最常用的部署模式是多租戶,一般如果組織內(nèi)部包含多個(gè)應(yīng)用研發(fā)團(tuán)隊(duì),就會(huì)采用這種部署模式。用戶可以使用可視化界面或者 argocd CLI 來(lái)訪問(wèn) Argo CD。argocd CLI 必須先通過(guò) argocd login <server-host> 來(lái)獲取 Argo CD 的訪問(wèn)授權(quán)。

        $ argocd login SERVER [flags]

        ## Login to Argo CD using a username and password
        $ argocd login cd.argoproj.io

        ## Login to Argo CD using SSO
        $ argocd login cd.argoproj.io --sso

        ## Configure direct access using Kubernetes API server
        $ argocd login cd.argoproj.io --core

        多租戶模式提供了兩種不同的配置清單:

        非高可用

        推薦用于測(cè)試和演示環(huán)境,不推薦在生產(chǎn)環(huán)境下使用。有兩種部署清單可供選擇:

        • install.yaml[5] - 標(biāo)準(zhǔn)的 Argo CD 部署清單,擁有集群管理員權(quán)限??梢允褂?Argo CD 在其運(yùn)行的集群內(nèi)部署應(yīng)用程序,也可以通過(guò)接入外部集群的憑證將應(yīng)用部署到外部集群中。
        • namespace-install.yaml[6] - 這個(gè)部署清單只需要 namespace 級(jí)別的權(quán)限。如果你不需要在 Argo CD 運(yùn)行的集群中部署應(yīng)用,只需通過(guò)接入外部集群的憑證將應(yīng)用部署到外部集群中,推薦使用此部署清單。還有一種花式玩法,你可以為每個(gè)團(tuán)隊(duì)分別部署單獨(dú)的 Argo CD 實(shí)例,但是每個(gè) Argo CD 實(shí)例都可以使用特殊的憑證(例如 argocd cluster add <CONTEXT> --in-cluster --namespace <YOUR NAMESPACE>)將應(yīng)用部署到同一個(gè)集群中(即 kubernetes.svc.default,也就是內(nèi)部集群)。
        ?

        ??注意:namespace-install.yaml 配置清單中并不包含 Argo CD 的 CRD,需要自己提前單獨(dú)部署:kubectl apply -k https://github.com/argoproj/argo-cd/manifests/crds\?ref\=stable。

        高可用

        與非高可用部署清單包含的組件相同,但增強(qiáng)了高可用能力和彈性能力,推薦在生產(chǎn)環(huán)境中使用。

        • ha/install.yaml[7] - 與上文提到的 install.yaml 的內(nèi)容相同,但配置了相關(guān)組件的多個(gè)副本。
        • ha/namespace-install.yaml[8] - 與上文提到的 namespace-install.yaml 相同,但配置了相關(guān)組件的多個(gè)副本。

        Core

        Core 模式也就是最精簡(jiǎn)的部署模式,不包含 API Server 和可視化界面,只部署了每個(gè)組件的輕量級(jí)(非高可用)版本。

        用戶需要 Kubernetes 訪問(wèn)權(quán)限來(lái)管理 Argo CD,因此必須使用下面的命令來(lái)配置 argocd CLI:

        $ kubectl config set-context --current --namespace=argocd # change current kube context to argocd namespace
        $ argocd login --core

        也可以使用命令 argocd admin dashboard 手動(dòng)啟用可視化界面。

        具體的配置清單位于 Git 倉(cāng)庫(kù)中的 core-install.yaml[9]


        除了直接通過(guò)原生的配置清單進(jìn)行部署,Argo CD 還支持額外的配置清單管理工具。

        Kustomize

        Argo CD 配置清單也可以使用 Kustomize 來(lái)部署,建議通過(guò)遠(yuǎn)程的 URL 來(lái)調(diào)用配置清單,使用 patch 來(lái)配置自定義選項(xiàng)。

        apiVersion: kustomize.config.k8s.io/v1beta1
        kind: Kustomization

        namespace: argocd
        resources:
        - https://raw.githubusercontent.com/argoproj/argo-cd/v2.0.4/manifests/ha/install.yaml

        Helm

        Argo CD 的 Helm Chart 目前由社區(qū)維護(hù),地址:https://github.com/argoproj/argo-helm/tree/master/charts/argo-cd[10]


        下面演示一下部署過(guò)程。如果沒(méi)有現(xiàn)成的 Kubernetes 環(huán)境,可以通過(guò) KubeSphere Cloud 托管集群服務(wù)[11]快速創(chuàng)建一個(gè),免費(fèi)體驗(yàn)時(shí)間為 2 小時(shí),到期后集群會(huì)自動(dòng)刪除,可不限次重建。

        創(chuàng)建 Kubernetes 集群的過(guò)程很簡(jiǎn)單,首先注冊(cè)登錄 https://kubesphere.cloud[12] 控制臺(tái),然后點(diǎn)擊 托管集群服務(wù) 打開 新建 Kubernetes 集群 頁(yè)面,填寫集群名稱,選擇運(yùn)行環(huán)境,點(diǎn)擊 新建 菜單即可創(chuàng)建集群。

        幾秒鐘之后便會(huì)創(chuàng)建完畢,并顯示集群基本信息。下載 kubeconfig,便可使用 kubectl 來(lái)訪問(wèn)集群。

        接下來(lái)開始部署 Argo CD:

        $ kubectl create namespace argocd
        $ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

        查看部署結(jié)果:

        $ kubectl -n argocd get pod
        argocd-applicationset-controller-69879c47c-pcbkg   1/1     Running   0          26m
        argocd-notifications-controller-6b4b74d8d8-s7mrz   1/1     Running   0          26m
        argocd-redis-65596bf87-2hzcv                       1/1     Running   0          26m
        argocd-dex-server-78c9764884-6lcww                 1/1     Running   0          26m
        argocd-repo-server-657d46f8b-87rzq                 1/1     Running   0          26m
        argocd-application-controller-0                    1/1     Running   0          26m
        argocd-server-6b48df79dd-b7bkw                     1/1     Running   0          26m

        訪問(wèn) Argo CD

        部署完成后,可以通過(guò) Service argocd-server 來(lái)訪問(wèn)可視化界面。

        $ kubectl -n argocd get svc                                                             
        NAME                                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
        argocd-applicationset-controller          ClusterIP   10.105.250.212   <none>        7000/TCP,8080/TCP            5m10s
        argocd-dex-server                         ClusterIP   10.108.88.97     <none>        5556/TCP,5557/TCP,5558/TCP   5m10s
        argocd-metrics                            ClusterIP   10.103.11.245    <none>        8082/TCP                     5m10s
        argocd-notifications-controller-metrics   ClusterIP   10.98.136.200    <none>        9001/TCP                     5m9s
        argocd-redis                              ClusterIP   10.110.151.108   <none>        6379/TCP                     5m9s
        argocd-repo-server                        ClusterIP   10.109.131.197   <none>        8081/TCP,8084/TCP            5m9s
        argocd-server                             ClusterIP   10.98.23.255     <none>        80/TCP,443/TCP               5m9s
        argocd-server-metrics                     ClusterIP   10.103.184.121   <none>        8083/TCP                     5m8s

        如果你的客戶端可以直連 Service IP,那就直接可以通過(guò) argocd-server 的 Cluster IP 來(lái)訪問(wèn)?;蛘呖梢灾苯油ㄟ^(guò)本地端口轉(zhuǎn)發(fā)來(lái)訪問(wèn):

        $ kubectl port-forward svc/argocd-server -n argocd 8080:443
        Forwarding from 127.0.0.1:8080 -> 8080
        Forwarding from [::1]:8080 -> 8080

        初始密碼以明文形式存儲(chǔ)在 Secret argocd-initial-admin-secret 中,可以通過(guò)以下命令獲取:

        $ kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo

        也可以通過(guò)以下命令來(lái)修改登錄密碼:

        $ argocd account update-password --account admin --current-password xxxx --new-password xxxx

        登錄后的界面:

        Argo CD 核心概念

        在正式開始使用 Argo CD 之前,需要先了解兩個(gè)基本概念。

        Argo CD Application

        Argo CD 中的 Application 定義了 Kubernetes 資源的來(lái)源(Source)和目標(biāo)(Destination)。來(lái)源指的是 Git 倉(cāng)庫(kù)中 Kubernetes 資源配置清單所在的位置,而目標(biāo)是指資源在 Kubernetes 集群中的部署位置。

        來(lái)源可以是原生的 Kubernetes 配置清單,也可以是 Helm Chart 或者 Kustomize 部署清單。

        目標(biāo)指定了 Kubernetes 集群中 API Server 的 URL 和相關(guān)的 namespace,這樣 Argo CD 就知道將應(yīng)用部署到哪個(gè)集群的哪個(gè) namespace 中。

        簡(jiǎn)而言之,Application 的職責(zé)就是將目標(biāo) Kubernetes 集群中的 namespace 與 Git 倉(cāng)庫(kù)中聲明的期望狀態(tài)連接起來(lái)。

        Application 的配置清單示例:

        如果有多個(gè)團(tuán)隊(duì),每個(gè)團(tuán)隊(duì)都要維護(hù)大量的應(yīng)用,就需要用到 Argo CD 的另一個(gè)概念:項(xiàng)目(Project)。

        Argo CD Project

        Argo CD 中的項(xiàng)目(Project)可以用來(lái)對(duì) Application 進(jìn)行分組,不同的團(tuán)隊(duì)使用不同的項(xiàng)目,這樣就實(shí)現(xiàn)了多租戶環(huán)境。項(xiàng)目還支持更細(xì)粒度的訪問(wèn)權(quán)限控制:

        • 限制部署內(nèi)容(受信任的 Git 倉(cāng)庫(kù));
        • 限制目標(biāo)部署環(huán)境(目標(biāo)集群和 namespace);
        • 限制部署的資源類型(例如 RBAC、CRD、DaemonSets、NetworkPolicy 等);
        • 定義項(xiàng)目角色,為 Application 提供 RBAC(與 OIDC group 或者 JWT 令牌綁定)。

        Demo 演示

        最后通過(guò)一個(gè)簡(jiǎn)單的示例來(lái)展示 Argo CD 的工作流程。

        準(zhǔn)備 Git 倉(cāng)庫(kù)

        在 GitHub 上創(chuàng)建一個(gè)項(xiàng)目,取名為 argocd-lab[13],為了方便實(shí)驗(yàn)將倉(cāng)庫(kù)設(shè)置為公共倉(cāng)庫(kù)。在倉(cāng)庫(kù)中新建 dev 目錄,在目錄中創(chuàng)建兩個(gè) YAML 配置清單,分別是 deployment.yamlservice.yaml。

        配置清單內(nèi)容如下:

        # deployment.yaml
        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: myapp
        spec:
          selector:
            matchLabels:
              app: myapp
          replicas: 2
          template:
            metadata:
              labels:
                app: myapp
            spec:
              containers:
              - name: myapp
                image: nginx:latest
                ports:
                - containerPort: 80
                
        # service.yaml
        apiVersion: v1
        kind: Service
        metadata:
          name: myapp-service
        spec:
          selector:
            app: myapp
          ports:
          - port: 80
            protocol: TCP
            targetPort: 80

        接下來(lái)在倉(cāng)庫(kù)根目錄中創(chuàng)建一個(gè) Application 的配置清單:

        # application.yaml
        apiVersion: argoproj.io/v1alpha1
        kind: Application
        metadata:
          name: myapp-argo-application
          namespace: argocd
        spec:
          project: default

          source:
            repoURL: https://github.com/yangchuansheng/argocd-lab.git
            targetRevision: HEAD
            path: dev
          destination: 
            server: https://kubernetes.default.svc
            namespace: myapp

          syncPolicy:
            syncOptions:
            - CreateNamespace=true

            automated:
              selfHeal: true
              prune: true

        參數(shù)解釋:

        • syncPolicy : 指定自動(dòng)同步策略和頻率,不配置時(shí)需要手動(dòng)觸發(fā)同步。

        • syncOptions : 定義同步方式。

          • CreateNamespace=true : 如果不存在這個(gè) namespace,就會(huì)自動(dòng)創(chuàng)建它。
        • automated : 檢測(cè)到實(shí)際狀態(tài)與期望狀態(tài)不一致時(shí),采取的同步措施。

          • selfHeal : 當(dāng)集群世紀(jì)狀態(tài)不符合期望狀態(tài)時(shí),自動(dòng)同步。
          • prune : 自動(dòng)同步時(shí),刪除 Git 中不存在的資源。

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

        如果嫌周期性同步太慢了,也可以通過(guò)設(shè)置 Webhook 來(lái)使 Git 倉(cāng)庫(kù)更新時(shí)立即觸發(fā)同步。具體的使用方式會(huì)放到后續(xù)的教程中,本文不再贅述。

        創(chuàng)建 Application

        現(xiàn)在萬(wàn)事具備,只需要通過(guò) application.yaml 創(chuàng)建 Application 即可。

        $ kubectl apply -f application.yaml
        application.argoproj.io/myapp-argo-application created

        在 Argo CD 可視化界面中可以看到應(yīng)用已經(jīng)創(chuàng)建成功了。

        點(diǎn)進(jìn)去可以看到應(yīng)用的同步詳情和各個(gè)資源的健康狀況。

        如果你更新了 deployment.yaml 中的鏡像,Argo CD 會(huì)自動(dòng)檢測(cè)到 Git 倉(cāng)庫(kù)中的更新,并且將集群中 Deployment 的鏡像更新為 Git 倉(cāng)庫(kù)中最新設(shè)置的鏡像版本。


        KubeSphere 從 3.3.0 開始[14]也提供了基于 GitOps 的 CD方案,引入 Argo CD 作為 CD 的后端,而且可視化界面更加炫酷,感興趣的小伙伴可以試試使用 KubeSphere 來(lái)創(chuàng)建管理 Application。

        總結(jié)

        本文介紹了 Argo CD 的優(yōu)勢(shì)、架構(gòu)和工作原理,并通過(guò)一個(gè)簡(jiǎn)單的示例對(duì)其功能進(jìn)行演示,比如修改 Git 倉(cāng)庫(kù)內(nèi)容后,可以自動(dòng)觸發(fā)更新。還可以通過(guò) Event Source 和 Trigger 實(shí)現(xiàn)更多自動(dòng)化部署的需求。

        在部署 Kubernetes 資源時(shí),Argo CD 還支持 Kustomize、Helm、Ksonnet 等資源描述方式,包括其他更高級(jí)的使用方式都會(huì)在后續(xù)的教程中為大家一一道來(lái),敬請(qǐng)期待。

        引用鏈接

        [1]

        GitOps 介紹: https://icloudnative.io/

        [2]

        GitOps 介紹: https://icloudnative.io/

        [3]

        青云: https://www.qingcloud.com/

        [4]

        KubeSphere: https://kubesphere.com.cn

        [5]

        install.yaml: https://github.com/argoproj/argo-cd/blob/master/manifests/install.yaml

        [6]

        namespace-install.yaml: https://github.com/argoproj/argo-cd/blob/master/manifests/namespace-install.yaml

        [7]

        ha/install.yaml: https://github.com/argoproj/argo-cd/blob/master/manifests/ha/install.yaml

        [8]

        ha/namespace-install.yaml: https://github.com/argoproj/argo-cd/blob/master/manifests/ha/namespace-install.yaml

        [9]

        core-install.yaml: https://github.com/argoproj/argo-cd/blob/master/manifests/core-install.yaml

        [10]

        https://github.com/argoproj/argo-helm/tree/master/charts/argo-cd: https://github.com/argoproj/argo-helm/tree/master/charts/argo-cd

        [11]

        KubeSphere Cloud 托管集群服務(wù): https://kubesphere.cloud/console/resource/

        [12]

        https://kubesphere.cloud: https://kubesphere.cloud/

        [13]

        argocd-lab: https://github.com/yangchuansheng/argocd-lab

        [14]

        KubeSphere 從 3.3.0 開始: https://kubesphere.com.cn/news/kubesphere-3.3.0-ga-announcement/




        你可能還喜歡

        點(diǎn)擊下方圖片即可閱讀

        CoreDNS 健康檢查詳解

        2022-07-29

        構(gòu)建企業(yè)級(jí)云原生日志系統(tǒng)架構(gòu)

        2022-07-28

        立即報(bào)名 | 云原生技術(shù)交流 Meetup 廣州站已開啟,8 月 6 號(hào)與你相遇!

        2022-07-28

        徹底搞懂 Kubernetes 中的 Cgroup

        2022-07-19


        云原生是一種信仰 ??

        關(guān)注公眾號(hào)

        后臺(tái)回復(fù)?k8s?獲取史上最方便快捷的 Kubernetes 高可用部署工具,只需一條命令,連 ssh 都不需要!



        點(diǎn)擊 "閱讀原文" 獲取更好的閱讀體驗(yàn)!


        發(fā)現(xiàn)朋友圈變“安靜”了嗎?

        瀏覽 125
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            亚洲精品乱码久久久久久蜜桃动漫 | 把美女操得不要不要的视频 | 雏田被鸣人扒开腿狂视频 | 91青娱乐在线视频 | 中文字幕破解无码HD | 人人操人人操人人操人人 | 荡娇妻荒淫史1~5全文阅读 | 欧美日韩网站 | 五月丁香久久综合 | 天天综合网,7799精品视频天天看 |