基于ArgoCD和Testkube打造GitOps驱动的Kubernetes测试环境

本文介绍了一项新工具,可以基于Gitops手动或者自动实现Kubernetes集群应用测试,确保集群的健康状态与Git仓库定义的一致。原文: GitOps-Powered Kubernetes Testing Machine: ArgoCD + Testkube

简介:GitOps 云原生测试面临的挑战

现代云原生应用开发的主要趋势之一是采用 GitOps,即用 Git 管理 Kubernetes 集群状态,GitHub 和 GitLab 等现代化 Git 平台在工作流、审计、安全、工具等方面提供了各种功能。ArgoCD 或 Flux 等工具可用于保持 Kubernetes 集群与 Git 仓库同步的繁重工作,一旦发现 Git 与集群存在差异,就会立即部署,以确保仓库是运行时环境的真实来源。

你是否同意现在也是时候将测试和相关活动纳入这一范例了吗?没错!Kubeshop正在努力为你提供首个GitOps友好的云原生测试协调/执行框架--Testkube,以确保质量保证工作与这一全新的应用程序配置和集群配置管理方法保持一致。结合上述 GitOps 方法,Testkube 将在集群状态中包含测试工件和应用程序配置,并使 git 成为这些测试工件的真实来源。

GitOps 方法的优势:

  • 由于测试包含在集群状态中,因此可以随时验证应用程序组件/服务是否按要求运行。
  • 由于测试是在集群内部执行的,因此没有必要纯粹为了测试而从外部暴露被测服务。
  • 集群中的测试始终与用于编写测试的外部工具同步。
  • 测试执行并非严格与 CI 绑定,也可手动触发以进行临时验证,或通过内部触发器(Kubernetes 事件)触发
  • 可以利用 Postman 或 Cypress(甚至用于端到端测试)或其他执行器插件的现有自动化测试用例。

从概念上讲,这可以说明如下:

alt

GitOps 教程

话不多说,让我们来看看实际操作。下面是一个逐步演练的过程,以便在本地 Minikube 集群中自动部署应用程序和以及 Postman 集合,并进行测试。

我们从设置 GitOps 驱动的测试环境开始!

GitOps 测试的前提条件

首先遵循文档[1]安装 minikube。

然后按照 ArgoCD 安装指南[2]安装 ArgoCD。

注:对于其中第 3 步"访问 Argo CD API 服务器",请选择"端口转发"方法,因为这是用 Minikube 集群连接 Argo CD API 服务器的最简单方法。

按照文档[3]安装Testkube,确保在集群中安装 CLI 客户端和组件。

设置"Hello Kubernetes"应用程序和测试
  1. 在集群中安装"Hello Kubernetes!"应用

我们将为一个简单的"Hello Kubernetes"应用程序创建 YAML 文件,然后根据该文件创建集成测试。

apiVersion: v1
kind: Service
metadata:
 name: hello-kubernetes-service
spec:
 ports:
 - name: http
 port: 80
 targetPort: 8080
 selector:
 app: hello-kubernetes
 - -

然后用以下方法部署 Hello Kubernetes

kubectl apply -f hello-kubernetes.yaml

运行以下程序来测试应用程序是否已正确安装:

minikube service hello-kubernetes-service‍
  1. 建立包含 Postman 程序集的 Git 仓库

我们将使用 Postman 创建并导出到 Postman 集合文件[4]中的测试。

可以将其上传到与应用程序相同的 Git 仓库,但实际上,该仓库可以是托管应用程序的同一仓库,也可以是管理所有测试工件的单独仓库。

创建 hello-kubernetes.json,并将其推送到仓库中:

{
  "info": {
    "_postman_id""02c90123-318f-4680-8bc2-640adabb45e8",
    "name""New Collection",
    "schema""https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "item": [
    {
      "name""hello-world test",
      "event": [
        {
          "listen""test",
          "script": {
            "exec": [
              "pm.test(\"Body matches string\", () => {",
              "    pm.expect(pm.response.text()).to.contain(\"Hello Kubernetes\")",
              "})",
              "",
              "pm.test(\"Body matches string\", () => {",
              "    pm.expect(pm.response.status).to.equal(\"OK\")",
              "})"
            ],
            "type""text/javascript"
          }
        }
      ],
      "request": {
        "method""GET",
        "header": [],
        "url": {
          "raw""http://hello-kubernetes-service.default",
          "protocol""http",
          "host": [
            "hello-kubernetes-service",
            "default"
          ]
        }
      },
      "response": []
    }
  ]
}

可以在 Github[5] 上看到该仓库的完整示例。

配置 ArgoCD 与 Testkube 协同工作
  1. 配置 ArgoCD 以使用 Testkube 插件

要让 ArgoCD 使用 Testkube,需要将 Testkube 添加为插件[6]。为此,请将插件配置文件嵌套到 plugin.yaml 下的 ConfigMap 清单中。

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm-plugin
  namespace: argocd
data:
  plugin.yaml: |
    apiVersion: argoproj.io/v1alpha1
    kind: ConfigManagementPlugin
    metadata:
      name: testkube
    spec:
      version: v1.0
      generate:
        command: [bash, -c]
        args:
          - |
            testkube generate tests-crds .

然后执行以下命令应用:

kubectl apply -f argocd-plugins.yaml

我们通过 testkube 命令生成 tests-crds 创建自定义资源(清单),然后 ArgoCD 会将其添加到集群中。

‍要安装插件,请为 argocd-repo-server 部署打上补丁,使其作为边车运行插件容器。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: argocd-repo-server
spec:
  template:
    spec:
      containers:
      - name: testkube
        command: [/var/run/argocd/argocd-cmp-server]
        image: kubeshop/testkube-argocd:latest
        securityContext:
          runAsNonRoot: true
          runAsUser: 999
        volumeMounts:
          - mountPath: /var/run/argocd
            name: var-files
          - mountPath: /home/argocd/cmp-server/plugins
            name: plugins
          - mountPath: /home/argocd/cmp-server/config/plugin.yaml
            subPath: plugin.yaml
            name: argocd-cm-plugin
          - mountPath: /tmp
            name: cmp-tmp
      volumes:
        - configMap:
            name: argocd-cm-plugin
          name: argocd-cm-plugin
        - emptyDir: {}
          name: cmp-tmp

使用以下命令打上补丁:

kubectl patch deployments.apps -n argocd-repo-server — patch-file deployment.yaml

创建包含 ArgoCD 应用程序的文件:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
 name: testkube-tests
 namespace: argocd
spec:
 project: default
 source:
   repoURL: https://github.com/USERNAME/testkube-argocd.git
   targetRevision: HEAD
   path: postman-collections
   plugin:
     name: "testkube-v1.0"
 destination:
   server: https://kubernetes.default.svc
   namespace: testkube

请注意,我们定义了path: postman-collections,这是包含前面步骤中 Postman 集合的测试文件夹。在 Testkube 中,可以使用多个测试执行器(例如 curl),因此为每个执行器定义一个文件夹非常方便。我们还将 .destination.namespace 定义为 testkube,也就是在集群中部署测试的地方。

现在,用以下指令创建应用:

kubectl apply -f testkube-application.yaml

在 ArgoCD 的仪表板上,我们将看到新创建的应用。点击进入,同步测试。

alt

点击"同步(Sync)",即可看到已创建的测试。

alt

瞧,ArgoCD 创建并管理着测试集,在包含测试的 Github 资源库中创建并更新每一个新测试!

alt
运行 ArgoCD 测试!
  1. 通过 CLI 运行临时测试

现在一切准备就绪,我们用 Testkube 的 CLI 来执行一些临时测试。

用以下命令列出集群中的测试:

testkube get tests

应该能看到已部署的测试工件:

alt

要运行这些测试,请执行以下命令:

testkube run test hello-kubernetes

测试将在后台开始执行,可以执行下图中的命令来检查测试的执行结果:

alt
testkube get execution EXECUTION_ID‍

应该会看到测试已成功运行,就像下图一样。

alt

此外,还可以在漂亮的仪表板中查看测试结果。只需使用以下命令‍打开 Testkube 面板

testkube dashboard‍
alt

如下图所示,可以在"执行(Executions)"选项卡中看到执行结果。

GitOps 收获

一旦完全实现基于 GitOps 测试 Kubernetes 应用,就能提供一个强大的替代方案。而在传统方法中,调度器与当前的 CI/CD 工具绑定,与 Kubernetes 应用生命周期并不密切相关。


你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。为了方便大家以后能第一时间看到文章,请朋友们关注公众号"DeepNoMind",并设个星标吧,如果能一键三连(转发、点赞、在看),则能给我带来更多的支持和动力,激励我持续写下去,和大家共同成长进步!

参考资料
[1]

Minikube Document: https://minikube.sigs.k8s.io/docs/start

[2]

ArgoCD Document: https://argo-cd.readthedocs.io/en/stable/getting_started

[3]

Testkube Installing: https://kubeshop.github.io/testkube/installing

[4]

Postman Collections: https://www.postman.com/collection

[5]

Testkube ArgoCD tests: https://github.com/aabedraba/testkube-argocd-tests

[6]

ArgoCD Config Management Plugins: https://argo-cd.readthedocs.io/en/stable/user-guide/config-management-plugins

本文由 mdnice 多平台发布

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[蓝桥杯 2014 省 A] 波动数列

容我菜菲说一句,全网前排题解都是rubbish,当然洛谷某些也是litter 不好意思,最近背单词背了很多垃圾的英文,正题开始 [蓝桥杯 2014 省 A] 波动数列 题目描述 输入格式 输入的第一行包含四个整数 n , s , a , b n,s,a,b n,s,a…

iPhone设备中定位应用程序崩溃问题的日志分析技巧

​ 目录 如何在iPhone设备中查看崩溃日志 摘要 引言 导致iPhone设备崩溃的主要原因是什么? 使用克魔助手查看iPhone设备中的崩溃日志 奔溃日志分析 总结 摘要 本文介绍了如何在iPhone设备中查看崩溃日志,以便调查崩溃的原因。我们将展示三种不同的…

蓝桥杯刷题day13——玩游戏【算法赛】

一、问题描述 小 A 和小 B 两个人在海边找到了 n 个石子,准备开始进行一些游戏,具体规则如下:小 B 首先将 n 个石子分成若干堆,接下来从小 A 开始小 A 和小 B 轮流取石子,每次可以任选一堆石子取走任意个,…

Linux中JMeter的使用

Linux中JMeter的使用 Linux版本JMeter安装 # 1、下载、安装JMeter 如果有安装包直接上传即可 wget -c https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.4.1.tgz # 解压 tar -zxvf apache-jmeter-5.4.1.tgz -C /usr/local/sjdwz_test cd /usr/local/sjdwz_t…

数据分析之Tebleau可视化:折线图、饼图、环形图

1.折线图的绘制 方法一: 拖入订单日期和销售金额,自动生成一个折线图 方法二: 选中订单日期和销售金额(摁住ctrl可以选择多个纬度) 点击右边的智能推荐,选择折线图 2.双线图的绘制、双轴的设置 方法一&…

【Jmeter+Influxdb+Grafana性能监控平台安装与部署】

JmeterInfluxdbGrafana性能监控平台安装与部署 前言Influxdb安装与连接Jmeternfluxdb下载(winodws)Grafana安装与配置 前言 我们在性能测试过程中,在需要较大并发时,为了尽量避免使用GUI界面来节省资源,通常使用命令行…

python+vue访客预约登记系统-数据可视化echart大屏

为了系统的完整,必须要有可行性分析的,系统的可行性关系到生存问题,分析其意义可否利用本系统来弥补线下管理模式中的不足之处等,通过本系统来减少工作量,使管理者与用户的工作和管理效率更高。对此体现出更多的意义和…

基于深度学习的端到端自动驾驶的最新进展:调研综述

基于深度学习的端到端自动驾驶的最新进展:调研综述 附赠自动驾驶学习资料和量产经验:链接 论文链接:https://arxiv.org/pdf/2307.04370.pdf 调研链接:https://github.com/Pranav-chib/ 摘要 本文介绍了基于深度学习的端到端自…

一次生产docker MTU=1500问题排查解决

和业务方进行联调,业务方调用我方服务, 我方服务部署在虚拟机的docker容器中 提供grpc服务, 通过公网vip lvs到宿主机端口 联调发现 ping 和 telnet我方端口都正常, 但是通过grpc协议调用不通,一直超时 在容器上和lv…

构建安全高效的用户登录系统:登录流程设计与Token验证详解

在当今数字化时代,用户登录系统是几乎所有在线服务的基础。然而,随着网络安全威胁的不断增加,设计一个安全可靠的登录系统变得至关重要。本文将深入探讨用户登录流程的设计原则以及Token验证的实现方式,带您了解如何构建安全高效的…

基于DCT和扩频的音频水印嵌入提取算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ......................................................................... N 10; %嵌入一…

RTOS中临界区嵌套保护的实现原理(基于RT-Thread)

0 前言 什么是临界区(临界段)? 裸机编程中由于不涉及线程和线程切换,因此没有临界区这一个概念。在RTOS中由于存在线程切换等场景,便有了临界区这个概念。简单来说,临界区就是不允许被中断的代码区域。什么…

在 Three.js 中,`USDZExporter` 类用于将场景导出为 USDZ 格式,这是一种用于在 iOS 平台上显示增强现实(AR)内容的格式。

demo 案例 在 Three.js 中,USDZExporter 类用于将场景导出为 USDZ 格式,这是一种用于在 iOS 平台上显示增强现实(AR)内容的格式。下面是关于 USDZExporter 的入参、出参、方法和属性的讲解: 入参 (Parameters): sc…

HTTP和HTTPS谁传输数据更安全?

1.HTTP HTTP在传输数据时,通常都是明文传输,也就是传输的数据没有进行加密。在这种情况下,如果传输的是一些敏感数据,比如某银行卡密码,就很容易被别人截获到,这就对我们的个人利益产生了威胁。 HTTP传输数…

Mysql数据库故障排查与优化

目录 前言 一、Mysql数据库的单实例故障 1.故障一——拒绝连接数据库 1.1故障内容 1.2问题分析 1.3解决方法 2.故障二——密码错误 2.1故障内容 2.2问题分析 2.3解决方法 3.故障三——数据库处理较慢 3.1故障内容 3.2问题分析 3.3解决方法 4.故障四——数据库表…

k8s 基础入门

1.namespace k8s中的namespace和docker中namespace是两码事,可以理解为k8s中的namespace是为了多租户,dockers中的namespace是为了网络、资源等隔离 2.deployment kubectl create #新建 kubectl aply #新建 更新 升级: 滚动升级&#x…

真实sql注入以及小xss--BurpSuite联动sqlmap篇

前几天漏洞检测的时候无意发现一个sql注入 首先我先去网站的robots.txt去看了看无意间发现很多资产 而我意外发现admin就是后台 之后我通过基础的万能账号密码测试or ‘1‘’1也根本没有效果 而当我注入列的时候情况出现了 出现了报错,有报错必有注入点 因此我…

企业能耗数据分析有哪些优势?怎样进行分析?

随着互联网技术的发展,企业在运营中会出现大量的用能数据,但却做不了精准的用能数据分析,导致数据没有得到有效利用,以及产生能源浪费现象。 为什么企业用能分析总是难? 一、用能分析过程复杂 由于用能分析过于复杂…

采用C#.net6.0+Vue,Ant-Design技术开发的一套大型医院手术麻醉信息系统源码,系统成熟,运行稳定

手术麻醉信息系统源码,C#手麻系统源码,自主版权应用案例(适合上项目) 手术麻醉信息系统可以实现手术室监护仪、麻醉机、呼吸机、输液泵等设备输出数据的自动采集,采集的数据能据如实准确地反映患者生命体征参数的变化&…

穿山甲广告平台SDK接入效果怎么样?

广告收入是大多数开发者的应用变现收入来源,如何进行流流量变现是从应用设计之初就需要开发者思考的问题。 穿山甲广告平台作为国内第三方广告变现平台,是不少开发者选择的对接平台。 穿山甲广告平台的广告类型较多,有信息流,ba…