簡介
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
登錄後可以看到如下界面
使用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倉庫
b、點擊New APP,填寫相關信息
c、填寫APP名字,項目:默認爲Default,同步策略:可選Manual或者Auto
d、選擇源,點擊輸入框會自動出現剛纔添加好的repo,選着其中一個項目即可
e、選擇目的,因爲本文Argo CD 是部署到kubernetes中,直接能過讀取到集羣信息,然後輸入Namespace
f、最後可以按需修改參數,不需要修改默認也可。
g、填寫完信息,點擊CREATE,創建好以後如下圖
注意,現在狀態是OutOfSync,還沒有同步git
運行APP
1、點擊項目,進入詳情
2、現在我們來手動同步看下效果
3、點擊SYNC並確認以後,開始同步repo並根據部署文件把應用部署到kubernets集羣中,所示,guestbook項目運行成功,現在可以訪問項目了。
運行成功後,會自動生成項目拓撲圖,簡單明瞭。
4、因爲我創建項目時候修改了服務類型爲NodePort,現在可以通過Node點IP+Port直接訪問項目
自動觸發項目
現在我們來修改下項目,以實現我們提交完代碼到git倉庫,自動觸發更新項目。
比如:現在項目pod的副本數爲5,我們想擴容到10
1、修改項目同步模式,Sync Policy改成AUTO_SYNC
2、修改git代碼並提交代碼到倉庫
我這裏用的是gogs,直接在網頁上修改了,修改爲直接commit
3、觀察應用變化,Pod數正在增加
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 集羣中的目標
以上就是本文所有內容,謝謝閱讀。