如何構建Kubernetes CI/CD流水線
持續集成/持續交付(CI/CD)的主題,在服務變得越來越細化、更新越來越頻繁的當下,顯得愈發重要。它讓公司能夠按照一種一致的、可重複操作的方式完全自動化地完成代碼的搭建、測試和部署。
市場中有不少不同的CI/CD工具可供用戶使用,它們中的很多將可以和Kubernetes進行原生集成。
本文將介紹如何使用託管的GitLab.com解決方案來實現CI/CD。不過本文中討論到的Kubernetes集成是通用的,其他的CI/CD工具只要提供了Kubernetes介面,就同樣可以按本文的方法、使用服務賬號來與Kubernetes進行對接。
先決條件
1. 用於部署工作負載的Rancher 2.0集群
2. 登陸gitlab.com
設置GitLab.com
我們準備使用GitLab提供的一個模版,首先第一步先通過網址https://gitlab.com/users/sign_in登陸gitlab.com
創建項目
第一步先創建項目
點擊New project
選擇【從模版創建/Create from template】標籤
點擊
圖標下的
設置【項目名稱/Project name】
點擊【創建項目/Create Project】
等待項目完成導入
將Kubernetes端點添加到你的項目中
在
下面選擇
點擊【Kubernetes集群/Kubernetes cluster】,接著選擇【添加現有集群/Add existing cluster】
上面所有的欄位都需要填入內容,我會在下文介紹如何填寫。
API URL
API URL是GitLab用於和你的集群中那些用於部署工作負載的Kubernetes API進行通信的URL。根據Kubernetes集群運行的位置,你需要確保埠是打開的狀態,這樣才能讓gitlab.com和Kubernetes集群的:
進行通信。
為了檢索API URL,我們將在Rancher伺服器上運行一個控制Kubernets集群的腳本,這一步會生成一個kubeconfig文件,文件中包含了我們使用GitLab配置Kubernetes設置所需要的信息。
登陸到運行Rancher Server的伺服器
從https://gist.github.com/superseb/f6cd637a7ad556124132ca39961789a4下載get_kubeconfig_custom_cluster_rancher2.sh文件中的內容
在伺服器上創建一個文件並把內容複製到裡面
使用命令chmod +x 讓文件能夠執行
使用命令./ 運行腳本
這會在本地目錄中生成一個kubeconfig文件
運行命令cat kubeconfig | grep server:
https的值是需要添加到API URL欄位的值
CA證書
CA證書是需要的,因為這些證書通常是自定義證書,它們不在GitLab伺服器的證書存儲區中,它們可以讓連接受到保護。
在API URL指令生成的kubeconfig文件所在文件夾下進行如下操作:
運行cat kubeconfig | grep certificate-authority-data,這會提供給你一個base64編碼的證書字元串,GitLab中的欄位需要PEM格式
把編碼的字元串存到一個文件中,比如cert.base64
運行base64 -d cert.base64 > cert.pem
返回一個pem格式的證書,你可以把它拷貝到GitLab中的CA證書欄位里
Token
為了讓gitlab.com實例能夠與集群通信,我們將為它創建一個服務賬號。我們還要給GitLab創建一個命名空間來部署應用程序。
為了簡化操作,我們將所有內容都放到了一個文件中,可以在http://x.co/rm082018找到。
為了創建必要的條件,我們需要運行下面的命令:
kubectl apply -f http://x.co/rm082018(.kube/config文件中用的是默認集群,如果要使用其他的,可以選擇添加-kubeconfig)
這樣會創建出一個服務賬號並且生成一個token,我們需要在GitLab Kubernetnes配置pane中使用到該token。
獲取secret execute:kubectl describe secrets/gitlab-secret -n gitlab-managed-apps | grep token:
複製token並將其粘貼到GitLab配置中
項目命名空間
如果你已經按照這篇文章以及我提供的Kubernetes 文件執行到了這一步,那麼下面你需要將Project Namespace設置為gitlab-managed-apps。如果你已經更新了Kubernetes文件,那麼需要將它改為你設置的命名空間。
Rancher Server 2.0設置
作為GitLab模板項目的一部分,它們部署了一個PostgresSQL pod。這意味著你需要有一個動態存儲配置程序。如果你沒有這些設置,那麼你需要進入到你需要部署的集群上的目錄,啟動Library NFS配置程序。我們目前暫不建議將這用於生產環境,不過它能讓auto devops功能正常工作。
開啟Auto Devops
在GitLab界面,進入Setting-CI/CD並且擴展Auto DevOps。
點擊【開啟Auto DevOps/Enable Auto Devops】的按鈕。
在Domain部分中,它要求你指定將用於訪問要部署服務的DNS名稱。DNS名稱應該指向集群上部署服務的入口。在測試中,你可以使用.nip.io,它將解析為指定的主機ip。
點擊【保存更改/Save changes】,這會自動發布你的流水線並且啟動作業運行。
你可以進入CI/CD – Pipelines中查看進度,在production階段結束時,你應該能看到可以訪問應用程序的http地址了
希望這篇博客可以帶你成功部署一個很棒的CI/CD流水線。另外,正如文章開頭所言,文中的Kubernetes部分適用於大多數CI/CD Kubernetes集成。
TAG:RancherLabs |