极狐GitLab 与 Flux 集成实现 GitOps

目录

flux 和 GitOps

极狐GitLab 与 flux 的集成

flux 命令行安装

极狐GitLab + flux = GitOps

GitOps Demo

写在最后


flux 和 GitOps


众所周知,weaveworks 公司在 2017 年提出了 GitOps 这个概念,而 flux 是 weaveworks 开源的一款对 Kubernetes 上的应用实现持续交付的工具,2019 年 7 月 15日 被 CNCF 接受,现在处于孵化阶段。

关于 GitOps 的更多详细内容可以查看本公众号过往的文章:

  • 云原生时代,你还不懂GitOps?

  • 让 KAS 给 GitOps 插上腾飞的翅膀

  • 极狐GitLab 和 ArgoCD 的集成实践

简而言之:flux 是实现 GitOps 的一款开源工具。

极狐GitLab 与 flux 的集成


flux 的使用是通过 flux 命令行来实现的。先进行 flux 命令行的安装。

flux 命令行安装

flux CLI 的安装可以参考官方文档。本文以 macOS 为例,使用下面的命令即可安装成功:

$ brew install fluxcd/tap/flux

查看 flux 的版本,确认安装是否成功:

$ flux -v
flux version 0.17.2

极狐GitLab + flux = GitOps

极狐GitLab 与 flux 能够很好的集成,从而实现 GitOps workflow。其核心原理是:极狐GitLab 作为单一可信源,当 极狐GitLab 仓库有变更时,变更会自动同步至 Kubernetes 集群侧。示意图如下。

图片

可以用 flux bootstrap 命令来创建一个 GitOps workflow。flux bootstrap 命令有很多参数,详细的使用可以用 flux bootstrap -h 来查看。在执行 bootstrap 命令之前,可以先用 flux check --pre 来做一个安装前的检查,确保目标 Kubernetes 集群的版本能够满足 flux 的要求。

$ flux check --pre
► checking prerequisites
✔ kubectl 1.21.2 >=1.18.0-0
✔ Kubernetes 1.20.6-tke.3 >=1.16.0-0
✔ prerequisites checks passed

可以看到目标集群以及 kubectl 符合要求。

下面用 flux bootstrap 来创建一个基于极狐GitLab 的 GitOps workflow。使用命令如下:

$ flux bootstrap gitlab \
   --hostname gitlab.cn \
   --interval 30s \
   --owner xiaomage \
   --private \
   --repository flux-gitops \
   --path jihu

其中参数的具体含义为:

  • bootstrap gitlab:表明是基于 GitLab 仓库来进行 bootstrap 操作

  • hostname:指定 GitLab 的 hostname,默认是 gitlab.com,对于极狐GitLab Saas 服务来讲是 gitlab.cn

  • interval:仓库的同步时间,默认是 1min

  • owner:极狐GitLab 的用户名或者某个 Group

  • private:如果设置为 true 则 bootstrap 过程中创建的仓库是私有仓库(默认是 true)

  • repository:极狐GitLab 的仓库名称

  • path:相对于极狐GitLab 仓库根路径的相对路径

然后将获取的 token 注入为环境变量:

$ export GITLAB_TOKEN=YOUR-JiHu-GitLab-Token

然后执行上述的 flux bootstrap 命令。可以看到整个 bootstrap 过程:

► connecting to https://gitlab.cn
► cloning branch "main" from Git repository "https://gitlab.cn/xiaomage/flux-gitops.git"
✔ cloned repository
► generating component manifests
✔ generated component manifests
✔ committed sync manifests to "main" ("53f2232c92ad8769dc796d2e38995ee156fcf33b")
► pushing component manifests to "https://gitlab.cn/xiaomage/flux-gitops.git"
► installing components in "flux-system" namespace
✔ installed components
✔ reconciled components
► determining if source secret "flux-system/flux-system" exists
► generating source secret
✔ public key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCyDKHJ3QDk+UVJS8zYe0cFIqz3KNUDAFlKXf0NaGH/gwYW1L2XxFKfzJAQydc+DGBGnrEGFB3d21mUpaXkxrFsCEYOxPuh277jvVZsgBOCsWwXkbUCAAsogUJyNfUWvEdUZYYrZ//84o0QbPylnnoUw9Y5lvC8BcArZ13kGeRvxwDbcweGho3nBPa1JP+nq0+X+/2QT+5gor9uQsa8x4c8eOYApOlefGQ9nbhZdM/kfzLVU9yCTjkKPcu6iaAzWIE1JXt+90lMmL4CzqwNjN231hu6H1ZOpdW/mtTYY8Zp9Qx/0duSjtfTQsJUqDNS5CA/nQ2Y9VfaLeTI06cI44kb
✔ configured deploy key "flux-system-main-flux-system-./jihu" for "https://gitlab.cn/xiaomage/flux-gitops"
► applying source secret "flux-system/flux-system"
✔ reconciled source secret
► generating sync manifests
✔ generated sync manifests
✔ committed sync manifests to "main" ("28df0fae5bc6327cbcaf2884a775110cb937f78b")
► pushing sync manifests to "https://gitlab.cn/xiaomage/flux-gitops.git"
► applying sync manifests
✔ reconciled sync configuration
◎ waiting for Kustomization "flux-system/flux-system" to be reconciled
✗ context deadline exceeded
► confirming components are healthy
✔ helm-controller: deployment ready
✔ kustomize-controller: deployment ready
✔ notification-controller: deployment ready
✔ source-controller: deployment ready
✔ all components are healthy

整个过程,大概有如下几个操作:

  • 在极狐GitLab 上创建名为 flux-gitops 的仓库(由 bootstrap 时的 repository 参数指定);

  • 自动创建包含 GitOps toolkit components 的 manifest 文件(gotk-components.yaml);

  • 根据上述生成的 manifest 文件创建 GitOps toolkit components;

  • 生成并添加 Deploy key;

  • 自动创建包含 GitOps toolkit sync 信息的 manifest 文件(gotk-sync.yaml);

  • 检查 GitOps toolkit 相关 components 的健康状态

可以在极狐GitLab 上面查看 bootstrap 过程中创建的仓库,其目录结构为:

.
└── jihu
    └── flux-system
        ├── gotk-components.yaml
        ├── gotk-sync.yaml
        └── kustomization.yaml

2 directories, 3 files

jihu 为 bootstrap 时由 path 指定的参数。

添加的 Deploy key 可以在 flux-gitops 仓库的 Settings --> Repository --> Deploy keys 查看:

图片

查看 GitOps toolkit components 的状态:

$ kubectl -n flux-system get pods
NAME                                       READY   STATUS    RESTARTS   AGE
helm-controller-5dfb499dfb-fpjgh           1/1     Running   0          7h45m
kustomize-controller-5458d94d5c-x4cjs      1/1     Running   0          7h45m
notification-controller-5b5dd6d7d9-z96xc   1/1     Running   0          7h45m
source-controller-cbcbbc677-r2ptp          1/1     Running   0          7h45m

而且可以查看 source-controller 组件的 log:

$ kubectl -n flux-system logs -f source-controller-cbcbbc677-r2ptp
{"level":"info","ts":"2021-09-26T13:37:59.418Z","logger":"controller.gitrepository","msg":"Reconciliation finished in 730.754068ms, next run in 30s","reconciler group":"source.toolkit.fluxcd.io","reconciler kind":"GitRepository","name":"flux-system","namespace":"flux-system"}

可以看到通过 Reconciliation 进行 sync 的同步间隔为 bootstrap 时指定的 30s。此时,说明 GitOps workflow 机制已经运行起来了:flux 已经在监听 flux-gitops 仓库的状态了,一旦有变更就会自动进行同步。

接下来做一个 GitOps workflow 的 Demo。

GitOps Demo

此时 flux 的组件已经在监听极狐GitLab 仓库 flux-gitops 了,一旦这个仓库下面有任何变更,就会把变更自动同步至 Kubernetes 集群侧。为了触发 GitOps workflow 并进行验证,在 flux-gitops 仓库中添加一个 manifest 文件,此时仓库的目录结构变为:

.
├── flux-system
│   ├── gotk-components.yaml
│   ├── gotk-sync.yaml
│   └── kustomization.yaml
└── jihu-gitlab
    └── manifest.yaml

2 directories, 4 files

manifest.yaml 文件中包含创建 namespace、deployment、service、secret等资源所需的内容。

然后提交代码至极狐GitLab 仓库。然后可以看到多了一个名为 flux-gitops 的 namespace:

$ kubectl get ns
flux-gitops        Active   1s

查看此 namespace 下面的 pod:

$ kubectl -n flux-gitops get pods
NAME                      READY   STATUS    RESTARTS   AGE
deploy-796886df9b-62jmd   1/1     Running   0          13s

再进一步,将 manifest.yaml 中 deployment 的 replicas 设置为 2,观察 flux-gitops namespace 下面的pod 变化:

$ kubectl -n flux-gitops get pods -w
NAME                      READY   STATUS    RESTARTS   AGE
deploy-796886df9b-62jmd   1/1     Running   0          11h
deploy-796886df9b-s9v87   0/1     Pending   0          0s
deploy-796886df9b-s9v87   0/1     Pending   0          0s
deploy-796886df9b-s9v87   0/1     Pending   0          0s
deploy-796886df9b-s9v87   0/1     Pending   0          0s
deploy-796886df9b-s9v87   0/1     ContainerCreating   0          0s
deploy-796886df9b-s9v87   0/1     ContainerCreating   0          1s
deploy-796886df9b-s9v87   1/1     Running             0          3s

$ kubectl -n flux-gitops get pods
NAME                      READY   STATUS    RESTARTS   AGE
deploy-796886df9b-62jmd   1/1     Running   0          11h
deploy-796886df9b-s9v87   1/1     Running   0          7s

可以看到 pod 的副本数变成了两个。整个过程可以查看 kustomize-controller 的 log,能够看到如下关于 sync 的内容:

$ kubectl -n flux-system logs -f kustomize-controller-5458d94d5c-x4cjs
{"level":"info","ts":"2021-09-27T01:11:08.155Z","logger":"controller.kustomization","msg":"Kustomization applied in 1.829340287s","reconciler group":"kustomize.toolkit.fluxcd.io","reconciler kind":"Kustomization","name":"flux-system","namespace":"flux-system","output":{"clusterrole.rbac.authorization.k8s.io/crd-controller-flux-system":"configured","clusterrolebinding.rbac.authorization.k8s.io/cluster-reconciler-flux-system":"configured","clusterrolebinding.rbac.authorization.k8s.io/crd-controller-flux-system":"configured","customresourcedefinition.apiextensions.k8s.io/alerts.notification.toolkit.fluxcd.io":"configured","customresourcedefinition.apiextensions.k8s.io/buckets.source.toolkit.fluxcd.io":"configured","customresourcedefinition.apiextensions.k8s.io/gitrepositories.source.toolkit.fluxcd.io":"configured","customresourcedefinition.apiextensions.k8s.io/helmcharts.source.toolkit.fluxcd.io":"configured","customresourcedefinition.apiextensions.k8s.io/helmreleases.helm.toolkit.fluxcd.io":"configured","customresourcedefinition.apiextensions.k8s.io/helmrepositories.source.toolkit.fluxcd.io":"configured","customresourcedefinition.apiextensions.k8s.io/kustomizations.kustomize.toolkit.fluxcd.io":"configured","customresourcedefinition.apiextensions.k8s.io/providers.notification.toolkit.fluxcd.io":"configured","customresourcedefinition.apiextensions.k8s.io/receivers.notification.toolkit.fluxcd.io":"configured","deployment.apps/deploy":"configured","deployment.apps/helm-controller":"configured","deployment.apps/kustomize-controller":"configured","deployment.apps/notification-controller":"configured","deployment.apps/source-controller":"configured","gitrepository.source.toolkit.fluxcd.io/flux-system":"configured","kustomization.kustomize.toolkit.fluxcd.io/flux-system":"configured","namespace/flux-gitops":"configured","namespace/flux-system":"configured","networkpolicy.networking.k8s.io/allow-egress":"configured","networkpolicy.networking.k8s.io/allow-scraping":"configured","networkpolicy.networking.k8s.io/allow-webhooks":"configured","secret/jihu-gitlab-cr":"configured","secret/secret-env":"configured","service/notification-controller":"configured","service/source-controller":"configured","service/svc":"configured","service/webhook-receiver":"configured","serviceaccount/helm-controller":"configured","serviceaccount/kustomize-controller":"configured","serviceaccount/notification-controller":"configured","serviceaccount/source-controller":"configured"}}
{"level":"info","ts":"2021-09-27T01:11:08.436Z","logger":"controller.kustomization","msg":"Reconciliation finished in 3.900295254s, next run in 10m0s","reconciler group":"kustomize.toolkit.fluxcd.io","reconciler kind":"Kustomization","name":"flux-system","namespace":"flux-system","revision":"main/9f09f2a078c7f13287df1ed694df7deb45cfb5ed"}

可以看到变更被捕获且进行了同步。也即意味着实现了 GitOps workflow。

写在最后


GitOps 被认为是云原生应用程序和基础设施部署与管理的新模式。极狐GitLab 在 13.x 版本中陆续引入了 Kubernetes Agent 来支持 GitOps workflow。而且每个版本都在不断的迭代和完善。不同于使用 ArgoCD 和 Flux 的是:极狐GitLab 的 GitOps 能力是原生的,不需要额外去安装和管理类似 ArgoCD 和 Flux 这样的第三方软件,减少了维护成本。

关于极狐GitLab 对于 GitOps workflow 的支持,可以查看公众号文章让 KAS 给 GitOps 插上腾飞的翅膀。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/235142.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【总结】机器学习中的15种分类算法

目录 一、机器学习中的分类算法 1.1 基础分类算法 1.2 集成分类算法 1.3 其它分类算法: 二、各种机器学习分类算法的优缺点 分类算法也称为模式识别,是一种机器学习算法,其主要目的是从数据中发现规律并将数据分成不同的类别。分类算法通…

golang学习笔记——go流水线示例

range与数组、切片、集合 Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对。 for 循环的 range 格式可以对 slice、map、数组、字…

计算机网络课程设计【Python实现】

一、网络聊天程序的设计与实现 1、实验目的 使用Socket编程,了解Socket通信的原理,会使用Socket进行简单的网络编程,并在此基础上编写聊天程序,运行服务器端和客户端,实现多个客户端通过服务器端进行通信。 2、总体设…

MongoDB 的复制(副本集)

本文主要介绍MongoDB的复制(副本集)。 目录 MongoDB的复制(副本集)特点搭建步骤注意事项 MongoDB的复制(副本集) MongoDB复制是一种提供数据冗余和高可用性的方法。复制是通过在多个节点上维护数据的副本来…

机器学习与人工智能:一场革命性的变革

机器学习与人工智能:一场革命性的变革 人工智能的概述什么是机器学习定义解释 数据集结构机器学习应用场景 人工智能的概述 1956年8月,在美国汉诺斯小镇宁静的达特茅斯学院中,约翰麦卡锡(John McCarthy)、马文闵斯基&…

科学小论文

赵州桥,是一座右拱桥,它座落于河北省石家庄市赵县城南液河之上。 赵州桥因赵县古称赵州而得名,当地人称之为大石桥,以区别于城西门外的永通桥,也称小石桥。 赵州桥始建于隋代,由匠师李春设计建造&#xff…

第一百九十九回 如何获取设备信息

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 我们在上一章回中介绍了包管理相关的内容,本章回中将介绍如何使用url_launcher包.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在这里介绍url_launcher包主要用来打开…

万户 ezOFFICE 文件上传漏洞复现

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日…

HarmonyOS鸿蒙应用开发——HTTP网络访问与封装

文章目录 基本使用封装参考 基本使用 鸿蒙应用发起HTTP请求的基本使用,如下: 导入http模块创建httpRequest对象发起http请求,并处理响应结果 第一、导入http模块: import http from ohos.net.http第二、创建httpRequest对象&a…

SLAM教程:ROS学习

玩SLAM一定会遇到ROS,你可以看看稚晖君里的机器人操作系统,许多控制机器的软件代码很大程度都是基于ROS,多传感融合也是基于ROS,在GitHub上几乎大部分的多传感融合以及机器人操作代码框架都是基于ROS。ROS 的主要目标是为机器人研究和开发提供代码复用的支持。ROS是一个分布…

三翼鸟2023:需求中破局,进化中蝶变

当打造高质量生活的全民愿景以试卷的形式,打开在眼前,该如何作答?相信这是每个与“家”这个词息息相关的企业,最难给出肯定回答的难题。 科技、硬件擅长的企业,往往会选择以高科技为笔,画一幅智能家居生活…

【Matlab算法】多维函数求解的基本概念

多维函数求解的基本概念 多维函数最优化问题最优化算法最优化问题的类型最优化算法的分类常用的多维函数求解方法结语 多维函数 多维函数是指定义在 R n \mathbb{R}^n Rn 上的函数,其中 n n n 是函数的维数。例如, f ( x , y ) x 2 y 2 f(x, y) x^…

2017下半年软工(桥接模式)

题目——桥接模式(抽象调用实现部分) package org.example.桥接模式;/*** 桥接模式的核心思想是将抽象部分与它的实现部分分离,使它们可以独立变化,就是说你在实现部分:WinImp、LinuxImp基础上还能加上RedHatImp&#…

Javaweb之附录的详细解析

05. 附录 5.1 更新依赖索引 有时候给idea配置完maven仓库信息后,在idea中依然搜索不到仓库中的jar包。这是因为仓库中的jar包索引尚未更新到idea中。这个时候我们就需要更新idea中maven的索引了,具体做法如下: 打开设置----搜索maven----R…

编译内核之BTF报错

最近在编译5.15.138版本内核的时候,由于启用了BTF功能,导致在编译过程中报错,网上好多教程都存在坑,本人研究测试下来能用,特此记录一下,供有需要的人参考。   内核编译环境:centos7   内核配…

STM32CubeMX+micro_ros_stm32cubemx_utils库

GitHub - micro-ROS/micro_ros_stm32cubemx_utils at humble 这个就是下载这个代码库以后的文件结构。其中sample_project.ioc就是平时STM32CubeMX的工程文件。类似于visual studio里面的项目文件 。打开以后是这个样子的: 可以看到跟本文后面的那些配置是几乎一模一…

【HarmonyOS开发】拖拽动画的实现

动画的原理是在一个时间段内,多次改变UI外观,由于人眼会产生视觉暂留,所以最终看到的就是一个“连续”的动画。UI的一次改变称为一个动画帧,对应一次屏幕刷新,而决定动画流畅度的一个重要指标就是帧率FPS(F…

Vue左侧菜单栏显示问题

关于 使用若依系统,路由中左侧菜单栏一级菜单中只有一个二级菜单,一级菜单不显示的问题!!! 在一级组件中添加 alwaysShow: true,

c4--函数和指针

函数和指针 指针 函数 函数指针 1、以下选项中,合法的一组C语言数值常量是(A )。 A、12. 0Xa23 4.5e0 // B、028 5e-3 -0xf //NO C、.177 4e1.5 0abc D、0x8A 10,000 3.e5 // 不能有逗号 解答: B、028 这个有问题 C: 这个…

普冉PY32系列(十三) SPI驱动WS2812全彩LED

目录 普冉PY32系列(一) PY32F0系列32位Cortex M0 MCU简介普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境普冉PY32系列(三) PY32F002A资源实测 - 这个型号不简单普冉PY32系列(四) PY32F002A/003/030的时钟设置普冉PY32系列(五) 使用JLink RTT代替串口输出日志普冉PY32…