GitOps之Argo CD實踐

簡介

Argo CD是用於Kubernetes的聲明性GitOps連續交付工具。
關於 GitOps 相關的概念這裏不做更多介紹,本文主要以實戰爲主,通過一個完整的使用示例,希望對大家實踐 GitOps 有所幫助。
接來下就開幹......

安裝Argo CD

1、根據官網文檔,其實安裝很簡單,兩條命令搞定

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

這裏說明下,如果有私有倉庫,可以先把需要的鏡像下載下來傳到自己的私有倉庫,要不然可能會因爲網絡原因部署很慢甚至不成功,
a、需要如下四個鏡像,我先下載到自己的倉庫了。

        image: hub.kubeops.net/dev/dex:v2.25.0
        image: hub.kubeops.net/dev/haproxy:2.0.4
        image: hub.kubeops.net/dev/argocd:latest
        image: hub.kubeops.net/dev/redis:5.0.10-alpine

b、我這裏直接修改argocd的Service類型爲NodePort,方便測試。線上環境建議配置Ingress

2、部署完成如下所示

[root@ argo]# kubectl get po -n  argocd 
NAME                                       READY   STATUS    RESTARTS   AGE
argocd-application-controller-0            1/1     Running   0          12d
argocd-dex-server-58ff66cff7-nmgh5         1/1     Running   0          12d
argocd-redis-ha-haproxy-68c68f5664-bjp9b   1/1     Running   0          12d
argocd-redis-ha-haproxy-68c68f5664-crttm   1/1     Running   0          12d
argocd-redis-ha-haproxy-68c68f5664-xzckx   1/1     Running   0          12d
argocd-redis-ha-server-0                   2/2     Running   0          12d
argocd-redis-ha-server-1                   2/2     Running   0          12d
argocd-redis-ha-server-2                   2/2     Running   0          12d
argocd-repo-server-5f665db888-4pjzl        1/1     Running   0          12d
argocd-repo-server-5f665db888-vkvc2        1/1     Running   0          12d
argocd-server-78798c96c8-hpn4q             1/1     Running   0          12d
argocd-server-78798c96c8-j7frq             1/1     Running   0          12d

查看Service,這裏看到argocd-server 的類型爲NodePort
[root@ argo]# kubectl get svc  -n  argocd
NAME                         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
argocd-dex-server            ClusterIP   10.96.180.148   <none>        5556/TCP,5557/TCP,5558/TCP   12d
argocd-metrics               ClusterIP   10.110.44.191   <none>        8082/TCP                     12d
argocd-redis-ha              ClusterIP   None            <none>        6379/TCP,26379/TCP           12d
argocd-redis-ha-announce-0   ClusterIP   10.108.171.93   <none>        6379/TCP,26379/TCP           12d
argocd-redis-ha-announce-1   ClusterIP   10.99.64.124    <none>        6379/TCP,26379/TCP           12d
argocd-redis-ha-announce-2   ClusterIP   10.98.107.138   <none>        6379/TCP,26379/TCP           12d
argocd-redis-ha-haproxy      ClusterIP   10.101.136.77   <none>        6379/TCP                     12d
argocd-repo-server           ClusterIP   10.106.50.123   <none>        8081/TCP,8084/TCP            12d
argocd-server                NodePort    10.106.75.221   <none>        80:31016/TCP,443:30807/TCP   12d
argocd-server-metrics        ClusterIP   10.106.25.225   <none>        8083/TCP                     12d

3、現在可以通過瀏覽器進去Argo CD的管理界面了,用戶名:admin,密碼: server Pod 的名字,可以通過如下命令獲取

[root@qd01-stop-k8s-master001 argo]# kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2
argocd-server-78798c96c8-hpn4q

登錄後可以看到如下界面
GitOps之Argo CD實踐

使用Argo CD創建應用

1、從git repo創建一個應用,這裏就直接使用官方的示例https://github.com/argoproj/argocd-example-apps.git 我直接把項目克隆到內部私有的git上,地址變爲了http://gogs.kubeops.net/scofield/argocd-example-apps.git 如果沒有私有git可以直接用github的

2、通過Argo CD UI界面創建一個App
a、首先在管理界面設施repo,讓Argo CD 能夠連接到git倉庫
GitOps之Argo CD實踐
b、點擊New APP,填寫相關信息
GitOps之Argo CD實踐
c、填寫APP名字,項目:默認爲Default,同步策略:可選Manual或者Auto
GitOps之Argo CD實踐
d、選擇源,點擊輸入框會自動出現剛纔添加好的repo,選着其中一個項目即可
GitOps之Argo CD實踐
e、選擇目的,因爲本文Argo CD 是部署到kubernetes中,直接能過讀取到集羣信息,然後輸入Namespace
GitOps之Argo CD實踐
f、最後可以按需修改參數,不需要修改默認也可。
GitOps之Argo CD實踐
g、填寫完信息,點擊CREATE,創建好以後如下圖
GitOps之Argo CD實踐
注意,現在狀態是OutOfSync,還沒有同步git














運行APP

1、點擊項目,進入詳情
GitOps之Argo CD實踐
2、現在我們來手動同步看下效果
GitOps之Argo CD實踐
3、點擊SYNC並確認以後,開始同步repo並根據部署文件把應用部署到kubernets集羣中,所示,guestbook項目運行成功,現在可以訪問項目了。
運行成功後,會自動生成項目拓撲圖,簡單明瞭。
GitOps之Argo CD實踐
4、因爲我創建項目時候修改了服務類型爲NodePort,現在可以通過Node點IP+Port直接訪問項目
GitOps之Argo CD實踐







自動觸發項目

現在我們來修改下項目,以實現我們提交完代碼到git倉庫,自動觸發更新項目。
比如:現在項目pod的副本數爲5,我們想擴容到10
1、修改項目同步模式,Sync Policy改成AUTO_SYNC
GitOps之Argo CD實踐
2、修改git代碼並提交代碼到倉庫
我這裏用的是gogs,直接在網頁上修改了,修改爲直接commit
GitOps之Argo CD實踐
3、觀察應用變化,Pod數正在增加
GitOps之Argo CD實踐







APP部署文件解析

現在我們來看下生產的這個APP的部署清單,直接點擊項目詳情即可看到

project: default
source:
  repoURL: 'http://gogs.kubeops.net/scofield/argocd-example-apps.git'
  path: helm-guestbook
  targetRevision: HEAD
  helm:
    parameters:
      - name: image.repository
        value: hub.kubeops.net/dev/ks-guestbook-demo
      - name: service.type
        value: NodePort
destination:
  server: 'https://kubernetes.default.svc'
  namespace: default
syncPolicy:
  automated: {}

從如上信息我們可以看到,上面定義的 Application 這個資源,就是 Argo CD 用於描述應用的 CRD 對象:

project:應用程序將被配置的項目名稱,這是在 Argo CD 中應用程序的一種組織方式
repoURL:源代碼的倉庫地址
targetRevision:想要使用的 git 分支
path:Kubernetes 資源清單在倉庫中的路徑
destination:Kubernetes 集羣中的目標

以上就是本文所有內容,謝謝閱讀。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章