如何構建Kubernetes CI

持續集成/持續交付(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】標籤
如何構建Kubernetes CI/CD流水線

  • 設置【項目名稱/Project name】
  • 點擊【創建項目/Create Project】
  • 等待項目完成導入

將Kubernetes端點添加到你的項目中

如何構建Kubernetes CI/CD流水線

如何構建Kubernetes CI/CD流水線

上面所有的字段都需要填入內容,我會在下文介紹如何填寫。

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集成。


分享到:


相關文章: