【问题标题】:Possible to do a "dry run" validation of files?可以对文件进行“试运行”验证吗?
【发布时间】:2015-11-14 17:26:21
【问题描述】:

在 Kubernetes(Service、ReplicationController 等)中创建对象之前,我想测试该对象的 JSON 或 YAML 规范是否有效。但我不想实际创建对象。

是否有一些“试运行”相当于运行kubectl create --validate=true -f file.json,但只是让我知道它通过了验证,而不是实际创建它?

理想情况下,如果我可以通过 API 完成此操作,并且不需要使用 kubectl,那就太好了。但如果它需要我使用 kubectl,我可以让它工作。

谢谢。

【问题讨论】:

标签: validation kubernetes


【解决方案1】:

这对我有用(kubernetes 1.7 和 1.9):

kubectl apply --validate=true --dry-run=client --filename=file.yaml

【讨论】:

  • 当你没有服务器连接时这是否有效,我怀疑它不是客户端,这在 CI 情况下对验证没有帮助。
  • 我添加了一个答案来解决这种情况:stackoverflow.com/a/61927674/1493439
  • --dry-run=BOOLEAN 已被弃用。不过,这可行。 --dry-run=client
  • 虽然--dry-run=client是客户端验证,但还是需要服务器连接:github.com/kubernetes/kubernetes/issues/…
【解决方案2】:

一些 kubectl 命令支持--dry-run 标志(如kubectl runkubectl exposekubectl rolling-update)。

有一个 issue 打开以将 --dry-run 标志添加到更多命令。

【讨论】:

    【解决方案3】:

    有一个名为 kubeval 的工具可以根据预期的架构验证配置,并且不需要连接到集群即可运行,这使其成为 CI 等应用程序的不错选择。

    【讨论】:

      【解决方案4】:

      使用--dry-run--validate 似乎只能部分解决问题。

      客户端验证并不详尽。它主要确保 yaml 文件中的字段名称和类型是有效的。完全验证是 总是由服务器完成,并且总是可以强加额外的 客户端验证的限制/约束。

      来源 - kubectl --validate flag pass when yaml file is wrong #64830

      鉴于此,您无法进行全套验证,除非将其完全交给服务器进行审查。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-21
        • 1970-01-01
        • 2011-08-13
        • 1970-01-01
        相关资源
        最近更新 更多