Certified Kubernetes是CNCF基金会在2018年推出的Kubernetes一致性认证计划。它由CNCF基金会提供的一套诊断测试工具(Sonobuoy)并运行在Kubernetes中。各云厂商如果需要将自己产品纳入到Certified Kubernetes当中,就需要按照操作指导进行自身测试,并将测试结果上传给CNCF社区,当报告审核通过,交付一定的费用(CNCF Members免费)后,就会得到CNCF基金会给企业颁发一个Certified Kubernetes的认证。也就是说得到认证后企业就能在自己的产品宣传上使用CNCF基金会的Certified Kubernetes商标和在产品中使用带Kubernetes字样的名称。Certified Kubernetes Logo大概长这个样子。

Certified Kubernetes好处

  • 一致性

    只要获得了一致性认证,用户在对任何Kubernetes厂商发行版进行安装或交互时,得到的和原生Kuberentes功能几乎一致的体验

  • 及时更新

    为了保持认证,CNCF基金会要求厂商需要每年或更频繁地提供对最版本的Kubernetes支持。通常情况下来说,厂商提交的产品适配的版本,为官方最新的次要发型版本(x.y)以及最近的两个发行版(x.y-1 和 x.y-2)

    例子。在Kubernetes v1.23发布后,新的合格产品最初可以针对Kubernetes v1.23、v1.22或v1.21进行自我认证,但不能针对v1.20再进行测试。

    了解Kubernetes的同学都知道,K8S几乎每年会以3-4个大版本进行迭代,这样就等于让各大厂商必须跟这个K8S的迭代进行适配。也侧面上加强了社区对于各大厂商的控制

  • 可确认性

    任何终端用户都可以通过运行用于认证的相同的开源一致性应用程序(Sonobuoy)来确认他们的发行版或平台仍然符合要求,以免用户被厂商锁定。

Sonobuoy

Sonobuoy 是一个诊断工具,通过它我们可以访问且以非破坏性的方式运行一组插件(其中包括Kubernetes一致性认证的测试)使我们更轻松地了解 Kubernetes 集群的状态。同时Sonobuoy 也是一种可定制、可扩展和黑盒的方式生成有关Kubernetes集群的相关报告工具。

我们可以用Sonobuoy来对Kubernetes内的资源做如下用例测试:

  • 集成的端到端 (e2e) 一致性测试
  • 工作负载调试
  • 扩展插件来采集自定义数据

环境准备

在使用Sonobuoy之前我们需要准备好如下环境:

  • 一个可以正常访问的Kubernetes集群
  • 拥有被测试Kubernetes集群的ADMIN权限,以及它的kubeconfig文件
  • kubectl命令(某些告警场景会用,Certified Kubernetes不需要)
  • sonobuoy的docker镜像
  • 本地的私有化镜像仓库(强烈建议要有!!!)

安装

在下述链接中下载最新版本的Sonobuoy二进制文件,将它解压后,并把可执行文件sonobuoy路径添加到系统的PATH环境变量下即可。

https://github.com/vmware-tanzu/sonobuoy/releases

运行测试

标准的一致性测试集目前是由 kubernetes e2e套件中的 [Conformance] 标签定义的。所以我们需要使用如下命令进行部署。

$ sonobuoy run --mode=certified-conformance
INFO[0000] created object                                name=sonobuoy namespace= resource=namespaces
INFO[0000] created object                                name=sonobuoy-serviceaccount namespace=sonobuoy resource=serviceaccounts
INFO[0001] created object                                name=sonobuoy-serviceaccount-sonobuoy namespace= resource=clusterrolebindings
INFO[0001] created object                                name=sonobuoy-serviceaccount-sonobuoy namespace= resource=clusterroles
INFO[0001] created object                                name=sonobuoy-config-cm namespace=sonobuoy resource=configmaps
INFO[0001] created object                                name=sonobuoy-plugins-cm namespace=sonobuoy resource=configmaps
INFO[0001] created object                                name=sonobuoy namespace=sonobuoy resource=pods
INFO[0001] created object                                name=plugin-e2e-cm namespace=sonobuoy resource=configmaps
INFO[0001] created object                                name=sonobuoy-aggregator namespace=sonobuoy resource=services

当sonobuoy容器正常运后,它就会开始创建e2e容器和systemd-log容器开始进行相关的测试和日志收集。

$ kubectl get pod -n sonobuoy
NAME                                                      READY   STATUS    RESTARTS   AGE   IP               NODE              NOMINATED NODE   READINESS GATES
sonobuoy                                                  1/1     Running   0          31s   192.169.15.126   k8s-master3-123   <none>           <none>
sonobuoy-e2e-job-23d08735503942f5                         2/2     Running   0          27s   192.169.15.86    k8s-master3-123   <none>           <none>
sonobuoy-systemd-logs-daemon-set-c7fe30c923a848d5-c7wvz   2/2     Running   0          27s   172.16.23.123    k8s-master3-123   <none>           <none>
sonobuoy-systemd-logs-daemon-set-c7fe30c923a848d5-d28gr   2/2     Running   0          27s   172.16.23.122    k8s-master2-122   <none>           <none>
sonobuoy-systemd-logs-daemon-set-c7fe30c923a848d5-q25t8   2/2     Running   0          27s   172.16.23.124    k8s-node1-124     <none>           <none>
sonobuoy-systemd-logs-daemon-set-c7fe30c923a848d5-wkd4f   2/2     Running   0          27s   172.16.23.125    k8s-node2-125     <none>           <none>
sonobuoy-systemd-logs-daemon-set-c7fe30c923a848d5-z829h   2/2     Running   0          27s   172.16.23.121    k8s-master1-121   <none>           <none>

在测试的进行过程中,我们可以使用sonobuoy status命令进行查看当前任务的执行状态,可以用sonobuoy logs来查看用例的执行日志。

提示:certified-conformance测试通常会跑1 - 2个小时

当我们用sonobuoy status发现状态都为completed时,就代表一致性测试运行完成。

定制镜像(可选)

如果你的Kubernetes网络足够科学可以跳过此步骤。

众所周知,Docker Hub在今年开启了对Pull镜像的请求限制,而我们运行sonobuoy是,有大量用例都会从Docker Hub或者gcr.io上去拉取镜像,如果网络不稳定的话,整个测试时间会被拉的非常长,且极容易出现用例执行超时失败的现象。所以我们需要将线上镜像离线到本地镜像仓库,以加速镜像的下载。

好在sonobuoy提供了修改插件镜像地址的方式来让我们配置。

私有测试用例镜像仓库

  • 下载测试用例所需的镜像列表
$ sonobuoy  images  pull
INFO[0000] e2e image to be used: k8s.gcr.io/conformance:v1.18.16
INFO[0005] Pulling image: gcr.io/authenticated-image-pulling/alpine:3.7 ...
ERRO[0010] failed with following error after 1 retries:
ERRO[0010] Error response from daemon: unauthorized: You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication
INFO[0014] Pulling image: invalid.com/invalid/alpine:3.1 ...
ERRO[0016] failed with following error after 1 retries:
ERRO[0016] Error response from daemon: Get https://invalid.com/v2/: remote error: tls: handshake failure
INFO[0017] Pulling image: gcr.io/authenticated-image-pulling/windows-nanoserver:v1 ...
ERRO[0020] failed with following error after 1 retries:
ERRO[0020] Error response from daemon: unauthorized: You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication
INFO[0023] Pulling image: gcr.io/k8s-authenticated-test/agnhost:2.6 ...
ERRO[0027] failed with following error after 1 retries:
ERRO[0027] Error response from daemon: unauthorized: You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication
ERRO[0027] couldn't pull image: gcr.io/authenticated-image-pulling/alpine:3.7: exec: already started
ERRO[0027] couldn't pull image: invalid.com/invalid/alpine:3.1: exec: already started
ERRO[0027] couldn't pull image: gcr.io/authenticated-image-pulling/windows-nanoserver:v1: exec: already started
ERRO[0027] couldn't pull image: gcr.io/k8s-authenticated-test/agnhost:2.6: exec: already started

在运行上述命令时,可能会看到一些类似镜像不存在或者无权限pull镜像的错误。这是正常的,因为有些镜像被一些端到端测试所引用,但不被一致性测试所引用。

  • 创建镜像仓库列表
$ sonobuoy gen default-image-config > custom-repo-config.yaml
$ cat ./custom-repo-config.yamldockerLibraryRegistry: docker.io/library
e2eRegistry: gcr.io/kubernetes-e2e-test-images
gcRegistry: k8s.gcr.io
googleContainerRegistry: gcr.io/google-containers
sampleRegistry: gcr.io/google-samples
  • 修改custom-repo-config.yaml为你的本地仓库
$ cat ./custom-repo-config.yamldockerLibraryRegistry: xxx.yyy.zzz/library
e2eRegistry: xxx.yyy.zzz/library
gcRegistry: xxx.yyy.zzz/library
googleContainerRegistry: xxx.yyy.zzz/library
sampleRegistry: xxx.yyy.zzz/library
  • 推送镜像到本地仓库
sonobuoy images push --e2e-repo-config <path/to/custom-repo-config.yaml>

私有Sonobuoy镜像

Sonobuoy提供几个参数让我们来制定私有镜像启动

--systemd-logs-image     #指定日志采集镜像
--sonobuoy-image          # 指定Sonobuoy镜像
--e2e-repo-config           # 指定Sonobuoy用例镜像配置

那么最后我们可以用如下命令就能在自己私有化环境里面进行测试了

$ sonobuoy run \
--mode=certified-conformance \
--sonobuoy-image=xxx.yyy.zzz/library/sonobuoy:v0.53.2 \
--kubernetes-version=v1.18.16 \
--systemd-logs-image=xxx.yyy.zzz/library/systemd-logs:v0.3 \
--e2e-repo-config conformance-image-config.yaml

提取结果

运行命令sonobuoy retrieve就会把当前跑完的测试结果以tar包的方式保存在当前目录,对它进行解压就得到了类似如下目录结构的文件

$ tree -L 2
.
├── 202108180508_sonobuoy_ff7aa0c1-34cb-4375-a09e-153235a96d34.tar.gz
├── hosts
│   ├── k8s-master1-121
│   ├── k8s-master2-122
│   ├── k8s-master3-123
│   ├── k8s-node1-124
│   └── k8s-node2-125
├── meta
│   ├── config.json
│   ├── info.json
│   ├── query-time.json
│   └── run.log
├── plugins
│   ├── e2e
│   └── systemd-logs
├── podlogs
│   └── sonobuoy
├── resources
│   ├── cluster
│   └── ns
├── servergroups.json
└── serverversion.json

需要提交给CNCF社区的两个文件就位于plugins/e2e/results/global/{e2e.log,junit_01.xml}

上传结果

在Github上Fork社区的**[cncf/k8s-conformance]**到自己的仓库,并在指定的Kubernetes目录下创建一个目录。目录要求是一个简短的产品名称。同时将e2e.logjunit_01.xml两个文件伙同产品描述文件(PRODUCT.yaml)一起保存在目录下。

PRODUCT.yaml的内容描述

字段 Description
vendor 认证的法律实体的名称。该实体必须有一份在CNCF备案的参与表格。
name 被Certified Kubernetes认证的产品名称
version 被Certified Kubernetes认证的产品版本(非Kubernetes版本)
website_url 产品介绍地址
repo_url 如果产品是开源的,就必须指向包含源代码的主要GitHub repo地址。也是可以接受Docker镜像地址。可选的
documentation_url 产品文档地址
product_logo_url 产品Logo地址(必须是 SVG、AI 或者 EPS 格式,且需包含产品名称),如果没有则使用公司的Logo
type 产品类型,包含三种 发行版( product a distribution), 托管平台(hosted platform) 或者安装器(installer)
description 一句话的产品描述文字

如下就是一个样例

vendor: Yoyodyne
name: Turbo Encabulator
version: v1.7.4
website_url: https://yoyo.dyne/turbo-encabulator
repo_url: https://github.com/yoyo.dyne/turbo-encabulator
documentation_url: https://yoyo.dyne/turbo-encabulator/docs
product_logo_url: https://yoyo.dyne/assets/turbo-encabulator.svg
type: distribution
description: 'The Yoyodyne Turbo Encabulator is a superb Kubernetes distribution for all of your Encabulating needs.'

接下来我们就可以提交一个PR来让CNCF社区人员来进行复核了,通常情况下会在提交后的3个工作日内回复。

清理环境

运行sonobuoy delete命令即可完成整个测试过程中产生的K8S资源。

不过如果sonobuoy的测试用例执行失败后不会自动清除,需要用户执行清理残留资源

总结

本文主要讲述了小白对CNCF社区对Kubernetes一致性认证的理解,以及如何利用Sonobuoy工具来对自己的Kubernetes集群做集成测试。Sonobuoy是一个非常好的集成测试工具,它除了能做Kubernetes一致性测试外,还能做性能测试存储测试以及厂商自定义的测试。同时,本文还对提交Certified Kubernetes做了一个简单的流程说明。如果有读者的公司正在做相关的工作的话,希望能够帮到你。

产品如何做Kubernetes一致性认证相关推荐

  1. Kubernetes一致性认证

    Kubernetes一致性认证 Certified Kubernetes是CNCF基金会在2018年推出的Kubernetes一致性认证计划.它由CNCF基金会提供的一套诊断测试工具(Sonobuoy ...

  2. 精灵云容器云平台通过Kubernetes一致性认证

    Ghostcloud精灵云专为企业级用户打造的容器云平台EcOS日前通过Kubernetes一致性认证(Certified Kubernetes Conformance Program) .IBM.微 ...

  3. 进入日本市场的无线产品需要做什么的认证

    无线产品进入日本市场是需要电波法MIC(TELEC)的认证(主要针对RF部分)认证流程,需要提交资料及WLAN,Bluetooth测试认证简介如下:.一般需要知道这个是什么产品,是不是无线产品,能不能 ...

  4. 引领SDN网络浪潮 锐捷网络8款SDN交换机获OpenFlow v1.3一致性认证

    在近日举办的2016GNTC全球网络技术大会上,中国数据通信解决方案领导品牌锐捷网络旗下3大系列共8款交换机,通过全球SDN测试认证中心的OpenFlowv1.3一致性测试,获得由ONF颁发的相关认证 ...

  5. WiseCloud成为全球首批Kubernetes官方认证平台产品-CNCF官方发布

    [新闻快讯]11月13日美国时间,CNCF在旧金山正式对外发布Kubernetes软件一致性项目,并对外公布了包括睿云智合WiseCloud在内的全球32家率先通过认证测试的平台产品及Kubernet ...

  6. WiseCloud成为全球首批Kubernetes官方认证平台产品-睿云智合

    11月13日美国时间,CNCF在旧金山正式对外发布Kubernetes软件一致性项目,并对外公布了包括睿云智合WiseCloud在内的全球32家率先通过认证测试的平台产品及Kubernetest分发版 ...

  7. 哪些产品需要做3C认证,费用是多少

    哪些产品需要做3C认证,费用是多少 CCC认证作为我国的一项强制性产品认证,和国际通行的做法一样,比如说欧盟的强制认证CE认证,日本的强制认证PSE认证,澳大利亚的强制认证SAA认证等,也都是各国为了 ...

  8. 什么是无线产品?无线产品需要做哪些认证测试?

    一.无线产品是什么. WirelessProduct英文无线产品. 一般而言,无线(Wireless)指的是"无线电"或"无线电波". 因此,无线产品(Wire ...

  9. 进口产品需要做3c认证么?如何办理?

    进口产品需要做3c认证么?如何办理? 根据我国<认证认可条例>和<强制性产品认证管理规定>.<强制性产品认证标志管理办法>,列入强制性产品认证目录内的产品,必须经国 ...

最新文章

  1. 深度学习在自动驾驶感知领域的应用
  2. 爬取股票信息(股票代码+价格)
  3. Jfinal碰到的问题记录
  4. MongoDB--架构搭建(主从、副本集)之副本集
  5. 开发转运维有什么好点的理由_芜湖好点的团购社区费用
  6. 【GUI开发】图像处理类软件的浏览功能实现模型
  7. 集合代码----小练习3
  8. json 字符串和json对象之间相互转换
  9. 重装系统后dell戴尔笔记本电脑插入耳机没有声音
  10. antd里面select组件mode为tags时,输入重复按回车键做保留处理
  11. ‘XXXX’ was compiled with optimization - stepping may behave oddly; variables may not be available
  12. 【云原生】Grafana 介绍与实战操作
  13. css hack *html,css hack 大全 各个浏览器的css
  14. 一文读懂工业设计中心的申报条件-深科信
  15. stack unwinding
  16. Python 学生管理系统+mysql+Flask
  17. 【GANs】Deep Convolution Generative Adversarial Network
  18. 基于JAVA酒店管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  19. 嵌入式常用的算法 - 斜波函数
  20. 鸿蒙系统手机一览表,华为鸿蒙os系统支持的手机型号有哪些?鸿蒙os适配机型列表一览[多图]...

热门文章

  1. Promise 实现原理
  2. 泛函分析 03.03 内积空间与Hilbert空间 - 正交系和正交投影
  3. Java学习之类(三):构造方法和创建对象
  4. RabbitMQ 主题模式即topic类型交换机
  5. java图表库_美丽的Java图表类库
  6. 最强大的苹果系统清理与卸载工具
  7. linux中python怎么换行,python怎么换行写代码
  8. recv函数和send函数
  9. 米联客 CH02基于ZYNQ的嵌入式LINUX移植
  10. python:点击就能玩的超级玛丽小游戏(附有源码)