2

在 Knative in Action 中处理一些示例,并在尝试设置最小 CPI 和 RAM 时遇到以下错误:

Omers-MacBook-Pro-2:Knative development$ kn service update hello-example --request 'cpu=500m,memory=256Mi'
Error: giving up after 3 retries: admission webhook "validation.webhook.serving.knative.dev" denied the request: validation failed: Saw the following changes without a name change (-old +new): spec.template.metadata.name
{*v1.RevisionTemplateSpec}.Spec.PodSpec.Containers[0].Resources.Requests:
    -: "map[]"
    +: "map[cpu:{i:{value:500 scale:-3} d:{Dec:<nil>} s:500m Format:DecimalSI} memory:{i:{value:268435456 scale:0} d:{Dec:<nil>} s: Format:BinarySI}]"

Run 'kn --help' for usage

我也尝试过(正如书中建议的那样):

Omers-MacBook-Pro-2:Knative development$ kn service update hello-example --requests-cpu 500m --requests-memory 256Mi

但这种格式似乎已被弃用。

关于为什么这可能会失败的任何想法?

4

2 回答 2

0

我怀疑是 kn CLI 正在发送请求并且与 knative serving 的版本不兼容

确保 kn CLI 的版本与您安装的 knative serving 的版本兼容。我建议拥有相同的版本是安全的。

例如,我能够使用 kn CLI v0.21 和 knative serving v0.21 让您的示例正常工作

你可以检查kn version

kn version

Version:      v0.21.0
Supported APIs:
- serving.knative.dev/v1 (knative-serving v0.21.0)

我所做的重现使用 konk 和 kn CLI 从这里下载 kn CLI 二进制 v0.21 https://github.com/knative/client/releases/tag/v0.21.0 然后从这里安装 kind 0.10 https://github .com/kubernetes-sigs/kind/releases/tag/v0.10.0

然后在 kind (konk) https://konk.dev上安装 knative不到 5 分钟

curl -sL get.konk.dev | bash

konk 带有服务和事件示例应用程序。

对资源请求运行更新命令

kn service update hello --request 'cpu=500m,memory=256Mi'

您将看到以下输出

Updating Service 'hello' in namespace 'default':

  0.053s The Configuration is still working to reflect the latest desired specification.
 11.497s Traffic is not yet migrated to the latest revision.
 11.608s Ingress has not yet been reconciled.
 11.829s Waiting for load balancer to be ready
 11.986s Ready to serve.

Service 'hello' updated to latest revision 'hello-00002' is available at URL:
http://hello.default.127.0.0.1.nip.io
于 2021-04-01T03:55:16.947 回答
0

看起来您正在尝试kn针对由旧版本工具创建的服务向我们提供更新版本的kn工具。在0.21 版中,有从客户端到服务器端命名支持的切换。

作为从客户端到服务器端命名的一次性转换,您可能需要运行:

kn service update hello-example --revision-name ""

如果您愿意,可以将其与现有更新结合起来:

kn service update hello-example --revision-name "" --request "cpu=500m,memory=256Mi"

请注意,清除客户端生成的修订名称在服务器端创建一个新的修订(并可能将其推出),因为该名称是服务器上修订模板的一部分。

于 2021-05-26T18:23:21.133 回答