如何使用Gitlab CI/CD快速集成Kubernetes

本文面向具有一定gitlab和K8S使用經驗的讀者

持續集成,持續部署和持續交付是現代開發團隊中越來越受歡迎的主題。 它們共同使團隊能夠在任何提交時構建,測試和部署代碼。 這些方法的主要好處是能夠通過自動化管道更頻繁地發布更高質量的代碼。 困難的部分是建造這樣的管道。 我們需要選擇,學習,安裝,集成和維護各種工具。

GitLab提供了一個功能齊全的工具生態系統,使我們能夠在幾分鐘內創建自動化管道! 從源代碼管理到問題跟蹤和CI,我們發現一切都在一個屋檐下,完全集成并隨時可用,如下圖所示:

image.png

在本文我們將在Kubernetes集群上創建一個使用GitLab CI構建,測試和部署的Spring Boot應用程序。 Spring Boot允許開發人員構建生產級獨立應用程序,如典型的CRUD應用程序,以最少的配置公開RESTful API,從而大大減少了使用Spring Framework所需的學習曲線。 Kubernetes是一個受Google Borg啟發的開源容器協調器,可以編排,擴展和管理容器化應用程序。

一、環境介紹

image.png

在正式介紹之前,先需要準備的環境清單:

  • 搭建好Kubernetes集群
  • GitLab實例
  • 啟用GitLab容器注冊表。
  • 創建一個Gitlab項目
  • Gitlab 能夠訪問Kubernetes apiserver。
  • 配置并啟用GitLab CI runner。
  • kubectl 配置了Kubernetes集群訪問。
  • Kubernetes ServiceAccount

二、啟用GitLab容器注冊表

參考官方文檔:https://docs.gitlab.com/ee/administration/container_registry.html

注釋:在GitLab 8.8中引入。 - 在GitLab 8.9中添加了Docker Registry清單v1支持,以支持早于1.10的Docker版本。

默認情況下,容器注冊表在HTTPS下工作。使用HTTP是可能的,但不建議使用,超出了本文檔的范圍。

2.1 在現有GitLab域下配置Container Registry

如果注冊表配置為使用現有的GitLab域,則可以在端口上公開注冊表,以便您可以重用現有的GitLab TLS證書。

假設GitLab域是https://gitlab.example.com注冊表向外界公開的端口4443,如果您正在使用Omnibus GitLab,這里是您需要設置的內容gitlab.rb。

注意: 請注意選擇與Registry偵聽的端口不同的端口(5000默認情況下),否則會遇到沖突。

2.1.1 Omnibus GitLab安裝

1、/etc/gitlab/gitlab.rb應該包含注冊表URL以及GitLab使用的現有TLS證書和密鑰的路徑:

registry_external_url 'https://gitlab.example.com:4443'

請注意registry_external_url在現有GitLab URL下如何監聽HTTPS,但在另一個端口上。

如果TLS證書沒有在/etc/gitlab/ssl下面,并且/etc/gitlab/ssl/gitlab.example.com.crt 的證書沒有,/etc/gitlab/ssl/gitlab.example.com.key的密鑰也沒有,那么你可以自定義證書路徑,取消注釋以下行,寫你的證書路徑:

 registry_nginx['ssl_certificate'] = "/path/to/certificate.pem"
 registry_nginx['ssl_certificate_key'] = "/path/to/certificate.key"
配置實例:

egrep -v '(#|^$)' /etc/gitlab/gitlab.rb
external_url '[https://gitlab.xxxxx.com](https://gitlab.xxxxx.com/)'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '[shzabbix@xxxxxxx.com](mailto:shzabbix@xxxxxxx.com)'
gitlab_rails['gitlab_email_display_name'] = '隨便取'
gitlab_rails['gitlab_email_reply_to'] = 'noreply'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "[smtp.qiye.163.com](http://smtp.qiye.163.com/)"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "shzabbix@xxxxxx.com"
gitlab_rails['smtp_password'] = "*******************"
gitlab_rails['smtp_domain'] = "[163.com](http://163.com/)"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
registry_external_url '[https://registry.xxxxx.com:4443](https://registry.xxxxx.com:4443/)'
gitlab_rails['registry_enabled'] = true
gitlab_rails['registry_host'] = "registry.xxxxx.com"
nginx['enable'] = true
nginx['client_max_body_size'] = '250m'
nginx['redirect_http_to_https'] = false #由于開發使用的是內網,我這里配置不轉發到https,http和https共存。
nginx['ssl_client_certificate'] = "/etc/gitlab/ssl/ca.crt"
nginx['ssl_certificate'] = "/etc/gitlab/ssl/xxxxx.com.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/xxxxx.com.key"
nginx['ssl_ciphers'] = "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256"
nginx['ssl_prefer_server_ciphers'] = "on"
nginx['ssl_protocols'] = "TLSv1.1 TLSv1.2"
registry_nginx['enable'] = true
registry_nginx['ssl_certificate'] = "/etc/gitlab/ssl/xxxxx.com.crt"
registry_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/xxxxx.com.key"
registry_nginx['proxy_set_headers'] = {
 "Host" => "$http_host",
 "X-Real-IP" => "$remote_addr",
 "X-Forwarded-For" => "$proxy_add_x_forwarded_for",
 "X-Forwarded-Proto" => "https",
 "X-Forwarded-Ssl" => "on"
}

注意:作者使用的證書都是購買的,自建的沒測試過。 如果沒法買,建議用letsencrypt的免費證書

2、保存文件并重新配置GitLab以使更改生效。

gitlab-ctl reconfigure
gitlab-ctl restart

3、現在我們訪問項目界面會出現注冊表


image.png

三、創建一個GitLab項目

參考文章:https://about.gitlab.com/2016/12/14/continuous-delivery-of-a-spring-boot-application-with-gitlab-ci-and-kubernetes/

要引導Spring Boot應用程序,我們導航到Spring Initializr Web頁面并使用預先選擇的Spring Boot Version生成Gradle項目。Gradle是Java項目中新興的項目管理工具,用于定義依賴項和構建生命周期。我們作為Group離開并設置為工件名稱。我們選擇依賴項,它支持使用TomcatSpring MVC進行完全堆棧Web開發,以及實現某些生產級功能的依賴項,這些功能對監視和管理應用程序(如運行狀況檢查和HTTP請求跟蹤)非常有用。

我們將生成項目,名稱為actuator-sample.zip下載到我們的機器上。

image.png

通過如下命令行啟動Spring Boot應用程序。

cd actuator-sample
gradle bootRun
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容