如何构建Kubernetes CI/CD流水线

持续集成/持续交付(CI/CD)在服务精细化、更新频繁的当下显得愈发重要。 本文将分享如何使用托管的GitLab.com解决方案来实现CI/CD,并将其与Kubernetes原生集成。且文中方法适合其余一切提供Kubernetes接口的CI/CD工具噢!git


持续集成/持续交付(CI/CD)的主题,在服务变得愈来愈细化、更新愈来愈频繁的当下,显得愈发重要。它让公司可以按照一种一致的、可重复操做的方式彻底自动化地完成代码的搭建、测试和部署。github

市场中有很多不一样的CI/CD工具可供用户使用,它们中的不少将能够和Kubernetes进行原生集成。服务器

本文将介绍如何使用托管的GitLab.com解决方案来实现CI/CD。不过本文中讨论到的Kubernetes集成是通用的,其余的CI/CD工具只要提供了Kubernetes接口,就一样能够按本文的方法、使用服务帐号来与Kubernetes进行对接。app

先决条件工具

  1. 用于部署工做负载的Rancher 2.0集群
  2. 登录gitlab.com

设置GitLab.comgitlab

咱们准备使用GitLab提供的一个模版,首先第一步先经过网址https://gitlab.com/users/sign_in登录gitlab.com测试

建立项目编码

将Kubernetes端点添加到你的项目中spa

上面全部的字段都须要填入内容,我会在下文介绍如何填写。3d

API URL

API URL是GitLab用于和你的集群中那些用于部署工做负载的Kubernetes API进行通讯的URL。根据Kubernetes集群运行的位置,你须要确保端口是打开的状态,这样才能让gitlab.com和Kubernetes集群的<address>:<port>进行通讯。

为了检索API URL,咱们将在Rancher服务器上运行一个控制Kubernets集群的脚本,这一步会生成一个kubeconfig文件,文件中包含了咱们使用GitLab配置Kubernetes设置所须要的信息。

登录到运行Rancher Server的服务器

https://gist.github.com/superseb/f6cd637a7ad556124132ca39961789a4下载get_kubeconfig_custom_cluster_rancher2.sh文件中的内容

在服务器上建立一个文件并把内容复制到里面

使用命令chmod +x <filename>让文件可以执行

使用命令./<filename> <name_of_cluster_to_deploy_to>运行脚本

这会在本地目录中生成一个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 <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名称应该指向集群上部署服务的入口。在测试中,你可使用<host-ip>.nip.io,它将解析为指定的主机ip。

点击【保存更改/Save changes】,这会自动发布你的流水线而且启动做业运行。

你能够进入CI/CD – Pipelines中查看进度,在production阶段结束时,你应该能看到能够访问应用程序的http地址了

但愿这篇博客能够带你成功部署一个很棒的CI/CD流水线。另外,正如文章开头所言,文中的Kubernetes部分适用于大多数CI/CD Kubernetes集成。

相关文章
相关标签/搜索