实战攻略:利用GitOps在Kubernetes上实现持续交付

本文通过一个简单项目展示了如何在Kubernetes上利用GitOps实现持续交付,详细介绍了设置CI/CD流水线、集成Kubernetes集群、使用Flux(GitOps核心组件)的过程。通过GitOps,当Git发生变更时,自动流水线会同步更新基础设施和应用。
摘要由CSDN通过智能技术生成

640?wx_fmt=jpeg

作者 | Luc Juggery
译者 | 核子可乐
GitOps 是 Weaveworks 提出的一种持续交付方式,其工作原理,是利用 Git 作为声明基础设施与应用程序的单一事实来源。

本文我们将通过一个简单的项目,了解如何设置典型的 CI/CD 流水线,而后通过修改将 GitOps 添加到其中。同时,我们还将演示 Flux——GitOps 的核心组件。几周之前,Flux 已经被 CNCF 正式接纳为沙箱培养项目。

我们要做什么  

下面,我们先来看看整个流程中的具体操作步骤:

  • 对 GitOps 进行简单介绍

  • 设置一个简单的项目,并在 GitLab 之内进行管理

  • 集成一个 Kubernetes 集群

  • 设置一条典型的 CI/CD 流水线

  • 利用 GItOps 处理其中的 CD 部分

什么是 GitOps?  

GitOps 是一种持续交付实现方式。其将 Git 作为声明基础设施与应用程序的事实来源。当对 Git 进行变更时,自动交付流水线也会对您的基础设施进行相应变更。

将变更部署至集群:push 与 pull  

在一条典型的 CI/CD 流水线当中,CI 工具负责运行测试、构建镜像、检查 CVE 并将新镜像重新部署至集群当中,具体如下图所示。

640?wx_fmt=png

典型的 CI/CD 流水线(图片来源:Weaveworks)

GitOps 方法的区别在于,其中的部署部分不再由 CI 工具完成,而是由操作程序通过集群内 Pod 中的运行进程完成(由 Flux 负责实现)。

640?wx_fmt=png

包含 GitOps 的 CI/CD 流水线 (图片来源:Weaveworks)

相关组件  

下图所示为在 Kubernetes 集群当中使用 GitOps 时所需要用到的各组件。

640?wx_fmt=png

在 Kubernetes 集群当中的各 GitOps 组件 (图片来源:Weaveworks)

为了简单起见,Flux 守护程序会不断运行并检查是否存在新的 Docker 镜像。检测到新镜像之后,它会调用 API Server 对当前正在运行的部署加以更新。

在本文的最后一部分中,我们将设置 Flux 并利用它部署一款简单的应用程序。

我们的项目  

在这里,我们使用一个非常简单的 Flask 应用程序。项目的复杂程度并不重要,真正重要的是理解整个 CI/CD 流程的实现方式。

源代码  

我们只需要考虑以下文件:

  • app.py 用于公开一个单独的 HTTP 端点并返回一个字符串

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8000)

- requirements.txt 用于定义 app.py 所需要的依赖性,即 Flask 库

Flask==1.0.2
  • Dockerfile 用于通过源代码构建起一套镜像

FROM python:3-alpine
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
CMD python /app/app.py
确保一切正常  

我们先通过以下命令为我们的应用程序创建第一套 Docker 镜像:

$ docker image build -t hello:1.0 .

在镜像构建完毕之后,我们可以运行容器以使用该镜像。

$ docker container run -p 8000:8000 hello:1.0
 * Serving Flask app “app” (lazy loading)
 * Environment: production

注意:不要在生产环境当中使用该开发服务器,请使用生产 WSGI 服务器作为替代。

* Debug mode: off

* Running on http://0.0.0.0:8000/ (Press CTRL+C to quit)

我们的服务器在监听端口 8000,如下图所示。

640?wx_fmt=png

GitLab 项目  

我们将利用 GitLab 管理这款应用程序,下面创建一个名为 hello 的新项目:

640?wx_fmt=png

在 GitLab 当中创建一个新项目

接下来,我们可以为该应用程序文件夹进行 git 初始化,并将一切 push 至 GitLab 项目当中:

$ git init
$ git remote add origin git@gitlab.com:lucj/hello.git
$ git add .
$ git commit -m "Initial commit"
$ git push -u origin master

几秒之后,我们可以通过 GitLab 的 Web 界面看到该项目中的三个文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值