基于 Argocd + Git 倉庫 + Docker 鏡像倉庫的發(fā)布系統(tǒng)搭建

整體發(fā)布流程如圖所示

  • 用戶提交 應(yīng)用發(fā)布文件(k8s manifest yaml / helm / kustomize 等)到 git 倉庫(gitlab/github 等)
  • argocd 監(jiān)聽 git 倉庫的文件變化,根據(jù)配置手動或者自動把應(yīng)用發(fā)布文件同步變更到 k8s 集群中


1兆沙、部署 argocd(參考:https://argo-cd.readthedocs.io/en/stable/#getting-started

// 示例環(huán)境使用的是阿里云 Kubernetes 服務(wù)
# kubectl create ns argocd
namespace/argocd created
# wget https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
// 因?yàn)?argocd 實(shí)現(xiàn)了 CRD + Operator砸民,所以安裝非常簡單
// 安裝 argocd
# kubectl -n argocd apply -f install.yaml

// 安裝好的 argocd
# kubectl -n argocd get svc
NAME                    TYPE           CLUSTER-IP        EXTERNAL-IP   PORT(S)                      AGE
argocd-dex-server       ClusterIP      192.168.218.247   <none>        5556/TCP,5557/TCP,5558/TCP   30s
argocd-metrics          ClusterIP      192.168.116.46    <none>        8082/TCP                     30s
argocd-redis            ClusterIP      192.168.235.78    <none>        6379/TCP                     30s
argocd-repo-server      ClusterIP      192.168.8.78      <none>        8081/TCP,8084/TCP            30s
argocd-server           ClusterIP      192.168.173.245   <none>        80/TCP,443/TCP               30s
argocd-server-metrics   ClusterIP      192.168.104.198   <none>        8083/TCP                     30s

# kubectl -n argocd get pod
NAME                                 READY   STATUS    RESTARTS   AGE
argocd-application-controller-0      1/1     Running   0          30m
argocd-dex-server-56dc8fc7df-8sjwg   1/1     Running   0          30m
argocd-redis-9567956cd-d2txr         1/1     Running   0          30m
argocd-repo-server-747c48457-txt45   1/1     Running   0          30m
argocd-server-595b6f797d-srplm       1/1     Running   0          30m

// 使用的是阿里云 K8S 服務(wù)魄健,所以這里使用 LoadBalancer 類型的 Service 暴露 argocd web 訪問地址入口
// 或者使用 Ingress 也可以
# vim argocd-server-slb.yaml
apiVersion: v1
kind: Service
metadata:
  annotations:
    # 指明 SLB 實(shí)例地址類型為私網(wǎng)類型
    service.beta.kubernetes.io/alicloud-loadbalancer-address-type: intranet
    # 修改為您的私網(wǎng) SLB 實(shí)例 ID
    service.beta.kubernetes.io/alicloud-loadbalancer-id: lb-t4n74x06yqfukhydgtx4d
    # 是否自動創(chuàng)建 SLB 端口監(jiān)聽(會覆寫已有端口監(jiān)聽)泉蝌,也可手動創(chuàng)建端口監(jiān)聽
    service.beta.kubernetes.io/alicloud-loadbalancer-force-override-listeners: 'true'
  labels:
    app.kubernetes.io/component: server
    app.kubernetes.io/name: argocd-server
    app.kubernetes.io/part-of: argocd
  name: argocd-server-slb
  namespace: argocd
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 8080
  - name: https
    port: 443
    protocol: TCP
    targetPort: 8080
  selector:
    app.kubernetes.io/name: argocd-server
  type: LoadBalancer


# kubectl -n argocd apply -f argocd-server-slb.yaml

# kubectl -n argocd get svc argocd-server-slb
NAME                TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
argocd-server-slb   LoadBalancer   192.168.124.43   10.1.2.127    80:30102/TCP,443:31174/TCP   8s


// 查看 argocd 默認(rèn)密碼(argocd 1.9 以后的版本劲腿,參考:https://argoproj.github.io/argo-cd/faq/#i-forgot-the-admin-password-how-do-i-reset-it)
# kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
pVLydNUWOOwiSxJm
// 更改 admin 密碼
// 先到 https://www.browserling.com/tools/bcrypt 生成 bcrypt 字符串打洼,比如 123456 就是 $2a$10$O8NqwiyZY0Yl8LyteZyJf.4XYBIFBlUHT0kmFR9jrs1a1HwDgyAFK
// 替換為下面的 admin.password 的值
kubectl -n argocd patch secret argocd-secret \
  -p '{"stringData": {
    "admin.password": "$2a$10$O8NqwiyZY0Yl8LyteZyJf.4XYBIFBlUHT0kmFR9jrs1a1HwDgyAFK",
    "admin.passwordMtime": "'$(date +%FT%T%Z)'"
  }}'

訪問 argocd web 頁面蠢古,輸入賬號 admin 和 密碼 123456 就可以登錄了

2、項(xiàng)目配置(這里使用 k8s manifest yaml 演示)

2.1 創(chuàng)建 py-web git 項(xiàng)目叽讳,編寫 py-web 應(yīng)用的 deploy 和 svc 文件追他,并推送到 git 倉庫

# tree py-web
py-web
├── deploy.yaml
└── svc.yaml

0 directories, 2 files

# cat py-web/deploy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: py-web
  labels:
    app: py-web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: py-web
  template:
    metadata:
      labels:
        app: py-web
    spec:
      containers:
      - name: py-web
        image: awker/py-web:v1.0.0
        ports:
        - containerPort: 80

# cat py-web/svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: py-web
spec:
  type: NodePort
  selector:
    app: py-web
  ports:
    - port: 80
      targetPort: 80
      nodePort: 30080

https://github.com/py-k8s/py-web

2.2 argocd 配置連通 git 代碼倉庫



2.3 argocd 配置連通 k8s 集群(要連通其他 k8s 集群,參考:https://argo-cd.readthedocs.io/en/stable/user-guide/commands/argocd_cluster/

2.4 argocd 新建一個(gè) web 項(xiàng)目


2.5 argocd 新建一個(gè) py-web 應(yīng)用




3岛蚤、發(fā)布操作

3.1 argocd 發(fā)布 py-web 應(yīng)用到 k8s 集群



點(diǎn)擊 Sync 就可以發(fā)布到 k8s 集群了




3.2 發(fā)布成功后的狀態(tài)

3.3 點(diǎn)擊 deploy 或者 svc 還可以看到各種詳細(xì)的信息



4、其他

  • 如果項(xiàng)目有 configmap懈糯、ingress 等其他資源也是差不多的發(fā)布流程

  • 容器鏡像要提前通過 CI 流程打包到鏡像倉庫涤妒,發(fā)布時(shí)更改對應(yīng)項(xiàng)目 git 倉庫里 deployment 的 image 版本即可

參考:

  1. https://argo-cd.readthedocs.io/en/stable/#getting-started
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市赚哗,隨后出現(xiàn)的幾起案子她紫,更是在濱河造成了極大的恐慌,老刑警劉巖屿储,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贿讹,死亡現(xiàn)場離奇詭異,居然都是意外死亡够掠,警方通過查閱死者的電腦和手機(jī)民褂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赊堪,你說我怎么就攤上這事面殖。” “怎么了哭廉?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵脊僚,是天一觀的道長。 經(jīng)常有香客問我遵绰,道長辽幌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任椿访,我火速辦了婚禮舶衬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赎离。我一直安慰自己逛犹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布梁剔。 她就那樣靜靜地躺著虽画,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荣病。 梳的紋絲不亂的頭發(fā)上码撰,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機(jī)與錄音个盆,去河邊找鬼脖岛。 笑死,一個(gè)胖子當(dāng)著我的面吹牛颊亮,可吹牛的內(nèi)容都是我干的柴梆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼终惑,長吁一口氣:“原來是場噩夢啊……” “哼绍在!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起雹有,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤偿渡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后霸奕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體溜宽,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年质帅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了适揉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片留攒。...
    茶點(diǎn)故事閱讀 40,144評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖涡扼,靈堂內(nèi)的尸體忽然破棺而出稼跳,到底是詐尸還是另有隱情,我是刑警寧澤吃沪,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布汤善,位于F島的核電站,受9級特大地震影響票彪,放射性物質(zhì)發(fā)生泄漏红淡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一降铸、第九天 我趴在偏房一處隱蔽的房頂上張望在旱。 院中可真熱鬧,春花似錦推掸、人聲如沸桶蝎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽登渣。三九已至,卻和暖如春毡泻,著一層夾襖步出監(jiān)牢的瞬間胜茧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工仇味, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留呻顽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓丹墨,卻偏偏與公主長得像廊遍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子带到,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容