写点什么

如何国建 Kubernetes CI/CD 流水线

2020 年 4 月 15 日

如何国建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


创建项目


第一步先创建项目


  • 点击 New project

  • 选择【从模版创建/Create from template】标签

  • 点击



图标下的



  • 设置【项目名称/Project name】

  • 点击【创建项目/Create Project】

  • 等待项目完成导入


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




下面选择



点击【Kubernetes 集群/Kubernetes cluster】,接着选择【添加现有集群/Add existing cluster】



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


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找到。


为了创建必要的条件,我们需要运行下面的命令:



项目命名空间


如果你已经按照这篇文章以及我提供的 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 集成。


2020 年 4 月 15 日 23:0589

评论

发布
暂无评论
发现更多内容

食堂就餐卡系统设计

Season

极客大学架构师训练营

架构设计作业1——食堂就餐卡系统设计

Andy风

架构师训练营作业

邵帅

架构师训练营第一周总结

邵帅

讲一个程序员如何副业月赚三万的真实故事

非著名程序员

程序员 独立开发者 副业赚钱 提升认知

食堂就餐卡系统设计

Lane

重学 Java 设计模式:实战装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)

小傅哥

设计模式 小傅哥 重构 代码质量 代码坏味道

数据类型转换

拾贝

论一个前端工程师的自我修养

萧文翰

ios android 开发者 前端 Web

神奇的梦想

泰稳@极客邦科技

身心健康 个人成长 目标管理

游戏夜读 | 毛利率有多少?

game1night

极客时间第0期架构师训练营第一周总结

2流程序员

UML 建模

师哥

食堂就餐卡系统设计

于成

比Webpack更高效的Rollup入门指南

费马

Rollup 打包 前端工程化 webpack

架构课程心得

dj_cd

极客大学架构师训练营

8000字长文让你彻底了解 Java 8 的 Lambda、函数式接口、Stream 用法和原理

古时的风筝

函数式接口 Lambda stream Java 25 周年

「架构师训练营」Week01 作业+总结

PowerZhang

极客大学架构师训练营

架构师训练营作业--Week1

吴炳华

架构师训练营第一周总结

Hugo

switch 语句

拾贝

【大厂面试04期】讲讲一条MySQL更新语句是怎么执行的?

NotFound9

MySQL 数据库 后端

解决出海网络难题 融云保障 MiniJoy 千万印度用户流畅互动

Geek_116789

初步架构想法

极客大学架构师训练营

剖析Golang Context:从使用场景到源码分析

伴鱼技术团队

golang 源码分析 并发编程 程序语言 Context

if语句

拾贝

四个和成长有关的小故事

泰稳@极客邦科技

团队管理 TGO鲲鹏会 团队组织 职业成长

再下一城 三六零收购织语CCwork深化“智慧办公”生态布局

人称T客

[Go] 写一个守护协程的通用套路是什么?

eddix

golang pattern

架构师训练营第1周学习总结

Season

极客大学架构师训练营

第一周.UML课后作业

西柚

UML

如何国建Kubernetes CI/CD流水线-InfoQ