CI/CD流程实现及环境部署(理论篇)

Kubernetes 支持多个容器运行环境:DockercontainerdCRI-O 以及任何实现 Kubernetes CRI (容器运行环境接口)
Kubernetes 官方发布公告,宣布自 v1.20 起放弃对 Docker的支持。目前,Kubelet 中的 Docker支持功能现已弃用,并将在之后的版本中被删除。逐渐转移到containerd。不过本文仍以docker为基础到kubernetes的进阶~

一、Docker

Docker Engine

Docker Engine 是一种开源容器化技术,用于构建和容器化您的应用程序。是一个C/S架构的应用程序,主要包含以下几个组件:
①常驻后台进程dockerd
②一个用来和守护进程dockerd交互的REST API Server
③命令行界面 (CLI) 客户端(我们常使用的docker命令)


docker engine.png
Docker架构

Docker 使用客户端-服务器架构。Docker客户端与 Docker守护进程对话,后者负责构建、运行和分发 Docker 容器的繁重工作。Docker 客户端和守护程序可以 运行在同一系统上,或者您可以将 Docker 客户端连接到远程 Docker 守护程序。Docker 客户端和守护进程使用 REST API、UNIX 套接字或网络接口进行通信。另一个 Docker 客户端是 Docker Compose,它允许您使用由一组容器组成的应用程序。


docker架构.png

安装

Install Docker Engine on Ubuntu

二、Kubernetes

简介

kubernetes是Google基于borg开源的容器编排系统,它的目标是管理跨多个主机的容器,用于自动部署、扩展和管理容器化的应用程序,主要实现语言为go语言。

集群

当你部署完Kubernetes,即拥有了一个完整的集群。一个Kubernetes集群由一组被称作为节点的机器组成:

  • master负责管理集群,协调集群中的所有活动,例如调度应用程序、维护应用程序所需的状态、扩展应用程序和滚动更新
  • 节点是Kubernetes集群中的工作机器,可以是物理机或虚拟机。每个工作节点都有一个kubelet,它是管理节点并与k8s master节点进行通信的代理。在这些节点上运行Kubernetes所管理的容器化应用程序。
  • 集群至少拥有一个工作节点。


    k8s cluster.png

Pod

Pod是可以在kubernetes中创建和管理的、最小的可部署的计算单元。
Pod是一组紧密关联的容器集合,它们共享存储、网络、以及怎样运行这些容器的声明。通常你不需要直接创建Pod,甚至单实例Pod。相反,你会使用Deployment 或Job这类工作负载资源来创建Pod。如果Pod需要跟踪状态,可以考虑statefulSet资源。


pod.png

Label

Label 是识别 Kubernetes 对象的标签,以 key/value 的方式附加到对象上。Label 不提供唯一性,并且实际上经常是很多对象(如Pods)都使用相同的 label 来标志具体的应用。 Label 定义好后其他对象可以使用 Label Selector 来选择一组相同 label 的对象(比如Service 用 label 来选择一组 Pod)。Label Selector支持以下几种方式:

  • 等式,如app=nginx和env!=production
  • 集合,如env in (production, qa)
  • 多个label(它们之间是AND关系),如app=nginx,env=test

Namespace

Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。 这些虚拟集群被称为名字空间。Namespace 是对一组资源和对象的抽象集合。
名字空间资源本身、底层资源(节点Node和持久化卷PV)不属于任何名字空间。

Deployment

一个Deployment为Pods和ReplicatSets提供声明式的更新能力。Deployment 确保任意时间都有指定数量的 Pod“副本”在运行。Deployment 还支持回滚和滚动升级。
当创建 Deployment 时,需要指定两个东西:

  • Pod模板:用来创建 Pod 副本的模板
  • Label标签:Deployment 需要监控的 Pod 的标签。
    现在已经创建了 Pod 的一些副本,那么在这些副本上如何均衡负载呢?我们需要的是 Service。

Service

Service 是应用服务的抽象,通过 labels 为应用提供负载均衡和服务发现。匹配 labels 的Pod IP 和端口列表组成 endpoints,由 kube-proxy 负责将服务 IP 负载均衡到这些endpoints 上。

每个 Service 都会自动分配一个 cluster IP(仅在集群内部可访问的虚拟地址)和 DNS 名,其他容器可以通过该地址或 DNS 来访问服务,而不需要了解后端容器的运行。


图片.png

安装kubernetes

可参考K8S安装部署

三、Harbor

简介

Harbor 是一个CNCF基金会托管的开源的可信的云原生docker registry项目,可以用于存储、签名、扫描镜像内容,Harbor 通过添加一些常用的功能如安全性、身份权限管理等来扩展 docker registry 项目,此外还支持在 registry 之间复制镜像,还提供更加高级的安全功能,如用户管理、访问控制和活动审计等,在新版本中还添加了Helm仓库托管的支持。
Harbor最核心的功能就是给 docker registry 添加上一层权限保护的功能,docker registry v2 就已经为我们提供了支持,v2 集成了一个安全认证的功能,将安全认证暴露给外部服务,让外部服务去实现。


docker login.png

安装Harbor

可参考通过helm在k8s上搭建Harbor

四、Jenkins

简介

Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。

Pipeline

Jenkins 流水线是一套插件,它支持实现和集成 continuous delivery pipelines 到Jenkins。对Jenkins 流水线的定义被写在一个文本文件中 (成为 Jenkinsfile),该文件可以被提交到项目的源代码的控制仓库。 这是"流水线即代码"的基础; 将CD 流水线作为应用程序的一部分,像其他代码一样进行版本化和审查。
流水线是用户定义的一个CD流水线模型 。流水线的代码定义了整个的构建过程, 他通常包括构建, 测试和交付应用程序的阶段 。

安装Jenkins

可参考在k8s上安装Jenkins

五、CI/CD

以下列实践过的流程来讲述整个CI/CD 过程

  • 开发人员提交代码到 Gitlab 代码仓库
  • 通过 Jenkins 的轮询SCM触发 Pipeline 自动构建
  • Jenkins 触发构建构建任务,根据 Pipeline 脚本定义分步骤构建
  • 先进行代码静态分析,单元测试(本文跳过)
  • 根据构建结果构建 Docker 镜像
  • 推送 Docker 镜像到 Harbor 仓库
  • 触发更新服务阶段
  • 查看服务是否更新成功

CI/CD demo.png

部署流程可参考Jenkins pipeline部署k8s应用

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

推荐阅读更多精彩内容