如何使用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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容