Argo CD是用於Kubernetes的聲明性GitOps連續交付工具。
關於 GitOps 相關的概念這裏不作更多介紹,本文主要以實戰爲主,經過一個完整的使用示例,但願對你們實踐 GitOps 有所幫助。
接來下就開幹......git
一、根據官網文檔,其實安裝很簡單,兩條命令搞定github
kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
這裏說明下,若是有私有倉庫,能夠先把須要的鏡像下載下來傳到本身的私有倉庫,要否則可能會由於網絡緣由部署很慢甚至不成功,
a、須要以下四個鏡像,我先下載到本身的倉庫了。redis
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,方便測試。線上環境建議配置Ingressshell
二、部署完成以下所示瀏覽器
[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
三、如今能夠經過瀏覽器進去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
登陸後能夠看到以下界面app
一、從git repo建立一個應用,這裏就直接使用官方的示例https://github.com/argoproj/argocd-example-apps.git 我直接把項目克隆到內部私有的git上,地址變爲了http://gogs.kubeops.net/scofield/argocd-example-apps.git 若是沒有私有git能夠直接用github的ide
二、經過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工具
一、點擊項目,進入詳情
二、如今咱們來手動同步看下效果
三、點擊SYNC並確認之後,開始同步repo並根據部署文件把應用部署到kubernets集羣中,所示,guestbook項目運行成功,如今能夠訪問項目了。
運行成功後,會自動生成項目拓撲圖,簡單明瞭。
四、由於我建立項目時候修改了服務類型爲NodePort,如今能夠經過Node點IP+Port直接訪問項目測試
如今咱們來修改下項目,以實現咱們提交完代碼到git倉庫,自動觸發更新項目。
好比:如今項目pod的副本數爲5,咱們想擴容到10
一、修改項目同步模式,Sync Policy改爲AUTO_SYNC
二、修改git代碼並提交代碼到倉庫
我這裏用的是gogs,直接在網頁上修改了,修改成直接commit
三、觀察應用變化,Pod數正在增長
如今咱們來看下生產的這個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 集羣中的目標
以上就是本文全部內容,謝謝閱讀。