如何在kubernetes上輕鬆部署gitlab

2021-01-09 IT程式設計師alian

最近,我花了一些時間研究如何構建CI / CD管道以自動化測試和部署。由於我正在容器中開發所有東西並使用Kubernetes對其CI運行程序進行管理,因此最近與k8集成似乎是一個不錯的選擇。

在本文中,我將描述在Kubernetes上啟動並運行帶有GitLab Runner的GitLab所需的步驟。

這篇文章中使用的所有清單都可以在這裡找到

更新2017-02-27:您可能對此清單的自動版本感興趣http://blog.lwolf.org/post/fully-automated-gitlab-installation-on-kubernetes-includes-runner-and-registry/

先決條件:

所有配置均假定部署到名稱空間gitlab本文中使用的域名是git.example.com(用於網絡)和ssh-git.example.com(用於ssh)。沒有配置任何持久性存儲的所有Pod。emptyDir: {}到處都改變為持久的東西。大多數與GitLab相關的配置都是在gitlab / gitlab-deployment.yml中設置的,必須進行更改。部署GITLAB

首先,我們將創建一個單獨的命名空間並部署PostgreSQL和Redis實例。

kubectl create -f gitlab-ns.ymlkubectl create -f gitlab/redis-svc.ymlkubectl create -f gitlab/redis-deployment.ymlkubectl create -f gitlab/postgresql-svc.ymlkubectl create -f gitlab/postgresql-deployment.ymlPostgreSQL密碼在postgresql-deployment.yml清單中設置。檢查kubectl get pods --namespace=gitlab並等待所有吊艙就緒。之後,我們可以部署GitLab本身。

kubectl create -f gitlab/gitlab-svc.ymlkubectl create -f gitlab/gitlab-svc-nodeport.ymlkubectl create -f gitlab/gitlab-deployment.yml由於我將其部署在裸機集群上,因此我還沒有任何負載均衡器,這就是為什麼我有第二個服務清單。如果您要在雲端進行操作,則可以跳過的部署gitlab-svc-nodeport.yml。

讓我們測試到目前為止一切正常。要訪問我們的GitLab實例,我們需要知道部署它的節點埠。通常在部署NodePort服務時將其列印出來,如下所示:

> $ kubectl create -f gitlab/gitlab-svc-nodeport.ymlYou have exposed your service on an external port on all nodes in yourcluster. If you want to expose this service to the external internet, you mayneed to set up firewall rules for the service port(s) (tcp:30836,tcp:31447) to serve traffic.See http://releases.k8s.io/release-1.3/docs/user-guide/services-firewalls.md for more details.service "gitlab-nodeport" created如果您沒有將其寫下來,則始終可以檢查已部署的服務:

> $ kubectl describe svc gitlab-nodeport --namespace=gitlabName: gitlab-nodeportNamespace: gitlabLabels: name=gitlabSelector: name=gitlabType: NodePortIP: 10.3.0.127Port: ssh 22/TCPNodePort: ssh 30836/TCPEndpoints: 10.2.47.9:22Port: http 80/TCPNodePort: http 31447/TCPEndpoints: 10.2.47.9:80Session Affinity: NoneNo events.現在,我們知道在埠31447上可以使用GitLab的Web界面。將瀏覽器導航到http:// any-of-your-kuberntes-node:31447 /並查看 GitLab。

您可以使用登錄根目錄,密碼根目錄或在部署清單中設置的任何名稱登錄。很棒,下一步是配置入口,使其能夠通過人類可讀的URL訪問它。

入口

入口是允許入站連接到達群集服務的規則的集合。可以將其配置為提供服務外部可訪問的url,負載平衡流量,終止SSL,基於商品名稱的虛擬主機等。

我的配置主要基於kubernetes / contrib的官方示例。 所有與入口相關的清單都位於ingress目錄中。基本上,只有幾個文件:

default-backend.yml-當任何入口規則未處理DNS記錄時提供的容器。configmap.yml-配置映射,其中包含我們要處理的埠和目標的列表。nginx-ingress-lb.yml-實際的基於Nginx的入口控制器,配置為處理埠80,443,22上的流量gitlab-ingress.yml-我們的GitLab實例的入口規則kubectl create -f ingress/default-backend.ymlkubectl create -f ingress/configmap.ymlkubectl create -f ingress/nginx-ingress-lb.ymlkubectl create -f ingress/gitlab-ingress.yml到位並假設已正確配置DNS之後,我們應該能夠訪問http://git.example.com上的 GitLab 。

現在,讓我們部署一個GitLab Runner來運行測試。

亞搏體育APP RUNNER

GitLab Runner支持多種執行器:virtualbox,docker + machine,docker-ssh + machine,docker,docker-ssh,並行,shell,ssh。不幸的是,對Kubernetes原生執行器的支持目前正在進行中,尚未準備就緒。我花了幾個小時試圖使其無法成功運行。這就是為什麼現在我們將使用簡單的docker executor。

由於大多數手冊 都建議使用minio作為高速緩存伺服器,因此我們來部署一個。

kubectl create -f minio/minio-svc.ymlkubectl create -f minio/minio-deployment.yml讓我們確保pod正在運行:

kubectl get pods --namespace=gitlabgitlab minio-2719559383-y9hl2 1/1 Running 0 1m它啟動並運行後,我們需要檢查日誌以獲取令牌和密碼:

> $ kubectl logs -f minio-2719559383-y9hl2 --namespace=gitlab+ exec app server /exportEndpoint: http://10.2.23.7:9000 http://127.0.0.1:9000AccessKey: 9HRGG3EK2DD0GP2HBB53SecretKey: zr+tKa6fS4/3PhYKWekJs65tRh8pbVl07cQlJfkWRegion: us-east-1Browser Access: http://10.2.23.7:9000 http://127.0.0.1:9000Command-line Access: https://docs.minio.io/docs/minio-client-quickstart-guide $ mc config host add myminio http://10.2.23.7:9000 9HRGG3EK2DD0GP2HBB53 zr+tKa6fS4/3PhYKWekJs65tRh8pbVl07cQlJfkWObject API (Amazon S3 compatible): Go: https://docs.minio.io/docs/golang-client-quickstart-guide Java: https://docs.minio.io/docs/java-client-quickstart-guide Python: https://docs.minio.io/docs/python-client-quickstart-guide JavaScript: https://docs.minio.io/docs/javascript-client-quickstart-guide我們將需要複製AccessKey並SecretKey從此響應中保存它。稍後需要填充我們的跑步者。minio還需要做一件事。我們需要創建一個存儲桶。

為此,我們有2個選擇。

首先是直接在文件系統上創建目錄,如下所示:

kubectl exec -it minio-2719559383-y9hl2 --namespace=gitlab -- bash -c 'mkdir /export/runner'其次是通過Web界面進行操作。為此,我們首先需要將minio移植到我們的機器上

kubectl port-forward minio-2719559383-y9hl2 9000:9000 --namespace=gitlab然後將瀏覽器導航到http:// localhost:9000,使用已有的密鑰和機密登錄,並創建一個名為Runner的存儲桶。

在實際部署運行程序之前,我們需要在GitLab中進行註冊。我發現先註冊它,然後將令牌保存到configmap更為方便。

要進行註冊,我們需要獲取GitLab自己的令牌。要獲取它,請以root用戶身份登錄到GitLab,然後導航到admin區域。然後轉到概述->跑步者並複製您的註冊令牌

現在我們需要配置和註冊運行器。我們將為此使用kubectl run命令。它將創建部署,register以交互方式運行帶有參數的默認命令。

> $ kubectl run -it runner-registrator --image=gitlab/gitlab-runner:v1.5.2 --restart=Never -- registerWaiting for pod default/runner-registrator-1573168835-tmlom to be running, status is Pending, pod ready: falseHit enter for command promptPlease enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/ci):http://gitlab.gitlab/ciPlease enter the gitlab-ci token for this runner:_TBBy-zRLk7ac1jZfnPuPlease enter the gitlab-ci description for this runner:[runner-registrator-1573168835-tmlom]: gitlab-docker-runnerPlease enter the gitlab-ci tags for this runner (comma separated):shared,specificRegistering runner... succeeded runner=_TBBy-zRPlease enter the executor: virtualbox, docker+machine, docker-ssh+machine, docker, docker-ssh, parallels, shell, ssh:dockerPlease enter the default Docker image (eg. ruby:2.1):python:3.5.1Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!Session ended, resume using 'kubectl attach runner-registrator-1573168835-tmlom -c runner-registrator -i -t' command when the pod is running> kubectl delete deployment/runner-registrator回答所有問題後,您應該在管理區域的跑步者列表中找到您的跑步者。單擊它並複製生成的令牌並將其粘貼到gitlab-runner/gitlab-runner-docker-configmap.yml 另外,您需要填寫有關minio安裝的信息。

apiVersion: v1kind: ConfigMapmetadata: name: gitlab-runner-docker namespace: gitlabdata: config.toml: | concurrent = 4 check_interval = 1 [[runners]] name = "gitlab-docker-runner" url = "http://gitlab.gitlab/ci" token = <GENERATED TOKEN> executor = "docker" [runners.docker] tls_verify = false image = "python:3.5" privileged = true disable_cache = false volumes = ["/cache"] [runners.cache] Type = "s3" ServerAddress = "minio.gitlab" AccessKey = <YOUR MINIO ACCESS KEY> SecretKey = <YOUR MINIO SECRET KEY> BucketName = "runner"最後一步是實際部署GitLab Runner本身。

kubectl create -f gitlab-runner/gitlab-runner-docker-configmap.ymlkubectl create -f gitlab-runner/gitlab-runner-docker-deployment.yml就是這樣,現在我們已經配置了CI並啟動了GitLab並運行了它。為了測試它,我們可以導入測試庫 並運行管道。

相關焦點

  • GitLab Runner部署(kubernetes環境)
    以下服務需要您在實戰前提前準備好:部署好GitLab,參考《》部署好Harbor,參考《》部署好Helm,參考《》準備完畢後開始實戰;部署miniominio作為一個獨立的服務部署,我將用docker部署在伺服器
  • 記一次Gitlab-CI集成K8S實錄
    2019年號稱雲原生元年,企業全面上雲,上雲就上雲原生。各大雲廠商雲原生事業如火如荼的進行著。Gitlab也不甘人後,很好的支持和構建雲原生項目。部署環境的搭建和配置向來繁雜,雲原生之前的年代,搭建和配置部署環境還存在大量人工而且重複地勞動,浪費了大量時間和精力在環境部署上,而且環境難以移植,微服務的興起更是加劇了環境搭建和配置的難度,對運維也是一大挑戰。
  • 一起學習Kubernetes-01-helm安裝
    Helm是一個kubernetes應用的包管理工具,用來管理預先配置好的安裝包資源。Helm chart是用來封裝kubernetes原生應用程式的yaml文件,可以在你部署應用的時候自定義應用程式的一些metadata,便與應用程式的分發。是一個命令行下的客戶端工具。
  • 如何部署一個Kubernetes集群
    正是基於這樣的痛點,在志願者的推動下Kubernetes社區終於發起了kubeadm這一獨立的一鍵部署工具,使用kubeadm我們可以通過幾條簡單的指令來快速地部署一個kubernetes集群。後面的內容,就將具體演示如何使用kubeadm來部署一個Kubernetes集群。
  • 2020版Kubernetes快速上手指南,讓你所見即所得
    但這又是另外一件不很輕鬆的事情。通過試用免費開放的實驗環境,增強體驗感和可操作性;Github提供同步學習的原始碼,增強演示過程的可複製性,讓所見即所得;精簡Kubernetes概念,快速了解核心內容;同步最新版本,通過Step-by-Step方式跳過各種坑,輕鬆部署
  • Gitlab+Jenkins+Docker+k8s+Helm自動化部署實踐(硬核乾貨!)
    通過前面兩篇文章,我們已經有了一個「嗷嗷待哺」的K8s集群環境,也對相關的概念與組件有了一個基本了解(前期對概念有個印象即可,因為只有實踐了才能對其有深入理解,所謂「紙上得來終覺淺,絕知此事要躬行」),本文從實踐角度介紹如何結合我們常用的Gitlab與Jenkins,通過K8s來實現項目的自動化部署,示例將包括基於SpringBoot的服務端項目與基於Vue.js的Web項目。
  • 如何在Kubernetes上部署MySQL資料庫
    在本文中,我們將展示如何在Kubernetes中部署資料庫,以及可以使用哪些方法在Kubernetes中部署資料庫。資料庫資料庫是一種用於在計算機系統上存儲和處理數據的系統。資料庫引擎可以在資料庫上創建,讀取,更新和刪除。
  • 群暉DS218+部署GitLab
    群暉解決煩惱家裡有臺群暉DS218+,從不關機,為全家提供穩定的圖片和視頻服務,之前已在上面部署了maven私服、MySQL,運行得很穩定,今天就把GitLab也部署在上面吧,今後可以隨時想用就用,算得上懶人救星了
  • 基於 Python 項目的 GitLab-CI 演示
    1.創建一個python項目使用github上開源的一個把項目clone到本地,可以先測試一下手動部署,build鏡像之後,然後啟動➜  [/Users/mac/PycharmProjects] git clone http://gitlab.example.com
  • Gitlab-CI初識
    默認存放於項目倉庫的根目錄,它包含了項目如何被編譯的描述語句。YAML文件使用一系列約束定義了Job啟動時所要做的事情。如果.gitlab-ci.yml未指定Runner的tag,可能一直處於Pending狀態,這時,可以編輯Runner配置,勾上Run untagged jobs。
  • Gitlab-ci: 從零開始的前端自動化部署
    && 自動化部署工具的運行機制 1.2 自動化部署給我們帶來的好處二.知識預備 2.1 gitlab-ci涉及的抽象概念(Runner/PipeLine/Executor/Job ) 2.2 YML文件的基本語法規則 2.3 .gitlab-ci.yml配置的特定關鍵字三.CI實戰 3.1 編寫一個gitlab-ci的「hello world」四.坑點總結五.gitlab-ci進階 5.1
  • 敏捷開發與Gitlab CI/CD持續集成
    持續交付在持續集成的基礎上,將集成後的代碼部署到更貼近真實運行環境的「類生產環境」(production-like environments)中,也就是我們通常說的預發布環境。交付給質量團隊或者用戶,以供評審。如果評審通過,代碼就進入生產階段。持續交付並不是指軟體每一個改動都要儘快部署到產品環境中,它指的是任何的代碼修改都可以在任何時候實施部署。
  • 在 Kubernetes 上部署 Vault
    本文就將來介紹如何使用 HashiCorp Vault 在 Kubernetes 集群中進行秘鑰管理。Vault 介紹Vault 是用於處理和加密整個基礎架構秘鑰的中心管理服務。開啟 Kubernetes 認證方式:/ $ vault auth enable kubernetesSuccess! Enabled kubernetes auth method at: kubernetes/Vault 會接受來自於 Kubernetes 集群中的任何客戶端的服務 Token。
  • 如何在Kubernetes容器環境下部署Spinnaker?
    那麼,Spinnaker可能是多雲平臺部署工具的最佳選擇。本文重點介紹spinnaker的概念、安裝與踩過的坑,spinnaker在kubernetes的持續部署,以及線上容器服務的選擇與多區容災。 1、關於Spinnaker Spinnaker 是什麼?我們先來了解下它的概念。
  • 如何在 Kubernetes 集群中部署 ceph-csi
    本文詳細介紹了如何在 Kubernetes 集群中部署 ceph-csi (v3.1.0),並使用 RBD 作為持久化存儲。Ceph 版本:$ ceph versionceph version 14.2.11 (f7fdb2f52131f54b891a2ec99d8205561242cdaf) nautilus (stable)以下是詳細部署過程
  • 在kubernetes上部署consul集群
    作者:歐陽廣陌 來源:kubernetes中文社區原文連結: https://www.kubernetes.org.cn/4435.html本教程將幫助你在kubernetes上部署一個擁有
  • Gitlab概覽
    當然,與此同時,部署、環境、集成等相關問題也沒得到很好的解決。對於每一次分支合併,我們總是期望可以部署一個穩定的版本。我們可以考慮多環境分支的情況。Feature和Fix在開發人員在開發環境部署測試,master在測試環境中部署測試,pre-production在演示環境中部署測試,production在生產環境發布,一條流水線下來,可以持續完成項目的部署交付。此外,我們可以有多穩定版本的分支策略,用於將軟體發布給外界。
  • 使用 GitLab CI 與 Argo CD 進行 GitOps 實踐
    開發人員在自己的分支上開發代碼,他們分支的每一次提交都會觸發一個階段性的構建,當他們將自己的修改和主分支合併時,完整的流水線就被觸發。將構建應用程式,打包成 Docker 鏡像,將鏡推送到 Docker 倉庫,並自動更新 Kubernetes 資源清單,此外,一般情況下將應用部署到生產環境需要手動操作。
  • 外部Nginx設置Gitlab和部署Pages服務
    伺服器上已經安裝好了Nginx,配置了多個網站服務,這個情況下我們怎樣安裝配置gitlab才能不影響現有的Nginx網站服務?以及如何開啟Pages用戶網站頁面服務?off; root /opt/gitlab/embedded/service/gitlab-rails/public; access_log /var/log/nginx/gitlab_access.log; error_log /var/log/nginx/gitlab_error.log; location / { client_max_body_size 0; gzip
  • 基於docker 的 jenkins-ansible-gitlab 實現自動化部署
    Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。,旨在提供一個開放易用的軟體平臺,使軟體的持續集成變成可能Ansible:ansible 是新出現的自動化運維工具,基於 Python 開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。