
云原生后端开发工具微服务【免费下载链接】operator-sdkSDK for building Kubernetes applications. Provides high level APIs, useful abstractions, and project scaffolding.项目地址https://gitcode.com/gh_mirrors/op/operator-sdk点击查看免费下载导读operator-sdk scorecard是 Operator SDK 内置的测试执行命令用于对一个 Operator bundle镜像或目录运行一系列预定义的测试评估该 Operator 是否达到可发布到 OLMOperator Lifecycle Manager的质量基线。读完本文你将掌握 scorecard 的全部命令行参数及其默认值、bundle 配置文件的编写方法、text/json/xunit 三种结果输出格式的差异以及命令底层在 Kubernetes 集群中的 Pod 执行与资源清理机制。命令概览与语法scorecard 命令的核心作用是运行一组对 Operator bundle 的评分测试。它通过命令行标志flags配置 DSL测试描述、bundle 与选择器selector并接收一个必填位置参数要么是一个 bundle 镜像要么是一个包含 manifests 与 metadata 的目录。注意如果传入的是镜像 tag则该镜像必须已经存在于远端镜像仓库命令执行时会拉取该镜像本地镜像需要先推送到远端。如果传入的是目录则必须是符合 bundle 布局的本地目录。operator-sdk scorecard [flags]从源码看该命令在 internal/cmd/operator-sdk/scorecard/cmd.go 中定义其validate()方法要求参数个数必须为 1否则直接报错a bundle image or directory argument is required这是命令的硬性入参约束func (c *scorecardCmd) validate(args []string) error { if len(args) ! 1 { return fmt.Errorf(a bundle image or directory argument is required) } return nil }如果传入的参数在本地文件系统中不存在os.Stat报os.ErrNotExist命令会将其视为镜像调用extractBundleImage()通过 registry 工具拉取并解包到本地临时目录后继续执行cmd.go。命令行参数全解scorecard 提供了 12 个本命令专属标志下表完整列出含默认值与含义标志简写默认值说明--config-c空自动推导scorecard 配置文件路径默认在 bundle 内查找--help-h—显示 scorecard 帮助信息--kubeconfig—空kubeconfig 路径--list-Lfalse仅列出会被执行的测试不真正运行--namespace-n空由 kubeconfig 推导运行测试 Pod 的命名空间--output-otext结果输出格式合法值text、json、xunit--pod-security—legacy是否以受限 Pod 安全上下文运行 scorecard--selector-l空标签选择器决定运行哪些测试--service-account-sdefault测试使用的 ServiceAccount--skip-cleanup-xfalse测试完成后禁用资源清理--storage-image-bquay.io/operator-framework/scorecard-storagesha256:a3bfda71281393c7794cabdd39c563fb050d3020fd0b642ea164646bdd39a0e2Scorecard Pod 使用的存储镜像--test-output-ttest-output测试输出目录--untar-image-uquay.io/operator-framework/scorecard-untarsha256:2e728c5e67a7f4dec0df157a322dd5671212e8ae60f69137463bd4fdfbff8747Scorecard Pod 使用的解包镜像--wait-time-w30s等待测试完成的最长时间示例格式35s从父命令继承的全局标志scorecard 作为operator-sdk的子命令还继承了两个全局标志标志说明--plugins strings本次子命令执行所使用的插件键列表--verbose启用详细日志输出其中--verbose在 bundle 镜像解包时尤为有用源码中extractBundleImage()会读取 viper 中的VerboseOpt仅在开启 verbose 时才输出带 bundle 字段的解包日志否则丢弃日志cmd.go。典型用法示例以下命令均以传入 bundle 目录为例# 使用默认配置运行 scorecard结果输出为 text operator-sdk scorecard ./bundle # 指定配置文件与命名空间 operator-sdk scorecard ./bundle --config config/scorecard/config.yaml --namespace my-operator-ns # 仅列出当前配置与选择器会命中的测试 operator-sdk scorecard ./bundle --list # 只运行 olm 套件的测试 operator-sdk scorecard ./bundle --selector suiteolm # 输出 JSON 格式结果并指定 kubeconfig operator-sdk scorecard ./bundle --output json --kubeconfig /path/to/kubeconfig # 等待测试最多 60 秒测试结束后不清理资源便于排查 operator-sdk scorecard ./bundle --wait-time 60s --skip-cleanup配置文件与测试选择机制配置文件定位规则scorecard 配置文件的默认查找路径遵循以下优先级见 cmd.go若显式传入--config直接使用该路径否则读取 bundle 元数据注解operators.operatorframework.io.test.config.v1指定的配置目录注解的键值逻辑见 internal/annotations/scorecard/scorecard.go若注解不存在回退到 bundle 内的默认位置tests/scorecard/config.yaml常量定义于 internal/scorecard/config.go。配置文件通过scorecard.LoadConfig()读取并反序列化为v1alpha3.Configuration结构其 YAML 顶层字段为kind: Configuration与apiversion: scorecard.operatorframework.io/v1alpha3。配置示例仓库测试数据中的一份完整配置internal/scorecard/testdata/bundle/tests/scorecard/config.yaml展示了基本结构kind: Configuration apiversion: scorecard.operatorframework.io/v1alpha3 metadata: name: config stages: - parallel: true tests: - image: quay.io/operator-framework/scorecard-test:dev entrypoint: - scorecard-test - basic-check-spec labels: suite: basic test: basic-check-spec-test - image: quay.io/operator-framework/scorecard-test:dev entrypoint: - scorecard-test - olm-bundle-validation labels: suite: olm test: olm-bundle-validation-test - image: quay.io/operator-framework/scorecard-test:dev entrypoint: - scorecard-test - olm-crds-have-validation labels: suite: olm test: olm-crds-have-validation-test - image: quay.io/operator-framework/scorecard-test:dev entrypoint: - scorecard-test - olm-crds-have-resources labels: suite: olm test: olm-crds-have-resources-test - image: quay.io/operator-framework/scorecard-test:dev entrypoint: - scorecard-test - olm-spec-descriptors labels: suite: olm test: olm-spec-descriptors-test - image: quay.io/operator-framework/scorecard-test:dev entrypoint: - scorecard-test - olm-status-descriptors labels: suite: olm test: olm-status-descriptors-test每个测试项的关键字段image运行该测试的镜像entrypoint测试镜像的入口命令与子命令如scorecard-test basic-check-speclabels测试标签其中suite与test是约定俗成的两个标签供--selector过滤使用storage可选测试产物挂载路径若测试需要输出文件到共享存储卷可在该项配置storage.spec.mountPath.path未配置时继承Configuration顶层的storage设置对应 scorecard.go 中的setTestDefaults。stages支持多阶段编排每个阶段可设置parallel: true并行执行该阶段全部测试或false串行执行。并行与串行两种执行路径分别实现在 scorecard.go 的runStageParallelgoroutine WaitGroup与runStageSequential中。标签选择器过滤--selector采用 Kubernetes 标准标签选择器语法由k8s.io/apimachinery/pkg/labels解析与每个测试的labels进行匹配。命中逻辑见 scorecard.go 的selectTests()选择器为空或未设置时运行全部测试设置后仅运行标签匹配的测试。典型用法# 仅运行 olm 套件 operator-sdk scorecard ./bundle --selector suiteolm # 仅运行指定名称的测试 operator-sdk scorecard ./bundle --selector testolm-crds-have-validation-test--list先预览再执行--list-L模式不会真正在集群中创建任何资源而是将配置中经选择器过滤后会被执行的测试直接列出。其实现见 internal/scorecard/formatting.go 的Scorecard.List()遍历所有 stage对每个 stage 执行selectTests()并构造v1alpha3.Test项。该模式对调试配置、确认选择器是否生效非常实用且无需连接 Kubernetes 集群。执行流程从 bundle 到测试 Pod真正运行时scorecard 的执行链路cmd.go scorecard.go可概括为解析 bundle通过registryutil.FindBundleMetadata读取 bundle 元数据创建 ConfigMapPodTestRunner.Initialize将 bundle 数据打包成 ConfigMap 写入目标命名空间scorecard.go按 stage 执行测试对每个 stage 选择测试 → 填充存储默认值 → 并行或串行运行运行单个测试PodTestRunner.RunTest为每个测试创建scorecard-test-xxxxPodtestpod.go并轮询等待 Pod 中scorecard-test容器终止1 秒间隔wait.PollUntilContextCancel汇总结果读取 Pod 日志将 JSON 反序列化为v1alpha3.TestStatusformatting.go清理默认删除测试 Pod 与 ConfigMap超时场景下清理会使用独立的 30 秒上下文保证完成scorecard.go。测试 Pod 的内部结构从 testpod.go 的getPodDefinition()可以看到每个测试 Pod 的组成主容器scorecard-test运行配置中指定的测试镜像与 entrypoint挂载/bundle只读用于访问解包后的 bundle 数据并通过 downward API 注入环境变量SCORECARD_NAMESPACEInit 容器scorecard-untar使用--untar-image指定的镜像把 ConfigMap 卷中的bundle.tar.gz解压到/scorecard-bundle存储 sidecar可选当测试配置了storage.spec.mountPath.path时addStorageToPodstorage.go会追加scorecard-storageemptyDir 卷、scorecard-gathersidecar 容器并注入环境变量SCORECARD_STORAGE测试产物最终通过exec进入 sidecar 用tar打包拉回本地--test-output目录按suite/test组织见getDestPath。Pod 安全上下文--pod-security参数控制是否以受限安全上下文运行测试 Podcmd.go scorecard.golegacy默认不注入安全上下文兼容传统命名空间与 RBAC 环境restricted为 Pod 设置runAsNonRoot: true、seccompProfile: RuntimeDefault并为所有容器设置allowPrivilegeEscalation: false、drop: [ALL]满足更严格的安全基线要求。集群连接与命名空间推导kubeconfig 解析kubeclient.go依次从--kubeconfig标志、KUBECONFIG环境变量、$HOME/.kube/config、集群内连接in-cluster获取客户端命名空间推导kubeclient.go优先级为--namespace标志 → kubeconfig 中配置的 namespace →default。ServiceAccount 的最终取值也遵循“配置文件中serviceAccount字段优先于--service-account标志”的规则cmd.go。结果输出与退出码text默认逐条打印每个测试项的MarshalText()结果最易于阅读。若没有任何测试被选中会输出0 tests selectedcmd.go。json将整个v1alpha3.TestList以缩进 JSON 输出便于 CI 脚本用jq等工具解析。每个测试项包含spec镜像、entrypoint、标签与status结果列表、错误、建议。xunit输出标准 XUnit XML根节点testsuites名称为scorecard专为 Jenkins 等 CI 系统设计。转换逻辑见 internal/cmd/operator-sdk/scorecard/xunit/xunit.go每个测试项生成一个testsuitesuite 名称取自labels.test缺失时按序号命名为testsuite-001每个测试结果映射为testcasepass→ 成功用例、fail→failure、error→error同时记录spec.image、spec.entrypoint、labels.cluster-phase等属性与日志system-out。退出码约定结果输出完成后hasFailingTest()cmd.go会扫描所有测试结果只要存在非pass状态的用例fail 或 error命令即调用os.Exit(1)结束全部通过则正常返回 0。这一行为让 scorecard 可以无缝嵌入 CI 流水线作为质量门禁。内置测试能力一览默认配置中内置了 basic 与 olm 两套测试实现见 internal/scorecard/tests/basic.go 与 internal/scorecard/tests/olm.go测试套件校验内容basic-check-specbasic检查 bundle 中示例 CR 是否包含spec字段olm-bundle-validationolm校验 bundle 格式与内容CSV、CRD 的 schema 等olm-crds-have-validationolm校验 CRD 是否包含 validationOpenAPI schemaolm-crds-have-resourcesolm校验 CSV 中 owned CRD 是否声明了resourcesolm-spec-descriptorsolm校验示例 CR 的spec字段是否都有 descriptorolm-status-descriptorsolm校验示例 CR 的status字段是否都有 descriptor这些测试的镜像需要按配置拉取若使用quay.io/operator-framework/scorecard-test系列镜像请确保集群可以访问该镜像仓库。你也可以编写自定义测试镜像并在配置中替换image与entrypoint。常见问题与排查建议镜像必须远端可达传入 bundle 镜像 tag 时必须确保镜像已推送且集群可拉取离线/断网环境建议改用 bundle 目录形式。0 tests selected配置解析正常但选择器没有命中任何测试可用--list核对配置并检查labels拼写。等待超时默认 30 秒可能不足以完成拉镜像与测试可调大--wait-time即使超时命令也会尽力输出已收集的部分测试结果见 cmd.go 对context.DeadlineExceeded的处理。排查残留资源测试 Pod 命名带scorecard-test-前缀、标签appscorecard-test与testrunconfigmap名排查时可用--skip-cleanup保留现场或通过标签手动定位testpod.go。相关命令scorecard 是operator-sdk命令体系的一员父命令的完整说明见 operator-sdk。赞分享云原生后端开发工具微服务【免费下载链接】operator-sdkSDK for building Kubernetes applications. Provides high level APIs, useful abstractions, and project scaffolding.项目地址https://gitcode.com/gh_mirrors/op/operator-sdk点击查看免费下载相关推荐Operator SDK Scorecard测试评估Operator质量Operator SDK Scorecard测试评估Operator质量 在Kubernetes Operator开发过程中确保Operator的质量和可靠云原生后端开发工具微服务Operator SDK generate bundle 命令详解从 Operator 清单到可发布 OLM Bundle 的完整指南Operator SDK generate bundle 命令详解从 Operator 清单到可发布 OLM Bundle 的完整指南 operator sd云原生后端开发工具微服务使用 operator-sdk 的 run/cleanup 子命令通过 OLM 测试 Operator 部署bundle、package manifests 与升级清理实战使用 operator sdk 的 run/cleanup 子命令通过 OLM 测试 Operator 部署bundle、package manifests云原生后端开发工具微服务上一篇Symfony Yaml 组件实战指南在 PHP 项目中解析与序列化 YAML 1.2 配置下一篇Cloudflare Wrangler 认证完全指南wrangler login 与 API Token 实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考