文档章节

如何构建Kubernetes CI/CD流水线

RancherLabs
 RancherLabs
发布于 2018/08/16 16:15
字数 1439
阅读 182
收藏 7

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


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

市场中有不少不同的CI/CD工具可供用户使用,它们中的很多将可以和Kubernetes进行原生集成。

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

先决条件

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

设置GitLab.com

我们准备使用GitLab提供的一个模版,首先第一步先通过网址https://gitlab.com/users/sign_in登陆gitlab.com

创建项目

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

上面所有的字段都需要填入内容,我会在下文介绍如何填写。

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集成。

© 著作权归作者所有

RancherLabs
粉丝 88
博文 243
码字总数 528793
作品 0
深圳
程序员
私信 提问
应该使用什么 CI/CD 工具?

本文首发于:Jenkins 中文社区 在我们正在进行的 Kubernetes FAQ 系列中,我们回答了社区中一些常见的问题,本周我们将讨论在选择 CI/CD 工具时需要考虑什么。 目前已经有大量的 CI/CD 工具可...

Jenkins中文社区
04/30
65
0
华为云容器化交付流水线 引领企业容器化之路

ContainerOps 12月16日,OSChina在深圳举办的”源创会年终盛典”上,华为云容器服务技术总监发表了名为《DevOps On Kubernetes》的主题演讲,演讲就如何将DevOps理念与容器技术相结合,实现容...

云容器大师
2018/12/18
0
0
Jenkins & Docker 持续集成实践

Jenkins & Docker 持续集成实践 运维生存时间 - 运维生存时间2017-12-109 阅读 jenkinsdockerLinux 发表评论 A+ 所属分类: Linux 前言 持续集成(CI/CD)是一种软件开发实践。用于帮助团队成员...

运维生存时间 - 运维生存时间
2017/12/10
0
0
Step by Step!Kubernetes持续部署指南

本文是作者通过亲身实践,从零基础开始,一步一步总结出来的Kubernetes持续部署工作流程。文章从前期的工具准备开始,到复刻存储库、测试、构建镜像、构建流水线最后进行部署,所有的工作流程...

RancherLabs
09/04
905
1
利用Serverless Kubernetes和Kaniko快速自动化构建容器镜像

前言: 在云原生时代中,容器镜像是一切应用分发的基础载体,除了dockerhub作为流行的镜像仓库外,各大公有云厂商也都提供了功能丰富镜像仓库服务,如ACR(Aliyun Container Registry), GCR...

贤维
03/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

centos7上部署dubbo管理控制台dubbo-admin

centos7上部署dubbo管理控制台dubbo-admin 1 准备工作 服务器:系统centos7, 内存4G, 存储60G, ip 192.168.159.128 软件环境: 安装有jdk1.8, 具体安装方式参见《centos7上安装jdk1.8》博...

flygrk
11分钟前
2
0
工作中一些原则体会

尽可能让一切变得简单,用最简单的方式完成工作 能用最少的概念,最精简易懂的概念模型来抽象系统,多一个概念就多一份别人了解系统以及维护系统的复杂度,别人也会质疑多一个概念的意义所在...

小强的进阶之路
15分钟前
4
0
Android -------- kotlin插件神器Json直接生成javaBean

这是一个data class从JSON字符串生成Kotlin 的插件,换句话说,是一个将JSON字符串转换为Kotlin data class(Json到Kotlin)的插件 在使用Kotlin进行开发的时候,我们需要经常对Json数据做解析...

切切歆语
40分钟前
31
0
1、Spring注解开发,第一天

第一天:Spring annotation开发 目录:1、@Configuration与@Bean给容器注册组件 2、@ConponentScan自动扫描注解 一、@Configuration与@Bean给容器注册组件 1、旧版本中创建配置文件和Bean //...

有一个小阿飞
48分钟前
24
0
斯坦福博弈论笔记整理活动的任务已重新划分,望周知

参与方式:https://github.com/apachecn/stanford-game-theory-notes-zh/blob/master/CONTRIBUTING.md 整体进度:https://github.com/apachecn/stanford-game-theory-notes-zh/issues/1 项目......

ApacheCN_飞龙
49分钟前
23
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部