運(yùn)行環(huán)境
OS: macOS Majave, Version 10.14.5
Docker Desktop: Docker Engine v20.10.2.
Kubernets: v1.19.3
Argo CD: argocd: v1.8.5+d0f8edf.dirty
在本地運(yùn)行argoCD需要docker和kubernets運(yùn)行環(huán)境
下載Docker Desktop的地址 https://www.docker.com/products/docker-desktop.
基于Docker Desktop運(yùn)行Kubernets的方法: http://www.itdecent.cn/p/ef27f694a335
搭建Argo CD: http://www.itdecent.cn/p/2b1e91344879
創(chuàng)建第一個(gè)Argo CD app
先來(lái)簡(jiǎn)單的聊一下Argo CD工作的原理
當(dāng)我們?cè)谑褂肒ubernetes運(yùn)行程序是,我們的程序是運(yùn)行在Docker container中,container又運(yùn)行在pod中。使用過(guò)Kubernetes的話應(yīng)該知道,運(yùn)行一個(gè)pod時(shí),會(huì)編寫(xiě)一個(gè)yaml,在yaml中會(huì)聲明pod的元數(shù)據(jù),還有pod中運(yùn)行的docker container的信息,然后使用kubectl命令創(chuàng)建pod,這時(shí)會(huì)發(fā)送一個(gè)請(qǐng)給給Kubernetes服務(wù)去創(chuàng)建pod,Kubernetes服務(wù)創(chuàng)建并運(yùn)行pod,這樣程序就會(huì)啟動(dòng)。Kubernetes服務(wù)在接收到kubectl命令的請(qǐng)求時(shí),會(huì)將聲明pod的yaml進(jìn)行保存。
在真實(shí)的生產(chǎn)環(huán)境下,聲明pod或者其他kubernete資源的yaml會(huì)保存在一個(gè)代碼庫(kù)中并且可以放在Github或者類(lèi)似的平臺(tái)上。當(dāng)我們對(duì)我們的應(yīng)用程序添加新feature之后,想要部署新 feature,必須先build出一個(gè)docker image,然后使用新的docker image更改聲明pod的yaml,然后使用kubectl命令進(jìn)行部署。
Argo CD的工作原理是基于kubernetes。Argo CD能夠監(jiān)聽(tīng)代碼庫(kù)是否又改動(dòng),當(dāng)有一個(gè)聲明pod或者其他類(lèi)型的資源的yaml被更改,Argo CD可以自行使用被改動(dòng)的yaml與kubernetes服務(wù)中存的yaml進(jìn)行比較,如果不相同,Argo CD能夠運(yùn)行kubectl部署改動(dòng)之后的yaml。
創(chuàng)建Argo CD app
在登陸Argo CD之后,會(huì)出現(xiàn)下面的界面

點(diǎn)擊NEW APP創(chuàng)建,會(huì)彈出一個(gè)框,框里面有四部分,分別是GENERAL,SOURCE,DESTINATION,Directory
第一部分是關(guān)于Argo CD app自己的配置,可以按照如下圖所示填寫(xiě)

其中SYNC POLICY有兩個(gè)選項(xiàng),自動(dòng)和手工,可以選擇自動(dòng)讓Argo CD為我們部署
第二部分是關(guān)于git配置,可以按照下面圖片填寫(xiě)

這里我們準(zhǔn)好了一個(gè)可以拿到當(dāng)做練習(xí)的git repo,放在Github上。圖片中的Path是repo中文件的路徑,這里需要指定一個(gè)可以被部署的文件的路徑。
第三部分是關(guān)于部署的配置

這里需要指定一下應(yīng)用程序應(yīng)該需要被部署在那個(gè)kubernetes cluster中, 這里選擇的默認(rèn)的,也就是部署在運(yùn)行Argo CD的kubernetes cluster中。
** 第四部分**是關(guān)于helm的

在這一步填寫(xiě)value-dev.yaml,這一步有涉及到關(guān)于helm的知識(shí),helm可以對(duì)聲明kubernetes資源的文件進(jìn)行再封裝,這里不做解釋了。
然后點(diǎn)擊這個(gè)框最上面的按鈕create,成功的創(chuàng)建了一個(gè)app

點(diǎn)擊myapp這個(gè)panel,可以查看myapp在kubernetes cluster中具體的運(yùn)行情況,

使用Argo CD自動(dòng)部署功能
當(dāng)有新的業(yè)務(wù)代碼提交后,需要進(jìn)行部署。這里使用我提供的練習(xí)repo進(jìn)行模擬。修改時(shí)請(qǐng)將repo fork到自己的github賬號(hào)下,使用上面的步驟重新創(chuàng)建一個(gè)app,然后修改對(duì)應(yīng)的文件,修改文件要clone到本地,然后提交。repo地址https://github.com/xiaofengzs/cd-workshop
我們可以修改cd-workshop-template-zxf文件夾下的value-dev文件,修改結(jié)果如下
image:
pullPolicy: IfNotPresent
repository: tr1stanzhi/workshop-demo
tag: 'latest'
environments:
- name: USERNAME
value: 'Trisran'
將environments中,name為USERNAME對(duì)應(yīng)的value改為了Trisran。當(dāng)有新的代碼push到Github上時(shí),Argo CD會(huì)自動(dòng)檢測(cè)并進(jìn)行部署,我們可以看到Argo CD app的狀態(tài)變化。

同步結(jié)束之后會(huì)重新變成綠色。
可以進(jìn)入myapp查看,可以看到pod的名稱(chēng)發(fā)生了變化。