GitLab Auto DevOps功能與Kubernetes集成教程

介 紹

在這篇文章中,咱們將介紹如何將GitLab的Auto DevOps功能與Rancher管理的Kubernetes集羣鏈接起來,利用Rancher v2.2.0中引入的受權集羣端點的功能。經過本文,你將能全面瞭解GitLab如何與Kubernetes集成,以及Rancher如何使用受權集羣端點簡化這一集成工做的流程。本文很是適合Kubernetes管理員、DevOps工程師,或任何想將其開發工做流與Kubernetes進行集成的人。nginx

圖片描述

背 景

什麼是GitLab Auto DevOps?

Auto DevOps是在GitLab 10.0中引入的功能,它讓用戶能夠設置自動檢測、構建、測試和部署項目的DevOps管道。將GitLab Auto DevOps與Kubernetes集羣配合使用,這意味着用戶能夠無需配置CI / CD資源和其餘工具,便可以部署應用程序。git

什麼是Rancher的受權集羣端點?

從v2.2.0開始,Rancher引入了一項名爲Authorized Cluster Endpoint的新功能,用戶能夠直接訪問Kubernetes而無需經過Rancher進行代理。在v2.2.0以前,若是要直接與下游Kubernetes集羣通訊,用戶必須從各個節點手動檢索kubeconfig文件以及API服務器地址。這不只增長了操做的複雜度,並且尚未提供一種機制來控制經過Rancher管理集羣時可用的細化權限。安全

從Rancher v2.2.0開始,部署Rancher管理的集羣時,默認狀況下會啓用受權羣集端點(ACE)功能。ACE將部分Rancher身份驗證和受權機制推送到下游Kubernetes集羣,容許Rancher用戶直接鏈接到這些集羣,同時仍遵照安全策略。服務器

若是您已爲某些項目中的某個用戶明確授予了權限,則當該用戶使用受權集羣端點進行鏈接時,這些權限能自動生效應用。如今,不管用戶是經過Rancher仍是直接鏈接到Kubernetes集羣,安全性都能獲得保障。網絡

受權集羣端點功能的相關文檔對此有更詳細的說明:app

https://rancher.com/docs/ranc...負載均衡

注意

目前,受權集羣端點功能暫時僅適用於使用Rancher Kubernetes Engine(RKE)啓動的下游Kubernetes進羣。工具

前期準備

要將GitLab Auto DevOps與Rancher管理的Kubernetes集羣進行對接,您須要實現準備好:gitlab

    • 一個GitLab.com賬戶,或一個自託管GitLab實例上的賬戶(需已啓用Auto
      DevOps):GitLab.com賬戶須要已經配置好了Auto
      DevOps。若是您使用的是自託管GitLab實例,則能夠參考這一GitLab文檔瞭解如何啓用Auto
      DevOps:https://docs.gitlab.com/ee/to...
    • 運行版本v2.2.0或更高版本的Rancher實例:您能夠以單節點模式啓動Rancher(https://rancher.com/quick-start/),也能夠建立HA安裝(https://rancher.com/docs/ranc...)。
    • Rancher管理的Kubernetes集羣:您還須要一個經過RKE配置的、Rancher上管理的集羣。此外,集羣中須要有一個管理員用戶,若是您使用的是GitLab.com,則須要經過公共網絡訪問控制平面節點。

    設置Rancher和Kubernetes

    首先,咱們須要先將Rancher和Kubernetes設置好。該過程的第一部分主要涉及收集信息。測試

    注意

    爲簡單起見,這些步驟使用的是Rancher中默認的admin賬戶。最佳實踐要求您使用獨立用戶執行此類過程,並限制該用戶對正在集成GitLab的集羣的權限。

    登陸Rancher並導航到要集成的下游集羣。在本演示中,咱們將在EC2實例上建立一個名爲testing的集羣,該集羣在Amazon中運行:

    圖片描述

    在集羣的儀表板上,單擊頂部的Kubeconfig File按鈕。這將打開kubeconfig集羣的文件,其中包括受權集羣端點的信息。

    kubeconfig文件中的第一個條目是經過Rancher服務器的集羣端點。向下滾動以標識此集羣的受權羣集端點,該集羣列爲單獨的集羣條目:

    圖片描述

    在個人示例中,此集羣的名稱是testing-testing-2,而且端點server是AWS提供的公共IP。

    複製server和certificate-authority-data字段的值,不包括引號,並保存它們。

    在kubeconfig文件中進一步向下滾動並找到您的用戶名和token:

    圖片描述

    複製token字段(不包括引號)並保存。

    接下來解碼證書受權機構數據的base64版本,將其轉換回原始版本並保存。根據您的工具,一些可行的選項包括:

    圖片描述

    設置GitLab項目

    經過咱們從Rancher收集的信息,咱們如今能夠配置GitLab了。咱們將首先在GitLab中建立一個新項目,該項目將使用Auto DevOps功能與咱們的Kubernetes集羣集成。

    首先,登陸GitLab,而後選擇New Project。

    在「新建項目」頁面上,選擇「從模板建立」選項卡。這將爲您提供要使用的模板項目列表。選擇NodeJS Express,而後單擊「Use template」:

    圖片描述

    爲項目命名,並將「可見性級別」設置爲「 公共」。完成後單擊「 建立項目」。

    注意

    在我撰寫本文時,可見性級別能夠設爲「私密」,不過這是GitLab的Auto DevOps實驗性功能。

    在項目頁面左側的菜單窗格中,選擇「設置」>「CI / CD」。展開「 環境變量」部分,並設置如下變量:圖片描述

    咱們此次會禁用下圖這些功能,由於咱們的簡單示例暫時不須要它們,而且它們會延長部署所需的時間。在實際項目中,您能夠根據您的實際需求啓用其中一些選項:

    圖片描述

    單擊「 保存變量」以完成GitLab項目配置。

    鏈接GitLab和Rancher

    如今,咱們已準備好將咱們的GitLab項目與Rancher管理的Kubernetes集羣集成。

    在GitLab中,選擇新克隆的項目。在左側菜單中,選擇「 操做」>「Kubernetes」。單擊綠色「添加Kubernetes集羣」按鈕。在下一頁上,選擇「添加現有集羣」選項卡。

    按如下信息填寫相應字段:

    圖片描述

    圖片描述

    單擊「 添加Kubernetes集羣」。GitLab將添加集羣,並在其中建立新的命名空間。您能夠查看Rancher接口,確認新建立的命名空間已經建立成功。

    注意

    GitLab鏈接到集羣時所作的第一件事就是爲項目建立一個命名空間。若是您在一段時間後沒有看到建立名稱空間,則說明可能出現了一些問題。

    將集羣添加到GitLab後,將顯示要安裝到集羣中的應用程序列表。第一個是Helm Tiller。繼續,單擊「 安裝」將其添加到集羣。

    接下來,安裝Ingress,它將容許GitLab將流量路由到您的應用程序:

    圖片描述

    根據您配置進羣的方式,您的入口端點可能會自動填充,也可能不會。在本教程中,我將使用xip.io主機名來指向單個節點的流量。至於您的用例,您可能須要設置通配符域並將其指向此ingress(或指向您的節點IP等)。

    部署好ingress後,滾動到頁面頂部並找到「基本域」字段。輸入其中一個節點的公共IP地址,而後輸入.xip.io。這將建立一個解析爲該IP地址的通配符域,這對於咱們的示例就足夠了:

    圖片描述

    接下來,在導航欄中,選擇「設置」>「CI / CD」。展開「 自動DevOps」部分,而後選中「默認爲自動DevOps管道」框。這不只意味着Auto DevOps已被設爲默認值,還可以觸發構建。將「部署策略」設置爲「 繼續部署到生產」:

    圖片描述

    檢查Auto DevOps框後,管道運行將開始。導航到GitLab中的CI / CD>管道。您應該看到相似於下圖的內容,這代表GitLab正在部署您的應用程序:

    圖片描述

    驗證Rancher中的部署

    下面讓咱們回到Rancher,查看一下咱們的部署的狀況,看看資源是如何轉換爲Rancher界面中的Kubernetes對象的。

    在Rancher中,導航到您的進羣,而後單擊頂部導航菜單中的Projects / Namespaces。

    GitLab表明您建立了兩個命名空間:一個是gitlab-managed-apps,另外一個是惟一的應用程序命名空間。gitlab-managed-apps命名空間包含資源,如用於部署應用程序的nginx 和Helm tiller實例。那個應用程序的惟一命名空間,包含着應用程序的部署。

    爲了將這些進一步可視化,咱們能夠將這些命名空間移動到咱們的Default項目中。您也可使用任何其餘項目。單擊「移動」按鈕,而後選擇所需的項目:

    圖片描述

    移動命名空間後,導航到他們所屬的項目,而後導航到Workloads頁面。該頁面將在其特定於應用程序的命名空間中顯示您的新部署:

    圖片描述

    請注意部署名稱下的443 / https連接。單擊該連接,您就能夠跳轉至您的部署的通配符域的ingress。若是一切順利,你將能夠看到這個象徵着成功的頁面:

    圖片描述

    結 語

    恭喜!您剛剛成功地使用受權集羣端點將GitLab的Auto DevOps與Rancher管理的Kubernetes集羣鏈接,以實現更安全、直接的鏈接了!

    當探索Rancher的其餘區域時,你可能會注意到GitLab以你的名義爲你建立的其餘對象。例如,「負載均衡」選項卡顯示已部署的L7 ingress以及建立的主機名。您還能夠在「服務發現」選項卡下查看部署的應用程序的內部服務。

    GitLab的Auto DevOps功能不只易於使用,並且可定製且功能強大。在本文的演示中,咱們禁用了一些高級功能,如自動測試、依賴項掃描和許可管理。這些功能在後期也能夠從新啓用,並經過配置GitLab,爲您的開發環境提供更多意想不到的便利與價值。除了Auto DevOps以外,GitLab還爲CI / CD提供了.gitlab-ci.yml文件,用戶能夠藉此進行更多的擴展定製。在GitLab的文檔中您能夠了解到更多信息:

    https://docs.gitlab.com

    在Kubernetes和Rancher上構建CI / CD流水線

    Kubernetes的一大價值,就是爲企業優化開發操做流程,而CI工做流與Kubernetes的集成,是大多團隊極關注的重要部分。

    本週三(4月24日)晚20:30,Rancher將舉辦免費的在線培訓《企業如何構建CI/CD流水線》,本次直播中,咱們將分享:

    • 如何對接GitLab
    • 構建鏡像

    • 發佈鏡像到內置的鏡像倉庫
    • 發佈鏡像到遠端倉庫
    • 經過流水線部署應用
    • 經過應用商店發佈本身的應用
    • 如何設置流水線通知

    您能夠點擊連接:http://live.vhall.com/729465809 預定這次課程,週三晚使用同一連接便可觀看直播!

    相關文章
    相關標籤/搜索