配置Dapr Sidecar资源限制时遭遇正则表达式解析错误求助
问题场景
部署设置了Sidecar资源限制的Dapr应用时,注入器日志报错无法解析资源配置,最终Sidecar使用默认资源参数。
原始配置
annotations: dapr.io/enabled: "true" dapr.io/app-id: "simple-js" dapr.io/app-port: "5001" dapr.io/sidecar-cpu-limit: “200m” dapr.io/sidecar-cpu-request: “100m” dapr.io/sidecar-memory-limit: “200Mi” dapr.io/sidecar-memory-request: “100Mi”
错误日志(翻译后)
time="2022-12-18T15:57:52.123897777Z" level=warning msg="无法设置容器资源要求:解析sidecar cpu限制失败:资源量必须匹配正则表达式'^([+-]?[0-9.]+)([eEinumkKMGTP][-+]?[0-9])$'。将使用默认值" instance=dapr-sidecar-injector-858f7757f8-6dzdq scope=dapr.injector.container type=log ver=1.9.5
time="2022-12-18T16:07:57.422789042Z" level=warning msg="无法设置容器资源要求:解析sidecar内存限制失败:资源量必须匹配正则表达式'^([+-]?[0-9.]+)([eEinumkKMGTP][-+]?[0-9])$'。将使用默认值" instance=dapr-sidecar-injector-858f7757f8-6dzdq scope=dapr.injector.container type=log ver=1.9.5
问题原因
配置中资源限制值使用了全角双引号“”,而非YAML语法要求的半角双引号""。全角引号会被解析器当作资源值的一部分,导致实际传入的资源量(如“200m”)不符合Kubernetes资源量的格式规范,触发正则匹配失败。
解决方案
将所有资源限制注解中的全角引号替换为半角双引号,修正后的配置如下:
annotations: dapr.io/enabled: "true" dapr.io/app-id: "simple-js" dapr.io/app-port: "5001" dapr.io/sidecar-cpu-limit: "200m" dapr.io/sidecar-cpu-request: "100m" dapr.io/sidecar-memory-limit: "200Mi" dapr.io/sidecar-memory-request: "100Mi"
重新部署应用后,Sidecar将正确应用配置的资源限制。
内容的提问来源于stack exchange,提问作者Kai Walter

