当前位置: 首页 > 网络应用技术

基于Kubevela的Gitops的交付

时间:2023-03-05 16:31:27 网络应用技术

  Kubevela是一个简单,容易使用的,高度可扩展的云本机应用程序管理和交付平台,它使开发人员可以在Kubernetes上定义和交付现代微服务,而无需了解与Kubernetes基础架构有关的任何详细信息。

  Kubevela背后的OAM模型自然解决了应用程序构建过程中复杂资源的管理问题。同时,它还对以后的操作和维护策略进行建模,这意味着Kubevela可以将gitops结合起来,以管理复杂和大型应用程序。融合是由于团队造成的团队。系统量表的增长引起的系统复杂性。

  它的核心想法是存储应用程序系统所需的基础架构和应用程序配置声明,并在Git Warehouse中使用自动化过程合作,以使自动化过程逐渐更新到每个仓库之后的最新配置,以逐步更新环境。

  此方法允许开发人员直接更改GIT仓库中代码和配置的代码和配置。使用Gitops可以为应用程序研究和开发带来许多价值,例如:

  Kubevela被用作发出控制平面的声明性应用程序。它自然支持使用Gitops,并使用户更明显地感觉到Gitops带来的好处,以及结束的应用程序交付和管理经验,包括:

  在本文中,我们主要解释直接在Gitops模式下直接使用Kubevela提供的步骤。

  Gitops工作流程分为两个部分:CI和CD:

  2)基于拉的:拉动模式的CD将更改集群中仓库(代码仓库或配置仓库)的更改,并将这些更改与群集同步。群集拉出和更新,从而避免了秘密暴露的问题。这也是本文中描述的核心内容。

  交付了两种类型的人员。我们将单独介绍:

  如图所示,对于平台管理员/操作和维护人员,他们无需关心应用程序的代码,因此他们只需要准备git配置仓库并部署kubevela配置文件。通过直接更新Git配置仓库,以便可以跟踪每个配置更改。

  准备配置仓库

  特定的配置可以参考示例仓库1(有关详细信息,请参见文章末尾的相关链接)。

  在此示例中,我们将部署MySQL数据库软件作为项目的基础结构,同时部署业务应用程序来使用此数据库。配置仓库的目录结构如下:

  Kubevela建议使用上述目录结构来管理您的Gitops仓库。与群集/需要手动部署到集群的Kubevela Gitops配置。应用程序/和基础架构/基础结构配置分别存储。通过将应用程序与基本配置分开,您可以更合理地管理部署环境,并隔离应用程序更改的影响。

  集群/目录

  首先,让我们看一下群集目录,这也是Kubevela将Gitops连接到目录配置目录的初始化。

  以簇/corma.yaml为例:

  apps.yaml几乎与infra.yaml一致,但是在apps.yaml中,文件目录之间存在区别/应用程序,指示应用程序/目录中文件的更改。

  群集文件夹中的gitops控制配置文件需要在初始化时一次手动部署到群集。之后,Kubevela将自动监视应用程序/和Infrastic/ Directory中的配置文件,并定期更新。

  应用/目录

  Apps / Directory存储应用程序配置文件,它是一个简单的应用程序配置数据库信息和入口的应用程序。该应用程序将连接到MySQL数据库,然后简单地启动服务。在默认服务路径下,将显示当前版本号。DB路径,将列出当前数据库中的信息。

  这是一个使用Kubevela构建的组件类型Web服务的应用程序,该应用程序绑定了Ingress操作和维护功能。通过声明应用程序中的操作和维护功能,只需要一个文件,并且部署,服务和入口的部署,服务和入口底层可以设法更方便地管理应用程序。

  基础架构/目录

  将一些基础架构配置存储在基础架构/目录中。我们使用MySQL控制器(请参阅文章末尾的相关链接)来部署MySQL群集。

  注意,请确保群集中有一个秘密,并通过root_password声明MySQL密码。

  在此MySQL应用程序中,我们使用Kubevela Workflow的能力。工作流程分为两个步骤,第一步将部署MySQL Controller。在成功部署控制器并正确运行的控制器后,第二步将开始部署MySQL群集。

  在群集/目录中部署文件

  配置上述文件并将其存储在Git配置仓库中后,我们需要在集群中的群集中手动部署Kubevela Gitops配置文件。

  首先,在群集中部署簇/ infra.yaml。可以看到它会自动将MySQL部署文件在群集中的Infrastic/ Directory中拉动:

  然后,在群集中部署簇/ apps.yaml。您可以看到它会在应用程序/目录中自动提取应用程序部署文件:

  在这一点上,我们通过部署Kubevela Gitops配置文件来自动提取群集中的应用程序和数据库。

  当前版本为0.1.5,当前版本为0.1.5,并且已成功连接到数据库:

  修改设置

  完成第一个部署后,我们可以通过配置仓库中的配置来完成群集的配置更新。

  修改入口域:

  一段时间后,查看集群中的入口:

  可以看出,入口的主机地址已成功更新。

  这样,我们可以通过更新Git配置仓库中的文件来轻松更新集群中的配置。

  对于终端开发人员,除了Kubevela git配置仓库外,还需要准备一个应用程序代码仓库。图像并将其推到镜像仓库。Kubevela将监视镜像仓库中的最新镜像,并自动更新仓库中的镜像配置,最后更新集群中的应用程序配置。用户可以实现配置的效果,在集群中,群集的效果也会自动更新。

  准备代码仓库

  用一些源代码和相应的Dockerfile准备代码仓库。

  这些代码将连接到MySQL数据库,并只需启动服务。在默认服务路径下,将显示当前版本号。在 /DB路径下,将列出当前数据库中的信息。

  我们希望用户更改提交代码后,最新的镜像图像将自动构造并将其推向镜像仓库。可以通过集成GitHub Action,Jenkins或其他CI工具来实现这一步骤。在此示例中,我们将继续继续进行。通过使用github操作进行集成。特定的代码文件和配置可以参考示例仓库2(有关详细信息,请参见文章末尾的相关链接)。

  配置秘密信息

  将新镜子推到镜像仓库之后,Kubevela将识别新图像并在仓库和群集中更新应用程序配置文件。因此,我们需要一个包含git信息的秘密才能将kubevela提交给git warehouse.deploy.deploy。文件,用您的git用户名和密码(或令牌)替换用户名和密码:

  准备配置仓库

  配置仓库类似于以前的面孔对操作和维护人员的配置,并且仅需要添加与镜像仓库相关的配置。有关特定的配置,请参阅示例仓库1(请参阅相关链接(请参阅相关链接)文章的结尾以获取详细信息)。

  修改apps.yaml在簇/中,此gitops配置将监视应用程序/仓库下的应用程序/下方的更改和镜像仓库中的镜像更新:

  修改apps/my-app.yaml中的映像字段,并添加#{“ $ imagePolicy”的注释:“默认值:apps”}。kubevela将通过此Annotation.default.default.default.default:apps是相应的镜像字段上面的命名空间和名称配置。

  在将包含镜像仓库配置的文件更新到集群中之后,我们可以通过修改代码来修改代码以完成应用程序更新。

  修改代码

  将代码文件中的版本更改为0.1.6,并在数据库中修改数据:

  将此更改提交给代码仓库,我们可以看到我们配置的CI组装线开始构建镜子,并将其推到镜像仓库。

  Kubevela将使用最新的镜像标签来更新应用程序/在应用程序的应用下/在最新的镜子标签下。

  目前,您可以看到配置仓库中的Kubevelabot提交。提交的信息具有自动更新图像的前缀。您还可以使用{{range .updated.images}}} {{println。} {{end}} {{end}}在commitMessage字段中添加所需的信息。

  值得注意的是,如果要将代码和配置放在同一仓库中,则需要过滤kubevelabot的提交以防止装配线的重复构造。您可以在CI中通过以下配置过滤:

  再次查看集群中的应用程序,您可以看到一段时间后,MY-APP的图像已更新。

  Kubevela将通过您配置的间隔时间间隔每隔一次从配置仓库和镜像仓库中获取最新信息。当更新Git Warehouse中的配置文件时,Kubevela将在最新的配置群集中更新应用程序。当在镜像仓库中添加新标签时,Kubevela将根据您配置的策略规则筛选出最新的镜像标签,并且将其更新到git仓库。当更新代码仓库中的文件时,Kubevela将重复第一步并更新集群中的文件,以实现自动部署的效果。

  通过对应于Curl的入口查看当前版本和数据库信息:

  该版本已成功更新!此时,我们已经完成了从更改代码到自动部署再到集群的所有操作。

  在运输方面,如果您需要更新基础架构的配置(例如数据库)或应用程序的配置项目,则只需要修改配置仓库中的文件即可。Kubevela将自动将配置与群集同步,并简化部署过程。

  在研发方面,用户修改代码仓库中的代码后,kubevela将自动更新仓库中的镜像图像。结果,应用程序版本已更新。

  通过与Gitops结合使用,Kubevela可以加速从开发到部署的整个过程。

  相关链接

  1)使用Jenkins + Kubevela完成应用程序的连续交付:

  https://kubevela.io/zh/blog/2021/09/02/kubevela-jenkins-cicd

  2)示例仓库1:

  https://github.com/oam-dev/samples/tree/master/9.gitops_demo/for-sres

  3)MySQL控制器:

  https://github.com/bitpoke/mysql-perator

  4)示例仓库2:

  https://github.com/oam-dev/samples/tree/master/9.gitops_demo/for-developers/app-code

  作者| dong tianxin(Misty)资料来源:阿里巴巴云